在 UserControl 中处理来自主窗体的事件
Handling event from main form in UserControl
我正在尝试在主窗体中出现事件时在 UserControl 中执行代码。
表单代码:
public partial class mainForm : Form {
...
public event EventHandler listBoxIndexChanged;
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
listBoxIndexChanged?.Invoke(sender, e);
}
}
这里要提到的重要一点是,实际形式的 Name
也是 mainForm
,就像类名一样。
用户控件代码:
public partial class userControl1 : UserControl {
public userControl1() {
InitializeComponent();
mainForm.listBoxIndexChanged += mainForm_listBox1_IndexChanged;
}
private void mainForm_listBox1_IndexChanged(object sender, EventArgs e) {
// my code
}
}
此代码抛出错误 An object reference is required for the non-static field, method, or property 'mainForm.listBoxIndexChanged'
。我确定这很明显,但我做错了什么?
WinForms .NET Framework 4.8,VS 2019。
其运行方式是先创建 MainForm,然后在 MainForm 中创建 UserControl 的实例。因此,MainForm 知道 UserControl 但 UserControl 不知道 MainForm。因此,当您告诉 UserControl 使用 MainForm 时,它不知道 MainForm 是什么(无实例)。相反,您会希望 MainForm 在 UserControl 中触发一个方法并将所需的信息传递给它。
在您的用户控件中创建 MainForm 可以调用的方法:
public class UserControl1
{
public void doSomethingWhenSelectedIndexChanges(int selectedIndex){
// do stuff inside user control...
}
}
然后在您的 MainForm 中调用 UserControl 方法。
public class MainForm
{
private void ListBox1_SelectedIndexChanged(object sender, eventargs e)
{
UserControl1.doSomethingWhenSelectedIndexChanges(ListBox1.SelectedIndex);
}
}
MainForm 通过这种方式告诉 UserControl ListBox 选定的索引已更改,并将选定的索引传递给 UserControl。
我正在尝试在主窗体中出现事件时在 UserControl 中执行代码。
表单代码:
public partial class mainForm : Form {
...
public event EventHandler listBoxIndexChanged;
private void listBox1_SelectedIndexChanged(object sender, EventArgs e) {
listBoxIndexChanged?.Invoke(sender, e);
}
}
这里要提到的重要一点是,实际形式的 Name
也是 mainForm
,就像类名一样。
用户控件代码:
public partial class userControl1 : UserControl {
public userControl1() {
InitializeComponent();
mainForm.listBoxIndexChanged += mainForm_listBox1_IndexChanged;
}
private void mainForm_listBox1_IndexChanged(object sender, EventArgs e) {
// my code
}
}
此代码抛出错误 An object reference is required for the non-static field, method, or property 'mainForm.listBoxIndexChanged'
。我确定这很明显,但我做错了什么?
WinForms .NET Framework 4.8,VS 2019。
其运行方式是先创建 MainForm,然后在 MainForm 中创建 UserControl 的实例。因此,MainForm 知道 UserControl 但 UserControl 不知道 MainForm。因此,当您告诉 UserControl 使用 MainForm 时,它不知道 MainForm 是什么(无实例)。相反,您会希望 MainForm 在 UserControl 中触发一个方法并将所需的信息传递给它。
在您的用户控件中创建 MainForm 可以调用的方法:
public class UserControl1
{
public void doSomethingWhenSelectedIndexChanges(int selectedIndex){
// do stuff inside user control...
}
}
然后在您的 MainForm 中调用 UserControl 方法。
public class MainForm
{
private void ListBox1_SelectedIndexChanged(object sender, eventargs e)
{
UserControl1.doSomethingWhenSelectedIndexChanges(ListBox1.SelectedIndex);
}
}
MainForm 通过这种方式告诉 UserControl ListBox 选定的索引已更改,并将选定的索引传递给 UserControl。