2011-04-21 94 views
3

我想知道如何实现文本框中选定文本的自定义背景色。默认情况下,它使用所选文本的窗口标准颜色(浅蓝色)。由于我使用基于WinForms TextBox的皮肤文本编辑器,并且TextBox不公开任何属性来更改颜色,所以我想知道是否有其他方法可以在应用程序级别更改此系统默认颜色?在文本框中更改选定的文本背景色

感谢,

汤姆

回答

1

也许这有助于...

public class MyTextBox : System.Windows.Forms.TextBox 
    { 
     private const int WM_PAINT = 0x000F; 

     public MyTextBox() 
     { 
      this.TextChanged += new System.EventHandler(this.myTextBox_TextChanged); 

     } 

     private void myTextBox_TextChanged(object sender, System.EventArgs e) 
     { 
     } 


     [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")]  
     protected override void WndProc(ref Message m) 
     { 
      base.WndProc(ref m);  
      // Listen for operating system messages. 
      switch (m.Msg) 
      { 
       case WM_PAINT: 
        PaintEventArgs pe = new PaintEventArgs(this.CreateGraphics(),this.RectangleToScreen(this.ClientRectangle)); 
        this.OnPaint(pe); 
        break; 
      } 

     } 

     protected override void OnPaint(PaintEventArgs pe) 
     { 
    // call base.OnPaint(pe); 
      Graphics g = pe.Graphics; 
      g.Clear(this.BackColor); 
      string s = this.Text.Substring(0,this.Text.Length/2); 
    // provide a object with how to split your string with colors 
      string s1 = this.Text.Substring(this.Text.Length/2); 
      SizeF sf = g.MeasureString(s,this.Font); 
      g.DrawString(s,this.Font,new SolidBrush(Color.Red),0,0); 

      g.DrawString(s1,this.Font,new SolidBrush(Color.Black),sf.Width,0); 
     } 
    }