我有一个主要表单,它调用较小的表单。在主要表单中,我有一个名为bool
的{{1}}设置为_dataReady
,但较小表单的目的是检查一些内容并查看数据是否已就绪,在哪种情况下,它会将false
设置为_dataReady
。
这是我的问题:我使用输入参数调用迷你表单,例如(true
),但问题是我无法在构造函数块之外访问它。
我尝试制作ref bool _dataReady
并将private bool
设置为该值,但在更改ref
的状态后,private bool
未执行更改,与对象不同面向编程工作。
以下是我的一些代码:
//这就是我在主
中调用迷你表格的方式ref
这是迷你表单和代码的构造函数:
new FrmAccounting(MyTextBox1.Text.Trim().Replace(",", "").ToInt32(),ref _dataReady).ShowDialog();
但是,将表单中的public FrmAccounting(decimal Price,ref bool _dataReady)
{
InitializeComponent();
dataReady=_dataReady;
}
private bool dataReady;
(private bool
)设置为dataReady
并不会更改true
(再次与对象的工作方式不同)......这就是我的想法会发生。
我的问题是:如何更改ref
以便我可以直接在主要内容中获得结果?
答案 0 :(得分:5)
您无法使用ref
执行此操作,因为您班级中的字段无法成为ref
。
我建议将你的变量包装成一个类。您可以传递该类并使用内部值。
public class Wrapper<T>
{
public T Value {get;set;}
}
然后像这样使用它:
Wrapper<bool> w = new Wrapper<bool>() { Value = _dataReady };
new FrmAccounting(MyTextBox1.Text.Trim().Replace(",", "").ToInt32(),w).ShowDialog();
之后可以使用w.Value
检索该值。
答案 1 :(得分:1)
你的第二个表单显示为一个对话框,所以它需要做的就是公开它想要的任何信息作为属性,主表单可以在二级表单关闭后立即检查该属性,允许它做任何事情。适当的时候。
答案 2 :(得分:0)
你真的不需要在这里使用这个'ref'。 在您的某个表单中使用静态全局属性:
public static bool IsReady { get; set; }
然后通过班级名称访问它:
Form1.IsReady = true;
P.S。 或者,如果您只有一个Form1实例,则可以使用委托和传递方法来更改您的私有变量。像这样:
(这是一个控制台应用程序示例,但很容易遵循和使用)
class A
{
public A(Action<bool> del)
{
del(true);
}
}
class B
{
private bool field;
private void ChangeField(bool value) { field = value; }
public B()
{
Action<bool> Del = ChangeField;
A instance = new A(Del);
}
public void ShowField()
{
Console.WriteLine(field);
}
}
class Program
{
static void Main()
{
B i = new B();
i.ShowField();
Console.ReadKey();
}
}
输出:True