如何更改其他表单(formBorderStyle等)的表单属性值?C#和windows窗体



这是示例代码

Form 1
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.None;
}
private void btnAdmin_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.Show();
}
}

表格1打开要求管理员密码的表格2。

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if(textBox1.Text == "123")
{
Setting frm = new Setting();
frm.Show();
this.Close();
}
else
{
MessageBox.Show("You have entered wrong password.");
}
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}

现在,如果您输入正确的密码,它将进入表单3,这是表单1的设置菜单。

public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}

private void btnSave_Click(object sender, EventArgs e)
{
Form1 frm = new Form1();
frm.Show();
if (fullscreenYes.Checked == true)
{
frm.FormBorderStyle = FormBorderStyle.None;
}
if (fullscreenYes.Checked == false)
{
frm.FormBorderStyle = FormBorderStyle.FixedSingle;
}
this.Close();
}
}

因此,现在,我想使用单选按钮从表单3更改表单1的FormBorderStyle,但它不起作用,因为我当前的代码只是打开一个新的Form1,并将该设置应用于新打开的表单1,而保留先前打开的表单。我最后有两个中一这样打开。如何在不打开2个表单1的情况下直接从表单3更改表单1属性?我已经研究了好几个小时了,但还是想不通。帮助

有几种方法可以实现您的目标。

#1通过Form1的构造函数访问Form1,授予对Form3的访问权限

private Form1 _owner;
public Form3(Form1 owner)
{
owner = _owner;
}
void DoSomethingToForm1()
{
// do something.. _owner.Prop = ?;
}

然后从Form1 调用Form3

new Form3(this).Show();

#2使用单例模式

private static object _lockObj = new object();
private static Form1 _instance = new Form1();
public static Form1 Instance 
{
lock(_lockObj)
{
get
{
if(_instance == null || _instance.IsDisposed) _instance = new Form1();
return _instance;
}
}
}

然后从Form3 调用Form1

var f = Form1.Instance;
// do something to form1

要操作表单的现有实例以便修改或设置内容,请使用OpenForms.OfType

快速采样:

var frm1 = Application.OpenForms.OfType<Form1>().Single();
//set some stuff
frm1.FormBorderStyle = FormBorderStyle.None;
frm1.Show();

相关内容

最新更新