Dado un control WinForms TextBox con MultiLine = true
y AcceptsTab == true
, ¿cómo puedo configurar el ancho del carácter de tabulación que se muestra?¿Cómo establecer el ancho de TAB en un control TextBox de Windows Forms?
Quiero utilizar esto como un cuadro de entrada de script rápido y sucio para un complemento. Realmente no tiene por qué ser de lujo en absoluto, pero sería bueno que las pestañas no se mostraban como 8 caracteres de ancho ...
De la respuesta aceptada:
// set tab stops to a width of 4
private const int EM_SETTABSTOPS = 0x00CB;
[DllImport("User32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr h, int msg, int wParam, int[] lParam);
public static void SetTabWidth(TextBox textbox, int tabWidth)
{
Graphics graphics = textbox.CreateGraphics();
var characterWidth = (int)graphics.MeasureString("M", textbox.Font).Width;
SendMessage(textbox.Handle, EM_SETTABSTOPS, 1,
new int[] { tabWidth * characterWidth });
}
Esto puede ser llamado en el constructor de su Form
, pero tenga cuidado: asegúrese de que InitializeComponents
se ejecute primero.
También debe deshacerse de los gráficos, tal vez ponerlos en la instrucción using. –