Jak mogę zmienić Kolor obramowania pola tekstowego, gdy użytkownik kliknie lub ustawi na nim ostrość?Zmień kolor obramowania Koloru TextBox
Odpowiedz
spróbować
bool focus = false;
private void Form1_Paint(object sender, PaintEventArgs e)
{
if (focus)
{
textBox1.BorderStyle = BorderStyle.None;
Pen p = new Pen(Color.Red);
Graphics g = e.Graphics;
int variance = 3;
g.DrawRectangle(p, new Rectangle(textBox1.Location.X - variance, textBox1.Location.Y - variance, textBox1.Width + variance, textBox1.Height +variance));
}
else
{
textBox1.BorderStyle = BorderStyle.FixedSingle;
}
}
private void textBox1_Enter(object sender, EventArgs e)
{
focus = true;
this.Refresh();
}
private void textBox1_Leave(object sender, EventArgs e)
{
focus = false;
this.Refresh();
}
dziękuje człowiekowi, to działa, ale zmienia również borderColor wszystkich innych pól tekstowych w Formie też, czy możesz wyjaśnić, jak to się stało i jak zrobić kolor czerwony , tylko w kolorze niebieskim !! –
Nie sądzę, aby powyższy kod zmienił granicę wszystkich pól tekstowych.Co robimy, narysujemy prostokąt wokół textBox1 – PraveenVenu
Jak zastosować różne kolory na granicy lub wokół prostokąta –
Jest to doskonałe rozwiązanie, aby ustawić kolor obramowania TextBox:
public class BorderedTextBox : UserControl
{
TextBox textBox;
public BorderedTextBox()
{
textBox = new TextBox()
{
BorderStyle = BorderStyle.FixedSingle,
Location = new Point(-1, -1),
Anchor = AnchorStyles.Top | AnchorStyles.Bottom |
AnchorStyles.Left | AnchorStyles.Right
};
Control container = new ContainerControl()
{
Dock = DockStyle.Fill,
Padding = new Padding(-1)
};
container.Controls.Add(textBox);
this.Controls.Add(container);
DefaultBorderColor = SystemColors.ControlDark;
FocusedBorderColor = Color.Red;
BackColor = DefaultBorderColor;
Padding = new Padding(1);
Size = textBox.Size;
}
public Color DefaultBorderColor { get; set; }
public Color FocusedBorderColor { get; set; }
public override string Text
{
get { return textBox.Text; }
set { textBox.Text = value; }
}
protected override void OnEnter(EventArgs e)
{
BackColor = FocusedBorderColor;
base.OnEnter(e);
}
protected override void OnLeave(EventArgs e)
{
BackColor = DefaultBorderColor;
base.OnLeave(e);
}
protected override void SetBoundsCore(int x, int y,
int width, int height, BoundsSpecified specified)
{
base.SetBoundsCore(x, y, width, textBox.PreferredHeight, specified);
}
}
Czy możemy utworzyć ten tekst wielowierszowy? –
WinForms nigdy nie był w tym dobry i jest to trochę uciążliwe.
Jednym ze sposobów można spróbować to osadzając TextBox w panelu, a następnie zarządzać rysunek na podstawie ostrości stamtąd:
public class BorderTextBox : Panel {
private Color _NormalBorderColor = Color.Gray;
private Color _FocusBorderColor = Color.Blue;
public TextBox EditBox;
public BorderTextBox() {
this.DoubleBuffered = true;
this.Padding = new Padding(2);
EditBox = new TextBox();
EditBox.AutoSize = false;
EditBox.BorderStyle = BorderStyle.None;
EditBox.Dock = DockStyle.Fill;
EditBox.Enter += new EventHandler(EditBox_Refresh);
EditBox.Leave += new EventHandler(EditBox_Refresh);
EditBox.Resize += new EventHandler(EditBox_Refresh);
this.Controls.Add(EditBox);
}
private void EditBox_Refresh(object sender, EventArgs e) {
this.Invalidate();
}
protected override void OnPaint(PaintEventArgs e) {
e.Graphics.Clear(SystemColors.Window);
using (Pen borderPen = new Pen(this.EditBox.Focused ? _FocusBorderColor : _NormalBorderColor)) {
e.Graphics.DrawRectangle(borderPen, new Rectangle(0, 0, this.ClientSize.Width - 1, this.ClientSize.Height - 1));
}
base.OnPaint(e);
}
}
Korzystanie OnPaint
narysować obramowanie niestandardowe na swoich kontroli jest w porządku. Ale wiesz, jak używać OnPaint
, aby utrzymać efektywność i zredukować czas do minimum. Przeczytaj to, jeśli masz opóźnione GUI podczas używania niestandardowych procedur malowania: What is the right way to use OnPaint in .Net applications?
Ponieważ zaakceptowana odpowiedź PraVn może wydawać się prosta, ale w rzeczywistości jest nieefektywna. Używanie niestandardowych formantów, takich jak te zamieszczone w powyższych odpowiedziach, jest o wiele lepsze.
Może wydajność nie jest problemem w twojej aplikacji, ponieważ jest mała, ale w przypadku większych aplikacji z wieloma niestandardowymi procedurami OnPaint jest to niewłaściwe podejście do korzystania ze sposobu, w jaki pokazano PraVn.
zestaw Ramka Granicy styl Żaden następnie napisać ten kod do postaci pojemnika „farba” wydarzenie
private void Form1_Paint(object sender, PaintEventArgs e)
{
System.Drawing.Rectangle rect = new Rectangle(TextBox1.Location.X, TextBox1.Location.Y, TextBox1.ClientSize.Width, TextBox1.ClientSize.Height);
rect.Inflate(1, 1); // border thickness
System.Windows.Forms.ControlPaint.DrawBorder(e.Graphics, rect, Color.DeepSkyBlue, ButtonBorderStyle.Solid);
}
można obsługiwać WM_NCPAINT
wiadomość z TextBox
i narysować obramowanie na obszarze non-klient kontroli, jeżeli kontrola ma ostrość. Można użyć dowolnego koloru zwrócić border:
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using System.Windows.Forms;
public class ExTextBox : TextBox
{
[DllImport("user32")]
private static extern IntPtr GetWindowDC(IntPtr hwnd);
private const int WM_NCPAINT = 0x85;
protected override void WndProc(ref Message m)
{
base.WndProc(ref m);
if (m.Msg == WM_NCPAINT && this.Focused)
{
var dc = GetWindowDC(Handle);
using (Graphics g = Graphics.FromHdc(dc))
{
g.DrawRectangle(Pens.Red, 0, 0, Width - 1, Height - 1);
}
}
}
}
Wynik
Obraz granic podczas kontroli koncentruje się całkowicie migotania:
Uwaga
W bieżącym wpisie Po prostu zmieniam kolor obramowania przy fokusie. Możesz również dodać właściwość BorderColor
do formantu. Następnie możesz zmienić kolor obramowania w zależności od wymagań w czasie projektowania lub w czasie wykonywania. Here Zamieściłem wersję bardziej wypełniony od TextBox
który ma BorderColor
właściwość:
- 1. Zmień kolor obramowania NSTextField
- 2. Zmiana koloru obramowania TextBox w C#
- 3. Zmień kolor zastępczego koloru wprowadzania danych
- 4. Zmiana koloru obramowania tekstu iOS
- 5. EPPlus Zmiana koloru obramowania komórek
- 6. Zmień wejściowego kolor obramowania tekstu bez zmiany jego wysokości
- 7. Kolor niestandardowego obramowania trójkąta CSS
- 8. Dostosowywanie koloru obramowania paska koloru na matplotlib
- 9. Zmiana koloru obramowania w formularzu systemu Windows
- 10. Kolor obramowania CSS3
- 11. Resetowanie koloru obramowania kontrolki wejściowej (HTML/JavaScript)
- 12. Zmień kolor wyjściowy Natywny kolor kursora
- 13. CSS: Zmień kolor czcionki na podstawie bieżącego koloru
- 14. Ustaw kolor obramowania CSS na kolor tekstu
- 15. Zmień szerokość obramowania podziałów w VIM
- 16. Linia Zmień Kolor EditText - Android
- 17. Kolor obramowania w oparciu o tło
- 18. Jak zdefiniować kolor obramowania zestawu pól?
- 19. PHPExcel ustaw kolor obramowania komórki
- 20. Ustaw kolor obramowania na glifphony
- 21. Jak zmienić kolor obramowania planszy?
- 22. Jak zmienić kolor tła TextBox?
- 23. Zmień kolor ramki UITableViewCell przy wyborze
- 24. Zmiana koloru obramowania w komórkach iPhone UITableView (niezgrupowane)
- 25. Kolor obramowania tabeli w CSS z zapadnięciem obramowania
- 26. Zmień kolor osi etykiet
- 27. Zmień UIBarbuttonItems Kolor
- 28. Zmień kolor UIPicker
- 29. Zmień kolor androida: activatedBackgroundIndicator
- 30. Tymczasowo zmień kolor rysowania
Jeśli szukasz '' TextBox' mającego własności BorderColor', przyjrzeć się [zmiana koloru granicznego w TextBox] (http : //stackoverflow.com/a/39420512/3110834) –