点击按钮更改公共财产的价值(C#)

时间:2018-04-05 07:21:50

标签: c# winforms button properties

我有一个Windows窗体,其中包含一个复选框列表和一个按钮。我还有另一个类,我希望从这个winform接收变量。所以我尝试做的测试就是单击winform中的按钮,让另一个类弹出MessageBox。
这就是我为winform所写的内容:
WINFORM

    private DialogResult DR;

    public DialogResult DiaRes
    {
        get { return DR; }
        set { }
    }

    public SelectLinksM(string[] allLinks)
    {
        InitializeComponent();            

        checkedListBox1.Items.AddRange(allLinks);
        checkedListBox1.CheckOnClick = true;
    }

    public void sndLinksSelection_Click(object sender, EventArgs e)
    {
        DR = DialogResult.OK;
    }

这就是其他课程中发生的事情:
外部课程

        MyClass.SelectLinksM frmSelection =
        new MyClass.SelectLinksM(linkNames.ToArray());
        frmSelection.Show();

        DialogResult result = frmSelection.DiaRes;

        if (result == DialogResult.OK)
        {
            MessageBox.Show("I passed a value to the main class!");
        }

但是现在点击按钮并没有做任何事情。 我期待的是单击按钮,以便它更改DR的值,从而更改由另一个类读取的DiaRes,这将触发MessageBox。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

说明
您不会触发所需的方法。通过单击,您可以执行sndLinksSelection_Click(object sender, EventArgs e)方法,但在该方法中,您只需更改值,但不会分派其他操作。你应该在单独的类中调用该方法。我举例说明了我的意思,你应该根据自己的需要进行编辑

示例

  private DialogResult DR;

    public DialogResult DiaRes
    {
        get { return DR; }
        set { }
    }

    public SelectLinksM(string[] allLinks)
    {
        InitializeComponent();            

        checkedListBox1.Items.AddRange(allLinks);
        checkedListBox1.CheckOnClick = true;
    }

    public void sndLinksSelection_Click(object sender, EventArgs e)
    {
        DR = DialogResult.OK;
        //<!---- Trigger the action here or nothing will happen
        DoSomething();
    }


public void DoSomething(){
        MyClass.SelectLinksM frmSelection = new MyClass.SelectLinksM(linkNames.ToArray());
        frmSelection.Show();

        DialogResult result = frmSelection.DiaRes;

        if (result == DialogResult.OK)
        {
            MessageBox.Show("I passed a value to the main class!");
        }
}   

答案 1 :(得分:0)

您需要阅读编写自定义类和子类化 让我试着在这里展示一个简单的例子

首先是一个简单的类:

public class MyClass
{
    private _dialogResult DialogResult;

    public DialogResult MyDialogResult
    {
       get { return _dialogResult; }
       set 
       {
          _diaologResult = value;
          ShowYourMessage();
       }
    }

    private void ShowYourMessage()
    {
       MessageBox.Show("I passed a value to the main class!");
    }
}

现在你的winform

private _myClass MyClass = new MyClass();

并在点击事件中

_myClass.MyDialogResult = DialogResult.OK;

在MyClass中你可以根据自己的喜好创建frmMessage,我在这里使用了一个空表单来展示它是如何工作的

通过这种方式,您可以将winform中的所有代码保持在绝对最小值,并将所有代码保留在您的班级中,以便进行良好的分离和解耦