从C#中的另一个表单类更改Button的文本

时间:2015-03-19 13:35:08

标签: c# .net c#-4.0 c#-3.0

我想修改 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

有什么想法吗?谢谢。

4 个答案:

答案 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()方法委派更改。