相关疑难解决方法(0)

WinForms中的水印TextBox

任何人都可以指向一个基本的Windows窗体TextBox的良好实现,它最初会显示水印文本,当光标进入时它会消失吗?我想我可以通过创造性地使用Enter和Leave事件来创建我自己的东西,但我确信在某个地方有一个完全可用的实现.我看到了WPF实现,如果有必要,我可以嵌套它,但原生的WinForms TextBox派生会更好.

到目前为止,我有这个; 尚未尝试过,但有没有人看到任何明显的问题?

public class WatermarkTextBox:TextBox
{
    public string WatermarkText { get; set; }

    public Color WatermarkColor { get; set; }

    private Color TextColor { get; set; }

    private bool isInTransition;

    public WatermarkTextBox()
    {
        WatermarkColor = SystemColors.GrayText;
    }

    private bool HasText { get { return Text.IsNotNullOrBlankOr(WatermarkText); }}

    protected override void OnEnter(EventArgs e)
    {
        base.OnEnter(e);

        if (HasText) return;

        isInTransition = true;
        ForeColor = TextColor;
        Text = String.Empty;
        isInTransition = false;
    }

    protected override void OnForeColorChanged(EventArgs e)
    {
        base.OnForeColorChanged(e);
        if (!isInTransition) …
Run Code Online (Sandbox Code Playgroud)

.net textbox watermark winforms

53
推荐指数
5
解决办法
3万
查看次数

带单位的 NumericUpDown | 自定义控件| 字段填充

NumericUpDown我试图创建一个继承以显示可设置单位的自定义控件。

这是(视觉上)我到目前为止所得到的:

在此输入图像描述

我的代码: 看起来有点长,但并没有做那么多

class NumericUpDownUnit : NumericUpDown
{
    public event EventHandler ValueChanged;

    /// <summary>
    /// Constructor creates a label
    /// </summary>
    public NumericUpDownUnit()
    {
        this.TextChanged += new EventHandler(TextChanged_Base);
        this.Maximum = 100000000000000000;
        this.DecimalPlaces = 5;

        this.Controls.Add(lblUnit);
        lblUnit.BringToFront();

        UpdateUnit();
    }

    public void TextChanged_Base(object sender, EventArgs e)
    {
        if(ValueChanged != null)
        {
            this.ValueChanged(sender, e);
        }
    }

    /// <summary>
    /// My designer property
    /// </summary>
    private Label lblUnit = new Label();
    [Description("The text to show as the unit.")]
    public string Unit
    { …
Run Code Online (Sandbox Code Playgroud)

c# label custom-controls padding winforms

5
推荐指数
1
解决办法
1816
查看次数

具有底部边框的文本框

我想TextBox使用底部边框,但TextBox由于,为绘制的图形在调整大小时变形/损坏Color.Transparent

使用找到的代码,我可以创建一个带下划线的TextBox(带有透明的顶部,左侧,右侧的绘制矩形)。问题是当我调整窗体/窗口的大小时:当我将其大小缩小到较小的大小,然后再次调整大小以展开它时,绘制的图形会失真。有什么解决办法吗?

这些是照片:第二张照片已经被调整为较小的尺寸,然后再放大为较大的尺寸。 正常收缩然后扩大

这是代码:

[DllImport("user32")]
    private static extern IntPtr GetWindowDC(IntPtr hwnd);
    struct RECT {
        public int left, top, right, bottom;
    }
    struct NCCALSIZE_PARAMS {
        public RECT newWindow;
        public RECT oldWindow;
        public RECT clientWindow;
        IntPtr windowPos;
    }

    float clientPadding = 0;
    int actualBorderWidth = 2;
    Color borderColor = Color.Black;
    protected override void WndProc(ref Message m) {
        //We have to change the clientsize to make room for borders
        //if not, the border is limited …
Run Code Online (Sandbox Code Playgroud)

c# graphics user-interface winforms window-resize

2
推荐指数
1
解决办法
5576
查看次数