我正在尝试在我的应用程序的主窗体中修改按钮上的文本(例如)。
但是这个东西对Application.Run()
之前创建的窗口不起作用。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 Mainwindow = new Form1();
Application.Run(Mainwindow);
///Some stuff to do...
Mainwindow.button1.Text = "TextToChangeTo"; // And nothing happens here
}
这里有什么好的解决方法吗?
答案 0 :(得分:1)
您正尝试在Application.Run()
方法之后在主窗体中设置按钮文本。这是不正确的,因为在应用程序完成之前不会设置文本。
尝试将代码添加到MainWindow()的构造函数或load事件中。例如:
public partial class MainWindow : Form
{
public MainWindow()
{
InitializeComponent();
this.button1.Text = "Some Text";
}
}
更新
显示两种可能的解决方案,用于操纵另一种形式的控件。
将MainWindow
传递给另一个表单。
窗体2
public partial class Form2 : Form
{
MainWindow mainWindow;
public Form2()
{
InitializeComponent();
}
public Form2(MainWindow mainWndow)
:this()
{
this.mainWindow = mainWndow;
}
public void DoWork()
{
if (this.mainWindow != null)
this.mainWindow.button1.Text = "I set your text";
}
}
主窗口
private void button1_Click(object sender, EventArgs e)
{
var form2 = new Form2(this);
form2.ShowDialog();
}
此示例使用MainWindow
关键字传递this
的实例。在Form2
中,您会看到DoWork()
然后可以设置值。
在Program类中创建对MainWindow的静态引用。
Program.cs的
static class Program
{
public static MainWindow MainWindow { get; private set; }
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Program.MainWindow = new MainWindow();
Application.Run(Program.MainWindow);
}
}
Form2.cs
public void DoWork()
{
Program.MainWindow.button1.Text = "I set your text";
}
答案 1 :(得分:0)
如果您在Application.Run(MainWindow)
关闭后执行MainWindow
之后添加内容。
所以在它之前添加。
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 Mainwindow = new Form1();
Mainwindow.button1.Text = "TextToChangeTo";
Application.Run(Mainwindow);
}
答案 2 :(得分:0)
你应该像这样编辑你的代码:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form1 frm = new Form1();
frm.button1.Text = "Some Text";
Application.Run(frm);
}