2016-12-18 6 views
0

私は2つのフォーム、メインフォーム& ModalBoxを持っています。カスタムイベントを使用して別のフォームで図形を描くc#

メインフォームでは、クリックすると、comboBoxの選択されたインデックスに応じて形状が描画されます。 ModalBoxフォームで

// Create Rectangle or Ellipse 
    public void buttonAdd_Click(object sender, EventArgs e) 
    { 
     SolidBrush sb = new SolidBrush(Color.Red); 

     Graphics g = panel1.CreateGraphics(); 

     if (shapeSizeControl1.comboBoxShapeSelection.SelectedIndex == 0) 
     { 
      g.FillRectangle(sb, Convert.ToSingle(shape.X), Convert.ToSingle(shape.Y), Convert.ToSingle(shape.Width), Convert.ToSingle(shape.Height)); 
     } 
     else if (shapeSizeControl1.comboBoxShapeSelection.SelectedIndex == 1) 
     { 
      g.FillEllipse(sb, Convert.ToSingle(shape.X), Convert.ToSingle(shape.Y), Convert.ToSingle(shape.Width), Convert.ToSingle(shape.Height)); 
     } 
    } 

私は、メインフォームにボタンと同じことを行う必要があり、[OK]ボタンを持っているが、私はそうするためにそれをプログラムする方法が分からないので、それはしていません。 ModalBox buttonOk_ClickにメインフォームbuttonAdd_Clickから同じコードをコピー

私が試した何

...

  1. 。 Panel1変数を取得するために新しいMainフォームをインスタンス化する必要があるため、悪い考えです。もしそうすれば何も起こらない。どうして?私は説明がすばらしくなるとは思っていません。

  2. ModalBoxフォームが開いたときにカスタムイベントを作成すると、購読してからOKボタンを押すと、図形が描画されます。 1つの問題ボタンが2番目のフォームにあるため、イベントを呼び出す場所とnullを確認する場所がわかりません。最初のフォームでカスタムイベントを呼び出すと、イベントを呼び出してnullチェックを行う場所がありません。

ゴール

私の目標は、ModalBoxフォームの[OK]ボタンを使用してModalBoxフォームからメインフォームに図形を追加する方法を見つけ出すことです。

答えて

0

メインフォームでDrawShape()というメソッドを作成するだけで、図形を描画してボタンクリックから呼び出すことができます。

// Main Form 
private void button1_Click(object sender, EventArgs e) 
{ 
    DrawShape(); 
} 

は今すぐモーダルフォームを作成し、DrawShape()機能

// Modal form 
private void button1_Click(object sender, EventArgs e) 
{ 
    var parent = this.Owner as MainForm; 
    parent.DrawShape(); 
} 
+0

PSを呼び出して、モーダルフォームで所有者最後に

// Main form private void button2_Click(object sender, EventArgs e) { var dlg = new ModalBox(); if (dlg.ShowDialog(this)==DialogResult.OK) { // do things } } 

を設定します。これを正しく行うには、フォームの 'Paint'イベントを購読し、そこで描画を行う必要があります。 – ja72

関連する問題