【问题标题】:How to access a ref bool variable passed into the constructor?如何访问传递给构造函数的 ref bool 变量?
【发布时间】:2015-07-08 12:59:17
【问题描述】:

我有一个主窗体,它调用一个较小的窗体。在主表单中,我有一个名为_dataReadybool,它设置为false,但是较小表单的目的是检查一些事情并查看数据是否准备好,在这种情况下它设置@ 987654324@转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;

但是,将表单 (dataReady) 中的 private bool 设置为 true 并不会更改 ref(再次与对象的工作方式不同)......这就是我认为会发生的事情。

我的问题是:如何更改 ref 以便我可以直接在 main 中获得结果?

【问题讨论】:

  • 我认为其他两个答案提供了您所需要的,但要强调:boolintdecimal 等变量不会在地址级别更改。如果您需要这样做,请将您的变量包装到一个类中。但是,类实例不需要通过引用传递,因为所有类实例都已经通过它们的地址传递。

标签: c# winforms ref


【解决方案1】:

您不能使用 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 检索该值。

【讨论】:

  • 谢谢。我可以使用其他方法,但我只是想知道是否可以在我的类中创建一个字段作为参考。我现在将使用对象来处理这个问题,因为整个应用程序是在数据方面面向对象。非常感谢您的帮助,此类解决方案也将解决我的其他问题
  • 不客气。使用ref 无法解决此问题。对不起。另请参阅this answer
【解决方案2】:

您的第二个表单显示为一个对话框,因此它所需要做的就是将它想要的任何信息作为属性公开,并且主表单可以在第二个表单关闭后立即检查该属性,允许它执行任何操作那个时候合适。

【讨论】:

    猜你喜欢
    • 2020-01-16
    • 2017-09-28
    • 2021-02-05
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2012-01-12
    相关资源
    最近更新 更多