簡體   English   中英

沒有Form.ShowDialog()的訪問器(屬性)

[英]Accessors (Properties) without Form.ShowDialog()

我想設置為在創建的DevExpress SplineChart一個ConstantLine Form1Form2 ,還可以設置一個numericalupdown.value放置在Form2textBox.text被放置在Form1 ,而這兩個Form1Form2是開放和運行。

我正在使用訪問者{get;set;}來獲取和設置DevExpressChart的值,就像我在代碼中寫下的那樣。

我可以獲取值,但是如果不使用Form1.ShowDialog() ,則無法設置任何值。

我也用過Form1.Update(); Form1.Refresh(); 但是上述代碼僅在使用Form1.Show();才能成功運行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. 您正在Form1中顯示一個圖表。
  2. 您想從Form1中顯示第二個窗體(Form2),該窗體允許您更改或指定Form1中圖表的值。
  3. 您想要將更新的值從Form2中獲取到Form1中。

設置此類通知和從子表單更新父表單的最佳方法是使用Events 事件使子窗體可以通知其父窗體,而無需實際了解有關父窗體的任何信息。

第1步-創建一個EventArgs類。 此類將用於保存您要從Form2傳遞到Form1的信息。

一般來說,我發現最好將屬性設置為Read Only,並且僅在此類事件的構造函數中設置它們。

// 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引發的事件。 這將通知父級(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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM