2016-05-12 2 views
1

ダブルクリックするとテキストボックスにエリプスを作成しようとしています。しかし、それは起こらないようです。マウスダブルクリックイベントで楕円を作成できません

panel.MouseClick += create_terms; 

private void create_terms(object sender, EventArgs arg) 
{ 
    if (Phys_terms_check.Checked == true) 
    { 
     MouseEventArgs e = (MouseEventArgs)arg; 
      Graphics g = CreateGraphics(); 
      SolidBrush p = new SolidBrush(Color.Red); 
      Pen erase = new Pen(Color.White); 

      Panel panel = (Panel)sender; 
      g.FillEllipse(p, e.X+panel.Left,e.Y+panel.Top,10,10); 
    } 
} 

e.xe.yは、送信者からの相対座標を与えているようです。フォームを基準にポイントを取得する方法。

+1

__NEVER__グラフィックスg = CreateGraphics(); '代わりに、リストにポイントを追加し、そのe.Graphicsイベントを使用してこれらすべてのポイントで楕円を描画するPaintイベントをコーディングします。リスト呼び出しにポイントを追加した後、描画するコントロールで無効にします。また、 'TextBoxes'はあなたが描画したい場合、本当に幸せではありません。あなたはペイントイベントを持っていないという事実からそれを見ることができます!! __ Panelを使うのがいいですか、それともラベルの上にテキストを置いておきたいか分かります。 (Btw:ラベルはかなり過小評価されています) – TaW

+0

ペイントイベントの呼び出し方法を詳しく説明できますか?ユーザーがパネルでダブルクリックするたびにこれを呼び出す必要があります。 –

+0

Panel(またはLabel)を使用する場合は、PanelのPropertybox-Events-PaneでPaintイベントをダブルクリックするだけです! [イベントを接続する](http://stackoverflow.com/questions/33275763/copy-datagridview-values-to-textbox/33276161?s=2|0.3896#33276161)はこれをお読みください。楕円のリストを描画するために[この記事を参照](http://stackoverflow.com/questions/36924016/how-to-draw-multiple-ellipse-in-the-same-panel/36924235#36924235) - もう1つの発言: 'Graphics g = CreateGraphics();'は__non-persistent graphics__を__Form__に描画するためだけに使用できるGraphicsオブジェクトを作成しました – TaW

答えて

0

送信者の左上の座標を加算します。

g.FillEllipse(p, e.X + textbox.Left, e.Y + textbox.Top, 10, 10); 

ただし、これは表示されません。なぜなら、テキストボックスのペイントイベントでは、テキストボックスが消えて再描画されるからです。

0

まず、TextBoxesは古いレガシーで、かなり特殊なコントロールで、通常のコントロールをすべてサポートするものではありません。動作しません中でも

は彼らに

をオーナー描画後者はそのPaint/OnPaintイベント内の任意の図面を含んでいる背景画像

  • を設定

    • です。

      あなたコードとフックアップPaintイベントをすることができますが、それは呼び出されません。

      、あなたは右のそれをすればあなたはまだCreateGraphicsを使用してTextBox上に描くことができますが、いつものように、この関数の結果は、非永続的あるとすぐにシステムがTextBox自身をリフレッシュすると消えます超高速れている:できるだけ早くあなたがそれの上にカーソルを移動すると、あなたが描く円が消えることがあります。..

      それを行うためのコードは次のようになりなければならないでしょう:

      Graphics g = yourTextBox.CreateGraphics(); 
      g.FillEllipse(Brushes.Red, yourTextBox.Width - 22, 2, 11, 11); 
      

      しかし、私はこれが持続しないと言っていたので、価値はほとんどまたはまったくありません。

      あなたがLabelを使用することができます目に見えるTextプロパティで何か上に描画したい場合:

      private void yourLabel_Paint(object sender, PaintEventArgs e) 
      { 
          e.Graphics.FillEllipse(Brushes.Red, yourLabel.Width - 22, 2, 11, 11); 
      } 
      

      enter image description hereenter image description here

      結果は同じに見えますが、Labelで唯一のドットがます、たとえば最小化 - フォームの最大化..実際にはTextBoxのドットは私のscreenshotプログラムを呼び出すことで生き残っていないので、私はPrint-Keyを押すことにリゾートを使用していた!

      drawing circles upon mouseclicks onto normal controls see this postの場合!

  • 関連する問題