从另一种形式调用函数

本文关键字:调用 函数 另一种 | 更新日期: 2023-09-27 18:16:26

我有一个表单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

from my form1.

我严重缺乏c#知识,但这是我的工作,我现在开始绝望了…

从另一种形式调用函数

MainForm是窗体的定义,而不是窗体的实例。此外,你似乎没有在任何地方显示Form1,所以我把它添加到MainForm。现在加载,但显然你可以移动它。

你需要尝试这样做:

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";
    }        
}

Then in your Main:

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();
}

这是非常重要的是要确保你设置"MyParentForm"属性之前,你使用它的Form1。如果不是,Form1将抛出异常。更聪明的方法可能是先检查属性是否为Null。

修改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");
}