2016-05-12 60 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__使用'Graphics g = CreateGraphics();'将点添加到列表并编写Paint事件以使用其e.Graphics事件在所有这些点处绘制椭圆。在列表中添加一个点后,在要绘制的控件上调用Invalidate。另外:如果你想绘制它们,'TextBoxes'不是很开心;你可以看到__他们甚至没有Paint事件!! __更好地使用Panel,或者如果你想要它上面的文本和标签。 (顺便说一句:标签大大被低估) – TaW

+0

你可以详细说明如何调用绘画事件。每次用户双击面板时,我都需要调用它。 –

+0

如果您想要使用面板(或标签),只需双击面板的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) - 一个更多的评论: 'Graphics g = CreateGraphics();'创建了一个Graphics对象,你可以只用它来绘制__non-persistent graphics__到__Form__上 – TaW

回答

0

添加发件人的顶部和左侧坐标。

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

但是,这不会显示,因为文本框绘画事件填充火和重新绘制文本框。

0

首先:TextBoxes是旧的传统和相当特殊的控件,不支持所有事情,正常控制让你这样做。

在这是行不通的事情

  • 设置一个的BackgroundImage
  • 所有者把他们拉

后者包括在其Paint/OnPaint事件的任何图纸。

可以代码和钩了Paint事件,但它不会叫

您仍然可以绘制到使用CreateGraphics一个TextBox,如果您使用此功能做是正确的,但一如既往的结果是非持久和系统刷新TextBox本身会很快消失,这是超级快:只要您将光标移到它你画可能会消失圆..

做到这一点就必须类似于这样的代码:

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

但正如我所说,这不会持续下去,所以它几乎没有或没有价值。

如果要绘制到的东西用可见Text属性,你可以使用一个Label

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点甚至没有生存的电话我的屏幕截图程序,所以我使用诉诸按Print-Key

对于drawing circles upon mouseclicks onto normal controls see this post