0

我有一个表单 MainForm 和一个表单 form1,声明如下:

namespace SdkDemo
{
    public partial class MainForm : Form
    {        
        public CoreWrapper _icCore;        
        private Dictionary<string, int> audioDevices;

        #region MainForm Ctor

        public MainForm()
        {
            InitializeComponent();
            _icCore.Start();
        }

        public Form1 form1 = new Form1();
    }
}

所以 form1 只是用 Visual Studio 工具创建的。

form1的完整代码:

namespace SdkDemo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();            
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string dial = Registry.CurrentUser.OpenSubKey("SOFTWARE").OpenSubKey("CS").GetValue("DIAL").ToString();

            // Error "An object reference is expected":
            MainForm.txtSendKeys.Text = ("esdcze");
        }        
    }
}

问题是当我尝试在“Mainform”中调用某些内容时出现对象引用错误。当然,该txtSendKeys领域是公开的。

顺便说一句,我可以很容易地做相反的动作,也就是做类似的事情

MainForm.textField = x

从我的表格1。

我严重缺乏关于 C# 的知识,但这是我的工作,我现在开始绝望了..

4

2 回答 2

0

修改你的MainForm类:

public partial class MainForm : Form
{
    public CoreWrapper _icCore;
    private Dictionary<string, int> audioDevices;

    public MainForm()
    {
        InitializeComponent();
        _icCore.Start();
        // sets the form1's owner form to the MainForm instance
        form1.Owner = this;
        // show the Form1 form
        form1.Show();
    }

    public Form1 form1 = new Form1();

    internal void SetSendKeys(string value)
    {
        txtSendKeys.Text = value;
    }
}

修改Form1.button1_Click方法的主体:

private void button1_Click(object sender, EventArgs e)
{
    string dial = Registry.CurrentUser.OpenSubKey("SOFTWARE").OpenSubKey("CS").GetValue("DIAL").ToString();
    var mainForm = (MainForm)this.Owner;
    mainForm.SetSendKeys("esdcze");
}
于 2013-05-31T10:43:18.210 回答
0

MainForm 是一个表单的定义,而不是它的一个实例。此外,您似乎没有在任何地方显示 Form1,因此我现在已将其添加到 MainForm.Load,但显然您可以移动它。

您需要尝试更多类似的方法:

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

    public MainForm MyParentForm { get; set; }       

    private void button1_Click(object sender, EventArgs e)
    {
        string dial = Registry.CurrentUser.OpenSubKey("SOFTWARE").OpenSubKey("CS").GetValue("DIAL").ToString();

        // Use the reference to MyParentForm
        MyParentForm.txtSendKeys.Text = "esdcze";
    }        
}

然后在你的主要:

public partial class MainForm : Form
{        
    public CoreWrapper _icCore;        
    private Dictionary<string, int> audioDevices;

    #region MainForm Ctor

    public MainForm()
    {
        InitializeComponent();
        _icCore.Start();
    }

    private void MainForm_Load(object sender, System.EventArgs e)
    {
        form1.MyParentForm = this;
        form1.Show();
    }

    public Form1 form1 = new Form1();
}

确保在 Form1 中使用“MyParentForm”属性之前设置它非常重要。如果没有,Form1 将抛出异常。更聪明的方法可能涉及首先检查属性是否为 Null。

于 2013-05-31T10:32:41.487 回答