我想修改 Mission Planner 中的内容,我想在此函数中更改C#中其他类/表单中的按钮:
public void CloseAllConnections()
{
myButton1.Text = "Disconnecting all";
...
}
功能位于:
namespace MissionPlanner
{
public partial class MainV2 : Form
{
...
}
...
}
我的想法是,当我专注于该菜单时,一切都很完美,但有时我会收到错误
我甚至做了这样的功能
public MyButton GetMyButton1 { get { return myButton1; } }
并创建了新实例
var myObject = new MainV2(true);
myObject.myButton1.Text = "Disconnecting all";
没有用......
我甚至不知道调用函数的位置,因为很明显没有从MainV2
类调用...
An exception of type 'System.NullReferenceException' occurred in MissionPlanner.exe but was not handled in user code
有什么想法吗?谢谢。
答案 0 :(得分:0)
您需要获取按钮所在表单的实例。 通过在表单的构造函数中保存对表单的静态引用来执行此操作:
namespace MissionPlanner
{
public partial class MainV2 : Form
{
public static MainV2 CurrentForm;
public MainV2()
{
CurrentForm = this;
InitializeComponent();
}
然后在代码中的其他地方:
public void CloseAllConnections()
{
MainV2.CurrentForm.myButton1.Text = "Disconnecting all";
...
}
答案 1 :(得分:0)
您的点击事件表单对象似乎被调用(名称)myButton1,并且您正在调用以下内容来更改它:myobject.myButton1.Text =“Disconnecting all”。请尝试使用myButton1.Text =“断开所有连接”。
答案 2 :(得分:0)
您可以尝试的一件事是将表单中的按钮传递给将要修改按钮的类。
public class Example
{
public Button MyButton1 { get; set; }
public Example(Button myButton1)
{
MyButton1 = myButton1;
}
public void CloseAllConnections()
{
MyButton1.Text = "Disconnecting all";
}
}
这应该可以在MainV2上成功设置按钮的文本。
答案 3 :(得分:0)
您是否在应用中使用任何类型的多线程?如果是这样: 确保您只是从创建它的同一个线程中更改按钮, 或者只是使用ControlInstance.Invoke()方法委派更改。