2016-11-08 6 views
1

私は3つのボタン(線、円、長方形)でこのミニペイントを作ろうとしています。各ボタンをクリックすると、ランダムな色と開始点を持つ関連する図形が印刷されます。私は、ユーザが形状を選択するように、このコンボボックスを作り、PropertyGridの中にそのプロパティを参照している:プロパティグリッドでプロパティを変更する

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    switch (comboBox1.SelectedItem.ToString()) 
    { 
     case "circle": 
      { 
       propertyGrid1.SelectedObject = c; 
      } 
      break; 
     case "line": 
      { 
       propertyGrid1.SelectedObject = l; 
      } 
      break; 
     case "rectangle": 
      { 
       propertyGrid1.SelectedObject = r; 
      } 
      break; 
     default: 
      break; 
    } 
} 

C、Lおよびrは、円、線又は矩形のクラスから新しいオブジェクトです。サークルの色や開始点を変更するなど、propertyGridを使用してプロパティをオーバーライドできるようになりました。いくつかのような:

private void propertyGrid1_Click(object sender, EventArgs e) 
{ 
    circle.changeproperties=Griditem.value; 
} 

私はこれをどのように書きますか?

+0

'PropertyGrid'がシェイプのプロパティを編集するのに十分です。これを画面上に描かれたものを変更したい場合は、 'PropertyGrid'で変更しているのと同じシェイプインスタンスで描画呼び出しを行うようにしてください。 'OnPaint'メソッドや' Paint'イベントハンドラですべての描画を行い、プロパティが変化したときに 'Invalidate()'を呼び出すことでコントロールを無効にすることも忘れないでください。 – adv12

+0

WinForms? WPF? WebForms? MVC? –

答えて

1

トリックは:何もする必要はありません。 propertyGrid1.SelectedObject = XXXを設定してオブジェクトインスタンスをPropertyGridにバインドすると、すでに完了しています。 グリッドは、その値を編集できるように自動的に編集者を入力します。それらを変更することによって、値は自動的に対応するクラスインスタンスに書き戻されます。

ゴーはそれを試してみて、この

public int Radius 
    { 
     get { return _radius; } 
     set { _radius = value; } 
    } 

のようなあなたのクラスでの本格的なプロパティの実装を書き、セッターにブレークポイントを置きます。 UIの値を変更すると呼び出されることがわかります。

とにかく、クラスインスタンスに値が戻ってきました。ファイン。しかし今では、アプリケーションで何かをするためにアプリケーションを起動する必要があります。通常は、コントロールを再度無効にしてペイントを再度開始して、その変更をUIで表示できるようにする必要があります。アプリケーションのロジックに応じて、円、長方形、線のクラスにINotifyPropertyChangedを実装して反応させることができます。詳細はこちらをご覧ください:Implementing INotifyPropertyChanged - does a better way exist?

+0

ここに_radiusは何ですか? – sara

+0

int値を保持するメンバー変数です。実際、非常に基本的なプロパティの実装です。 – Waescher

関連する問題