从另一种形式调用函数
本文关键字:调用 函数 另一种 | 更新日期: 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");
}