没有Form.ShowDialog()的访问器(属性)

时间:2018-06-15 03:57:26

标签: c#

我正在尝试为来自{{1}的Form1中创建的 DevExpress SplineChart 设置 ConstantLine 并设置Form2放置在numericalupdown.value中的Form2放置在textBox.textForm1,而Form1Form2都是{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}}

1 个答案:

答案 0 :(得分:0)

我理解你的问题的方式是:

  1. 您正在以Form1显示图表。
  2. 从Form1,您希望显示第二个表单(Form2),该表单允许您更改或指定Form1中图表的值。
  3. 您希望将Form2中的更新值更新为Form1。
  4. 从子表单设置此类通知和更新父表单的最佳方法是使用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);
    }