当前位置:编程学习 > C#/ASP.NET >>

C# TextBox


 1  文本框长度能输入5个字符, 在输入第6个字的时候,第一个字符看不到了,现在就要捕获这个事件。就是文本框展示的内容有隐藏。找了半天没有找到这样 事件。

2 输入框的大小和textBox1.Size 的差距是多少。

第一个问题 我这样做的,这样只能大概,不是很准。有没有在字符隐藏的时候 触发的事件。
 
 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            //
            if (e.KeyChar != '\b' && e.KeyChar != 13)
            {
                Graphics g = Graphics.FromHwnd(textBox1.Handle);
                SizeF f = g.MeasureString(textBox1.Text + e.KeyChar, textBox1.Font);
                Size s = TextRenderer.MeasureText(textBox1.Text + e.KeyChar, textBox1.Font);

                if (s.Width > textBox1.Width &&
                    s.Height * (s.Width / textBox1.Width) > textBox1.Height)
                {
                    e.Handled = true;
                    MessageBox.Show("超过长度");
                }
            }
        }
 


s.Height * (s.Width / textBox1.Width) > textBox1.Height 主要是处理MultiLine=true。

--------------------编程问答-------------------- 既然是限制输入长度 为什么不用TextBox的MaxLength属性来限制 而要做得这么复杂

如果是需要判断超出长度的话 可以这样写

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if(textBox1.Text.Length > 5)
            {
                //你需要的代码
                //MessageBox.Show("Test");
            }
        }
--------------------编程问答--------------------
引用 1 楼 ducker3590 的回复:
既然是限制输入长度 为什么不用TextBox的MaxLength属性来限制 而要做得这么复杂

如果是需要判断超出长度的话 可以这样写

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if(textBox1.Text.Length > 5)
            {
                //你需要的代码
                //MessageBox.Show("Test");
            }
        }

对你无语,这样的问题我会问吗? 连题都看不明白 也敢说,好吧算我没有讲清楚。

5个是个例子, 比如能输入8个的时候,在输入第9个字母 触发。 能输入100个  在101个时候触发。
.............

--------------------编程问答-------------------- 怎么才能准确的 触发 textbox的内容在隐藏。
开始以为是舍去了小说,  
if (s.Height * ((float) s.Width / textBox1.Width) > textBox1.Height) 这样也不行

SizeF f = g.MeasureString(textBox1.Text + e.KeyChar, textBox1.Font);                 Size s = TextRenderer.MeasureText(textBox1.Text + e.KeyChar, textBox1.Font); 

感觉都不是很准。

--------------------编程问答-------------------- 没明白你想实现的是什么东西 --------------------编程问答-------------------- private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int dStrLength = Convert.ToInt32(Math.Ceiling(this.CreateGraphics().MeasureString(textBox1.Text, textBox1.Font).Width));
            if (dStrLength >= textBox1.Width)
            {
                MessageBox.Show("超过长度"); 
            }
        } --------------------编程问答--------------------
引用 3 楼 QQ81867376 的回复:
怎么才能准确的 触发 textbox的内容在隐藏。

真的感觉到,编程不但要数学好,语文也要好才行 --------------------编程问答-------------------- MeasureString这个是不准确的,可以指定stringformat一般版式试试 --------------------编程问答-------------------- --------------------编程问答-------------------- 深更半夜问这么复杂的问题...

//所有文本当前的长度
int AllStrLength = Convert.ToInt32(Math.Ceiling(this.CreateGraphics().MeasureString(txtBoxUserName.Text, txtBoxUserName.Font).Width));
//单个字符所占的长度
 int xx = Convert.ToInt32(Math.Ceiling(this.CreateGraphics().MeasureString("1", txtBoxUserName.Font).Width));
// 然后 if 一条语句..
//   AllStrLength + xx  > txtBoxUserName.size.width 就是超出长度了...

// 判断过程 放在    textBox1_TextChanged  , keydown 都可,
//   放在 textBox1_KeyPress 不准确,少算一个或多算一个字符,



--------------------编程问答-------------------- 求出字体和字号对应的字母宽度 A, 乘以字符长度,如果超出文本框宽度则返回true --------------------编程问答-------------------- 用api吧,得到字体的宽度,自己在计算! --------------------编程问答-------------------- 可能是文本不够长,你拉长一点就不会隐藏了。 --------------------编程问答-------------------- 打错了应该是

可能是 文本框不够长,你拉长一点就不会隐藏了。 --------------------编程问答-------------------- 真无赖啊, 看着文本框多简单的东西, 但是却搞定不了这个问题。 --------------------编程问答-------------------- --------------------编程问答--------------------
[DllImport("user32")]
        public static extern bool GetCaretPos(out Point lpPoint);





try --------------------编程问答-------------------- private void textBox1_TextChanged(object sender, EventArgs e)
        {
            int dStrLength = Convert.ToInt32(Math.Ceiling(this.CreateGraphics().MeasureString(textBox1.Text, textBox1.Font).Width));
            if (dStrLength >= textBox1.Width)
            {
                MessageBox.Show("超过长度"); 
            }
        } --------------------编程问答-------------------- 最后的时候需要一些判断
必须宽度不余一个数字的宽度后
还有删除的时候 前面可能有一点点没显示 --------------------编程问答-------------------- TextBox可以设置最大输入字符额亲 --------------------编程问答--------------------
引用 楼主 QQ81867376 的回复:
 1  文本框长度能输入5个字符, 在输入第6个字的时候,第一个字符看不到了,现在就要捕获这个事件。就是文本框展示的内容有隐藏。找了半天没有找到这样 事件。

2 输入框的大小和textBox1.Size 的差距是多少。

第一个问题 我这样做的,这样只能大概,不是很准。有没有在字符隐藏的时候 触发的事件。
 
 private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            //
            if (e.KeyChar != '\b' && e.KeyChar != 13)
            {
                Graphics g = Graphics.FromHwnd(textBox1.Handle);
                SizeF f = g.MeasureString(textBox1.Text + e.KeyChar, textBox1.Font);
                Size s = TextRenderer.MeasureText(textBox1.Text + e.KeyChar, textBox1.Font);

                if (s.Width > textBox1.Width &&
                    s.Height * (s.Width / textBox1.Width) > textBox1.Height)
                {
                    e.Handled = true;
                    MessageBox.Show("超过长度");
                }
            }
        }
 


s.Height * (s.Width / textBox1.Width) > textBox1.Height 主要是处理MultiLine=true。

LZ到底要实现什么呀,没看明白 --------------------编程问答-------------------- 控制winform文本框输入字符限制(数字或字母、长度)
Simple Numeric TextBox --------------------编程问答-------------------- 哪有那么复杂

private void textBox1_TextChanged(object sender, EventArgs e)
{
    int index = textBox1.GetCharIndexFromPosition(new Point(0, 0));
    if (index != 0)
    {
        MessageBox.Show("就是现在!");
    }
}

还有右方向键和鼠标触发的...
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,