2012-04-02 115 views
0

我已经衍生自System.Windows.Forms.TextBox一个新的控制,在其客户区域显示图像,你可以从下面的图片看到:避免在自定义文本框中重叠图像和文本?

UnitTextBox

下面是代码:

public partial class UnitTextBox: TextBox { 
    public UnitTextBox() { 
     TextAlign = HorizontalAlignment.Right; 
     InitializeComponent(); 
     Controls.Add(pictureBox1); 
     pictureBox1.Location = new Point(0, 0); 
    } 
} 

当我加入一些字符的文本滚动到左边,去下面的图像。有没有办法填充文本区域?

+1

目前尚不清楚如何在客户区显示图像,因为您尚未发布任何代码。 – LarsTech 2012-04-02 17:07:34

+0

Hi @Lars,添加代码。谢谢 – stenio 2012-04-03 07:38:28

回答

0

这听起来像你正在试图做的是为你更容易,如果你做了它用户控件是什么:

MSDN - Inherit from the UserControl

一般情况下,在Visual Studio中您“添加”到您的项目新“用户控制”,看起来几乎像一个表格。添加一个面板或图片框为您的图像,然后在其右侧添加您的文本框。将表格缩小为适合您的控件。创建一些属性来公开TextBox的Text属性,可能还有一个属性来设置图像然后编译。编译完成后,您的用户控件将显示在您的工具箱中,就像它是其他任何控件一样。

2

我做了一次类似的事情。最简单的方法是创建一个像BradRem建议的UserControl,然后在面板中放置一个无边框TextBox,其背景颜色与TextBox相同。在此面板的左侧放置图标。作为一个完整的UserControl,它现在表现为一个TextBox,其左侧有一个保留区域,并带有一个图标。

更新:

我有测试此为自己创造一个用户控件就像我说的。此外,我增加了一个Paint事件到容器面板,与同色的文本框绘制边框:

public partial class UCTextBoxWithLabel : UserControl { 
     public UCTextBoxWithLabel() { 
      InitializeComponent(); 

      pnlTextBoxWithImage.Paint += new PaintEventHandler(pnlTextBoxWithImage_Paint); 
     } 

     void pnlTextBoxWithImage_Paint(object sender, PaintEventArgs pea) { 
      ControlPaint.DrawBorder(pea.Graphics, pea.ClipRectangle, Color.FromArgb(0x7f, 0x9d, 0xb9), ButtonBorderStyle.Solid); 
     } 
    } 

...它看起来非常酷似你想要的结果:

Screenshot of program

+0

嗨Pedery和@BradRem,我试图从UserControl继承,但控制边框不同于TextBox的正常Fixed3D边框。我在窗体上有很多其他文本框,并且混合这两种边框样式并不好。 – stenio 2012-04-04 07:40:56

+0

您只需设置面板的边框属性,就像我在上面的解决方案中所述。 – Pedery 2012-04-04 20:22:54

+0

我已经将BorderStyle属性设置为Fixed3D或FixedSingle,但它看起来与普通TextBox的边框不同,正如您可以看到[here](http://www.b2s.it/temp/Immagine1.png)和[这里](http://www.b2s.it/temp/Immagine2.png)。然后我尝试将图片框和文本框嵌入到新的文本框中。通过这种方式,当控件未被选中时,边框看起来不错,但是当它获得焦点时,边框不会改变其颜色! – stenio 2012-04-05 09:21:43