C# 从Form2获取Form1复选框的值
我在这里和其他一些与此相关的网站上搜索过,并找到了答案。然而,要么解决方案不起作用,要么太模糊,我无法理解。我会解释我说“行不通”的意思 我尝试过两种方法。第一个是使用C# 从Form2获取Form1复选框的值,c#,winforms,C#,Winforms,我在这里和其他一些与此相关的网站上搜索过,并找到了答案。然而,要么解决方案不起作用,要么太模糊,我无法理解。我会解释我说“行不通”的意思 我尝试过两种方法。第一个是使用get和set,第二个是简单地将控件修饰符设置为true 使用这两个选项时,Form1的设计器中的值似乎不会更新,因此Form2只会将该值读取为false,因为默认情况下该值是复选框的值 在表格1中: public bool CheckBox { get { return this.checkBox
get
和set
,第二个是简单地将控件修饰符设置为true
使用这两个选项时,Form1
的设计器中的值似乎不会更新,因此Form2
只会将该值读取为false,因为默认情况下该值是复选框的值
在表格1
中:
public bool CheckBox
{
get { return this.checkBox1.Checked; }
//set { this.checkBox1.Checked = value; }
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = new Form2();
frm.ShowDialog();
}
在表格2中
:
private void button1_Click(object sender, EventArgs e)
{
Form1 frm = new Form1();
if (frm.CheckBox == true)
{
//Do whatever
}
}
这基本上就是我想要做的。如果我做错了什么,或者有更好的方法,请告诉我
谢谢。我猜这里的问题是如何使用实例变量。假设我有两种形式——形式1和形式2,它们的定义如下:
Form1 a = new Form1();
Form2 b = new Form2();
现在,在应用程序生命周期的后期,用户单击表单2上的按钮,您拥有的是(伪代码):
问题是“c”和“a”形式不一样——它们是同一形式的两个不同实例。解决此问题的最简单方法是将复选框设置为静态:
// in Form1...
public static bool CheckBox { get; set; }
现在您只有一个复选框值,它对于Form1的所有“副本”(实例)都是相同的
注释
这是可行的,但并不完美。如果你想要两份Form1,而不是每个都有自己的“复选框”值,这对你来说是行不通的。相反,您需要做的是开始传递实例。因此,我在答案开头列出的代码需要更改为:
Form1 a = new Form1();
Form2 b = new Form2(a);
其中,“Form2”现在定义为:
public class Form2 : System.Windows.Forms.Form {
private Form1 copyOfForm1;
public Form2(Form1 theInstance) {
InitializeComponent();
copyOfForm1 = theInstance;
}
}
现在,只要使用“copyOfForm1”变量,就可以从FormB内部访问Form1的一个实例。这与关于实例/静态的所有内容都相去甚远,但希望它至少能让您走上正确的轨道。祝你好运 您正在
Form2
中创建一个新的Form
实例。它与当前的Form1
实例完全不同
相反,您可以将当前Form1实例传递给ShowDialog
方法,如下所示:
frm.ShowDialog(this);
通过这样做,您将Form2
的属性设置为Form1
实例。因此,您可以使用Owner
属性从Form2
访问当前实例。您还应该将其强制转换为Form1
以访问复选框
属性
private void button1_Click(object sender, EventArgs e)
{
if (((Form1)Owner).CheckBox == true)
{
//Do whatever
}
}
using (var form2 = new Form2())
{
if (form2.ShowDialog() == DialogResult.OK)
{
var checkboxValue = form2.Checkbox;
}
}
在Form2上,将复选框值设为属性。关闭表单时,可以将对话框Result设置为OK。因此,在form2的闭幕式上或在您真正想要的任何地方:
this.DialogResult = DialogResult.OK;
然后使用以下命令创建、显示和检索复选框值(在关闭form2时也会处理它)。当DialogResult正常时,可以从属性中获取值
private void button1_Click(object sender, EventArgs e)
{
if (((Form1)Owner).CheckBox == true)
{
//Do whatever
}
}
using (var form2 = new Form2())
{
if (form2.ShowDialog() == DialogResult.OK)
{
var checkboxValue = form2.Checkbox;
}
}
如果不想关闭表单,可以将另一个bool属性设置为true,并在需要获取复选框值时检查该属性。因此,在表格2中:
public bool CheckboxSelected { get; set; }
public bool Checkbox { get; set; }
event for Checkbox change:
Checkbox = value of checkbox;
CheckboxSelected = true;
然后在Form1上,您可以查看CheckboxSelected==true:
using (var form2 = new Form2())
{
if (form2.CheckboxSelected == true)
{
var checkboxValue = form2.Checkbox;
}
}
更简单的解决方案: 表格1: (选中复选框时运行的代码) 表格2: (加载表单时运行的代码)
你需要一个对表单的引用,而不是一个新的表单。我仍然是C#的初学者,我没有意识到这一点。谢谢大家对我的帮助。
string GetResult = File.ReadLines("C:\\Checked.txt").First();
if(GetResult == "true")
{
///Any Code Here///
}