我已经使用set get在用户控件类中编写了一个属性:
var byDuration = times.GroupBy(t => t.Duration).ToDictionary(g => g.Key, g => g.ToList());
var pairs = new List<Tuple<Timing,Timing>>();
foreach (var t1 in times) {
List<Timing> list;
if (byDuration.TryGetValue(20-t1.Duration, out list)) {
pairs.AddRange(list.Where(t2 => t1 != t2).Select(t2 => Tuple.Create(t1, t2)));
}
}
然后通过将此用户控件添加到Windows窗体项目,我在属性窗口的“其他”部分中设置ServerName。 现在这里是一个问题,如何从另一个usercontrol访问ServerName?我想我应该访问由“MyUserControl”构造函数创建的对象的属性“ServerName”
答案 0 :(得分:0)
正确的方法是通过从用户控件中提取模型作为ServerName
属性的值并将两个用户控件绑定到它来反转数据流,有关详细信息,请参阅Windows Forms Data Binding。这样,您可以节省大量时间在管道上并在组件之间传递数据。
如果您正在寻找如何使用现有代码实现此功能,那么按照以下步骤操作也可以为您提供帮助。将用户控件的实例拖放到表单后,设计人员将在Form1.Designer.cs
文件中为其生成一些代码。
// the declaration of your user control
private MyUserControl1 myUserControl11;
private void InitializeComponent()
{
// the initialization of your user control
this.myUserControl11 = new WindowsFormsApp3.MyUserControl1();
}
此代码可以从表单访问用户控件的实例。如果您询问如何与其他控件共享此属性的值,则需要在用户控件中实现INotifyPropertyChanged
。
public partial class MyUserControl1 : UserControl, INotifyPropertyChanged
然后订阅您的父表单到此活动。
private void InitializeComponent()
{
// subscribe to the user control event
this.myUserControl11.PropertyChanged +=
new System.ComponentModel.PropertyChangedEventHandler(
this.myUserControl11_PropertyChanged);
}
// handle the event by updating the other control
private void myUserControl11_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
textBox1.Text = myUserControl11.ServerName;
}
实施通知后,您可以考虑如何使用数据绑定来实现具有较少代码的控件之间的数据传播。希望它有所帮助!