2009-12-08 1 views

ответ

4

Вот управления TextBox, который поддерживает RightMargin свойство. Протестировано на Win7:

using System; 
using System.ComponentModel; 
using System.Windows.Forms; 
using System.Runtime.InteropServices; 

class MyTextBox : TextBox { 
    private int mRightMargin; 

    [DefaultValue(0)] 
    public int RightMargin { 
    get { return mRightMargin; } 
    set { 
     if (value < 0) throw new ArgumentOutOfRangeException(); 
     mRightMargin = value; 
     if (this.IsHandleCreated) updateMargin(); 
    } 
    } 

    protected override void OnHandleCreated(EventArgs e) { 
    base.OnHandleCreated(e); 
    if (mRightMargin > 0) updateMargin(); 
    } 

    private void updateMargin() { 
    // Send EM_SETMARGINS 
    SendMessage(this.Handle, 0xd3, (IntPtr)2, (IntPtr)(mRightMargin << 16)); 
    } 

    [DllImport("user32.dll", CharSet = CharSet.Auto)] 
    private static extern IntPtr SendMessage(IntPtr hWnd, int msg, IntPtr wp, IntPtr lp); 
} 
+0

Спасибо, благородный! – Jooj

2

По the documentation:

[DllImport("user32.dll", CharSet=CharSet.Auto)] 
static extern IntPtr SendMessage(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam); 

... 

SendMessage(hwnd, EM_SETMARGINS, (IntPtr)EC_RIGHTMARGIN, (IntPtr)(rightMargin << 16)); 
Смежные вопросы