winforms 如何从公共静态void button_click事件更改System.Windows.Forms标签的文本?

mwkjh3gx  于 2022-11-16  发布在  Windows
关注(0)|答案(1)|浏览(151)

更多详情:
假设我在main函数中创建了一个窗体、一个按钮和一个标签,并且我希望在单击按钮时标签文本发生变化。我得到了一个错误,即标签超出了作用域。由于某种原因,我的button_click方法无法访问标签。显然,我没有以正确的方式执行此操作,因为我显然误解了某些内容。但是,我如何才能以正确的方式执行此操作呢?
下面是一个例子,说明我正在尝试做什么,以及我目前是如何尝试做的。假设我有这个,并且除了**label.Text =“New Text”**之外,所有东西都可以编译:

using System;
using System.Windows.Forms;
namespace example {
    class demo {
        public static void Main(String[] args){
            Form form = new Form();
            Label label = new Label();
            label.Text = "Initial Text";
            Button button = new Button();
            button.Click += button_click;
            form.Controls.Add(button);
            form.ShowDialog();
        }

        public static void button_click(object sender, EventArgs e){
            label.Text = "New Text";
        }
    }
}
3wabscal

3wabscal1#

您发布的代码有两个问题。
1.适用范围
1.标签尚未添加到表单中。
请尝试以下操作:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace example
{
    class demo
    {
        private static Form _form1 = null;

        static void Main()
        {
            //create new instance
            _form1 = new Form();

            //set value
            _form1.Text = "Demo";

            //create new instance
            Label label1 = new Label();
            label1.Location = new Point(10,10);
            label1.Name = "label1";
           
            //set value
            label1.Text = "Initial Text";

            //add to form
            _form1.Controls.Add(label1);

            //create new instance
            Button button1 = new Button();

            //subscribe to event(s)
            button1.Click += Button1_Click;

            //set value
            button1.Location = new Point(10, 50);
            button1.Name = "button1";
            button1.Size = new Size(75, 30);
            button1.Text = "Click Me";

            //add to form
            _form1.Controls.Add(button1);

            //show
            _form1.ShowDialog();
        }

        private static void Button1_Click(object sender, EventArgs e)
        {
            //set value
            _form1.Controls["label1"].Text = "New Text";
        }
    }
}

注意static void Main(string[] args)中的string[] args是不必要的,因为您没有传递任何参数。

为这样的窗体编写代码是很乏味的,你可以考虑使用Visual Studio Community

资源

相关问题