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");
}
}
对你无语,这样的问题我会问吗? 连题都看不明白 也敢说,好吧算我没有讲清楚。
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("超过长度");
}
} --------------------编程问答--------------------
真的感觉到,编程不但要数学好,语文也要好才行 --------------------编程问答-------------------- 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可以设置最大输入字符额亲 --------------------编程问答--------------------
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#