我有一个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。
我做错了什么?
答案 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中的所有代码保持在绝对最小值,并将所有代码保留在您的班级中,以便进行良好的分离和解耦