AceInfinity
Emeritus, Contributor
Alright, so writing some random stuff in one of my code editors I noticed some cool features and decided to see how to make a regular Textbox emulate these features.
Here's a nice and easy way of setting specific points as tabstops within a Textbox control. I believe the same should work for a RichTextBox:
Result:
For a ListBox, the constant seems to be 0x192 instead of 0xCB for LB_SETTABSTOPS. The good part about this is that it's not limited to the "space character measuring" method, because we don't require a monospaced font in order for this to work.
:thumbsup2:
Here's a nice and easy way of setting specific points as tabstops within a Textbox control. I believe the same should work for a RichTextBox:
Code:
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
private void SetTabStops(System.Windows.Forms.TextBox textBox, int[] tabStops)
{
const int EM_SETTABSTOPS = 0xCB;
GCHandle gcHandle = GCHandle.Alloc(tabStops, GCHandleType.Pinned);
IntPtr ptr = gcHandle.AddrOfPinnedObject();
SendMessage(textBox.Handle, EM_SETTABSTOPS, new IntPtr(tabStops.Length), ptr);
gcHandle.Free();
textBox.Refresh();
}
private unsafe void MainMethod()
{
string[] lines = new[]
{
"One\tTwo\tThree",
"Item1\tItem2\tItem3",
"Something1\tSomething2\tSomething3"
};
textBox2.Lines = lines;
SetTabStops(textBox2, new[] {75, 150});
}
Result:
For a ListBox, the constant seems to be 0x192 instead of 0xCB for LB_SETTABSTOPS. The good part about this is that it's not limited to the "space character measuring" method, because we don't require a monospaced font in order for this to work.
:thumbsup2: