C# 从类(C)更改窗体上控件的值
这应该很简单,真的-不知道问题是什么 我有一个C类Public.cs和一个windows窗体Form1.cs。通过Public.cs中的函数,我想获得Form1上控件的值,而不必使用对象参数C# 从类(C)更改窗体上控件的值,c#,class,forms,checkbox,C#,Class,Forms,Checkbox,这应该很简单,真的-不知道问题是什么 我有一个C类Public.cs和一个windows窗体Form1.cs。通过Public.cs中的函数,我想获得Form1上控件的值,而不必使用对象参数 // This code appears in Public.cs public string MyFunction(int num_val) { if (chk_num.checked == true) { // Something here... } } 问题是我的类在窗体上找不
// This code appears in Public.cs
public string MyFunction(int num_val)
{
if (chk_num.checked == true)
{
// Something here...
}
}
问题是我的类在窗体上找不到控件。有什么方法我必须在C中引用它吗
谢谢。我强烈建议通过Form1上的特定属性公开选中的属性,可能使用更有意义的名称。这将有助于对其调用者隐藏实现细节,即Form1的控制结构,而只公开其他使用者执行其工作所需的逻辑 例如:
public bool IsNumberRequested
{
get { return chk_num.Checked; }
}
或者,如果仍然希望直接访问该控件,可以从设计器中选择该控件并将其修改器属性更改为public或其他使您能够使用最初编写的代码访问该控件对象的内容
编辑:基于评论的回复
Public.cs仍然需要对Form1的引用,然后将调用该对象的IsNumberRequested属性
// Public.cs
public class Public
{
private Form1 _ui;
public Public(Form1 ui) { _ui = ui };
public string MyFunction(int num_val)
{
if (_ui.IsNumberRequested)
{
// Stuff
}
// Else, default Stuff
}
}
或者,您也可以将表单作为参数传递给MyFunction,而不是将其作为实例变量使用。我强烈建议通过Form1上的特定属性公开Checked属性,可能使用更有意义的名称。这将有助于对其调用者隐藏实现细节,即Form1的控制结构,而只公开其他使用者执行其工作所需的逻辑 例如:
public bool IsNumberRequested
{
get { return chk_num.Checked; }
}
或者,如果仍然希望直接访问该控件,可以从设计器中选择该控件并将其修改器属性更改为public或其他使您能够使用最初编写的代码访问该控件对象的内容
编辑:基于评论的回复
Public.cs仍然需要对Form1的引用,然后将调用该对象的IsNumberRequested属性
// Public.cs
public class Public
{
private Form1 _ui;
public Public(Form1 ui) { _ui = ui };
public string MyFunction(int num_val)
{
if (_ui.IsNumberRequested)
{
// Stuff
}
// Else, default Stuff
}
}
或者,您也可以将表单作为参数传递给MyFunction,而不是将其作为实例变量使用。我将以另一种方式进行设置
public class Public
{
public bool CheckNumber {get;set;}
public string MyFunction(int val)
{
if(CheckNumber)
{
//do that thing
}
return ...
}
}
public partial class Form1 : Form
{
Public myinstance = new Public();
public Form1()
{
InitializeComponent();
}
private void CheckBoxChanged(object sender, EventArgs e)
{
myinstance.CheckNumber = chk_num.checked;
}
}
您需要将CheckBoxChanged分配给我假设为chk_num的复选框的OnChanged事件处理程序
这样,您的类Public就不依赖于表单,而表单不应该依赖于表单
正如Reddog所说,使用更好的名称,尽管我有点怀疑你刚才在问题中给出了示例名称。我会用另一种方式设置名称
public class Public
{
public bool CheckNumber {get;set;}
public string MyFunction(int val)
{
if(CheckNumber)
{
//do that thing
}
return ...
}
}
public partial class Form1 : Form
{
Public myinstance = new Public();
public Form1()
{
InitializeComponent();
}
private void CheckBoxChanged(object sender, EventArgs e)
{
myinstance.CheckNumber = chk_num.checked;
}
}
您需要将CheckBoxChanged分配给我假设为chk_num的复选框的OnChanged事件处理程序
这样,您的类Public就不依赖于表单,而表单不应该依赖于表单
正如Reddog所说,使用更好的名称,尽管我有点怀疑您在问题中刚刚给出了示例名称。请问,您为什么强烈建议使用第一种方法?另外,您是否建议我不使用if chk_num.checked==true,而应该使用if isNumberRequested=true?来帮助隐藏实现细节,即表单1的控制结构,以防调用方看到,而只公开其他用户执行其工作所需的逻辑。请问,你为什么强烈建议采用第一种方法?另外,您是否建议我不使用if chk_num.checked==true,而应该使用if isNumberRequested=true?来帮助隐藏实现细节,即表单1的控制结构,以防调用方看到,而只公开其他使用者执行其工作所需的逻辑。这一点很好!对我想这真的取决于公众在所有这一切中的角色,以及它是否应该意识到UI,即它是UI控制器还是它不应该意识到UI,即我通常称之为UI服务。当你开始使用控件绑定来共享周围的状态时,你的答案更合适。这一点很好!是的,我想这真的取决于公众在所有这一切中的角色,以及它是否应该意识到UI,即它是UI控制器还是它不应该意识到UI,即我通常称之为UI服务。当你开始使用控件绑定来共享周围的状态时,你的答案更合适。