我正在尝试为来自{{1}的Form1
中创建的 DevExpress SplineChart 设置 ConstantLine 并设置Form2
放置在numericalupdown.value
中的Form2
放置在textBox.text
中Form1
,而Form1
和Form2
都是{get;set;}
打开并运行。
我正在使用访问者Form1.ShowDialog()
来获取和设置 DevExpressChart 的值,正如我在代码中记下的那样。
我可以获取值,但我无法使用Form1.Update();
设置任何值。
我还使用了Form1.Refresh();
和Form1.Show();
,但提到的代码只能使用Form1.ShowDialog();
或Form2
但是,我希望他们执行这两个表单作为Form1
的孩子运行Form1
并看到//Code Snippet in the Form2:
//NumericalUpDown-ValueChanged Event: In Form2
private void numUpDnShkgTimeRstcConfig_ValueChanged(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
if (chkBxShakingTimeRestCteLineConfig.Checked == true)
{
XYDiagram diagram = (XYDiagram)Frm1.SplineChart.Diagram;
diagram.AxisX.ConstantLines.Add(new ConstantLine("Shaking Time", Convert.ToString(numUpDnShkgTimeRstcConfig.Value)));
Frm1.TxtBx = Convert.ToString(numUpDnShkgTimeRstcConfig.Value);
}
}
//Code Snippet in the Form1
//Pass Objects And Parameter.
public DevExpress.XtraCharts.ChartControl SplineChart
{
get {return SplineChrt1Form1; }
set { SplineChrt1MainFrm = value; }
}
public string TxtBx
{
get { return txtBxSmplWt1Form1.Text; }
set { txtBxSmplWt1Form1.Text = value; }
}
...
代码
{{1}}
答案 0 :(得分:0)
我理解你的问题的方式是:
从子表单设置此类通知和更新父表单的最佳方法是使用Events
。事件使子表单能够通知其父表单而不实际了解父表单。
步骤1 - 创建EventArgs类。此类将用于保存您要从Form2传递到Form1的信息。
一般来说,我发现最好将属性设置为只读,并且只在这类事件的构造函数中设置它们。
// I wasn't sure what the parameters were called or their type,
// so I just used an int and string to demonstrate the functionality
public class ChartValuesChangedEventArgs : EventArgs
{
public ChartValuesChangedEventArgs (int value1, string value2)
{
Value1 = value1;
Value2 = value2;
}
public int Value1 { get; private set; }
public string Value2 { get; private set; }
}
步骤2 - 声明将从Form2中引发的事件。这将通知Parent(Form1)值已更改以及值是什么。
public event EventHandler<ChartValuesChangedEventArgs> ValuesChanged;
第3步 - 举起活动。这是您通知家长价值已发生变化的地方。
对于此示例,我在按钮单击上提升事件。您可以轻松地将此函数的内容放在您自己的numUpDnShkgTimeRstcConfig_ValueChanged
函数中。
private void button1_Click(object sender, EventArgs e)
{
ChartValuesChangedEventArgs chartValuesChangedEventArgs = new
ChartValuesChangedEventArgs(numUpDnShkgTimeRstcConfig.Value,
txtBxSmplWt1Form1.Text);
OnValuesChanged(chartValuesChangedEventArgs);
}
protected virtual void OnValuesChanged(ChartValuesChangedEventArgs e)
{
EventHandler<ChartValuesChangedEventArgs> handler = ValuesChanged;
if (handler != null)
{
handler(this, e);
}
}
第4步 - 处理事件。这是使用Form2中的新/更新值更新图表的地方
private void ShowForm2Button_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ValuesChanged += form2_ValuesChanged;
form2.Show();
}
void form2_ValuesChanged(object sender, ChartValuesChangedEventArgs e)
{
// Update the chart values here
Debug.Print(e.Value1.ToString());
Debug.Print(e.Value2);
}