我有一个自定义控件,我也用它作为DataGridView控件。此自定义控件有一个名为SetHttpClient
的方法,我将HttpClient对象作为参数传递。
如何从父表单调用此方法? (父表单只知道从DataGridViewTextBoxCell派生的类的实例)
答案 0 :(得分:0)
你应该为此建立一个很好的结构。例如,如果您有两个表单,并且在表单1中,您有要从表单2刷新的网格。如果要打开表单2,则应从创建实例时传递网格实例。
或者第二种方式,表单2提供将在表单1中订阅的事件。如果应该刷新网格,则调用该事件。您可以将HttpClient传递给Args-Object到Form 1。
请告诉我,如果我误解了你。
答案 1 :(得分:0)
在我看来,您应该使用ViewModels与View进行通信,而不是在第二个View上与一个View执行操作进行通信。
所以,例如你的视图
CustomersView 在DataContext中包含 CustomersViewModel ,如果您执行操作 GetData ,则在 CustomersViewModel 中执行操作结果放到 DataGridView 。
此解决方案将负责提供从 DataGridView 类到 CustomersViewModel 的数据。 ViewModel可以使用某些服务或其他机制使用 HttpClient 为您提供数据。
我知道这不是你问题的直接答案,但对你的问题是很好的解决方案。
在这个例子中https://msdn.microsoft.com/en-us/library/ff798384.aspx你有方法 GetParts ,你可以想象这个方法的主体包含HttpClient并从网站获取数据。
答案 2 :(得分:0)
您可能正在谈论私有,公共,内部等访问修饰符。
如果是这样,那么在子窗体中创建访问修饰符,如public或internal。 在父母的形式,只需拨打电话。
public partial class ChildForm : Form
{
public ChildForm()
{
InitializeComponent();
}
internal String HellowWorld_mt(string SuffixValue)
{
return "hello world and "+ SuffixValue;
}
}
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ChildForm cf = new ChildForm();
cf.Show();
string resp = cf.HellowWorld_mt(" extra!");
this.Text = resp;
}
}