创建一个用户可以选择“不再显示”的消息框。

3

我制作了一个同时具备群发功能和多消息发送/垃圾信息发送的通讯工具,它运行良好,但我想让它变得更好。显然,我需要编写代码让Skype允许这个程序执行其功能。以下是代码:

    private void Form1_Load(object sender, EventArgs e)
    {
        //I entered a message box so it doesn't crash instantly.
        MessageBox.Show("Please allow SkypeBot.vshost.exe to access skype. (Look at your Skype application)");
        Skype skype = new Skype();
        skype.Attach();
        getContacts(skype);
    }

如果用户已经允许过,那么怎样才能使程序不再弹出MessageBox而直接加载表单呢?(因为在第一次允许后就不会再询问了)
如果有人感到好奇,这是它的外观: http://imgur.com/f0aaiZN, 运行正常,只是想改进一下,所以对上述请求的任何答案都将不胜感激:D

@RezaAghaei 使用一个简单的void方法getContacts(Skype skype)(显然使用skype4com.dll,否则这一切都不会起作用)如果您所说的是数据绑定,那么listBox1.DataSource = Contacts;就是其中的一行。 - RDR
哦,你在说进程允许的事情吗?我不知道它是如何检测到的,它只是使用主贴中显示的代码自动执行。 基本上,当我运行应用程序时,在加载表单之前,它会显示带引号的消息框,然后在 Skype 上会出现一个黄色的条形窗口询问是否允许/拒绝它,如果用户点击允许,则表单将加载,但如果不允许,则不会加载。我不知道它是如何检测到用户按下什么的,这也是我要问的,因为我需要知道如何添加“如果用户点击允许,则不再发送消息框”的功能。@RezaAghaei - RDR
我认为是这样,但我不知道如何添加复选框以在消息框上显示,并且也不知道确保它不再显示的代码。@RezaAghaei - RDR
没问题,我会为您提供一些答案,但在此之前,由于这两个问题不相关,最好编辑您的问题并仅在此处询问其中一个,并为另一个打开一个新问题。问题和答案应该对未来的读者有用,而在一个帖子中提出2个无关的问题是没有用的。 - Reza Aghaei
@RDR 我已经回答了这个问题,希望你觉得有帮助:) 如果你发布另一个关于排序的问题,我也会回答的:) - Reza Aghaei
显示剩余5条评论
1个回答

5
您可以通过在对话框中添加复选框来防止显示消息,使用户可以选择“不再显示此消息”。然后,您可以将复选框的值保存在设置中,并根据该设置决定是否显示对话框。
作为简单解决方案,您可以创建自己的自定义消息框:
  1. 创建一个名为MessageForm的新表单,作为您的自定义消息框,并放置按钮如“确定”按钮和其他按钮(如果需要)。对于每个按钮,设置适当的DialogResult属性值。因此,当您使用ShowDialog显示您的表单时,如果单击按钮,则无需编写代码,该表单将关闭并显示相应的对话框结果。
  2. 在您的项目Settings文件中添加一个布尔setting,例如将其命名为DontShow
  3. 在表单上放置一个复选框,并将其文本设置为“不再显示此消息”,然后处理CheckedChanged事件,并将复选框的值保存在DontShow设置中:
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    Properties.Settings.Default.DontShow = this.checkBox1.Checked;
    Properties.Settings.Default.Save();
}

现在你可以这样展示你的 MessageForm
if(!Properties.Settings.Default.DontShow)
    new MessageForm().ShowDialog();

你可以通过在构造函数中接受消息甚至添加一个public static void ShowMessage(string)来增强你的MessageForm,以便像消息框一样使用它。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接