【问题标题】:C# Get Value of a text box in a Static VoidC# 获取静态 Void 中文本框的值
【发布时间】:2018-01-02 14:34:08
【问题描述】:

我正在尝试获取 FrmPhone 表单上名为 txtNum 的文本框的值,并写入文本框 txtLog,但是静态 Void 和 FrmPhone 上的文本框之间似乎没有交互。

下面是 CreateCall 静态 Void 的代码。

    private void btnCall_Click(object sender, EventArgs e)
    {
        CreateCall();
    }

    static void CreateCall()
    {
        FrmPhone FrmPhone = new FrmPhone();
        var numberToDial = FrmPhone.txtNum.Text;
        FrmPhone.txtLog.Text += "\r\nCall " + numberToDial;
        FrmPhone.txtLog.ScrollToCaret();
        SetupDevices();
        call = softphone.CreateCallObject(phoneLine, numberToDial);
        call.CallStateChanged += call_CallStateChanged;
        call.Start();
    }

在静态 void 中执行代码时,我缺少什么来允许我与表单上的文本框进行交互?

另外值得注意的是如果替换

var numberToDial = FrmPhone.txtNum.Text;

var numberToDial = "2788";

调用成功,但 txtLog 文本没有改变。

【问题讨论】:

  • 但是您创建了一个新表单,FrmPhone FrmPhone = new FrmPhone(); 这不是您尝试与之交互的表单..这是一个新表单!
  • 似乎解决方案是删除 static 并与表单实例交互?

标签: c# visual-studio


【解决方案1】:

有两种选择。

  1. 您使方法成为非静态的。这是最简单的解决方案,也是最有意义的解决方案。毕竟你是在使用实例变量。

    void CreateCall()
    {
        var numberToDial = this.txtNum.Text;
    }
    
  2. 将表单传递给方法,如上所述,它没有意义,但它可以完成工作。 txtNum 必须是 internalpublic,或 CreateCall 必须位于同一类中:

    static void CreateCall(FrmPhone frmPhone)
    {
        var numberToDial = frmPhone.txtNum.Text;
    }
    

    在调用你传入this的代码时:

    CreateCall(this);
    

【讨论】:

  • 谢谢,将“静态虚空”转换为“虚空”是最有效的方法。
猜你喜欢
  • 2011-10-25
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 2014-11-02
  • 2022-11-10
  • 2012-07-05
相关资源
最近更新 更多