2012-04-02 116 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