winform里如何控制滚动条不出现。 现在有一个richTextBox,boss要求不可以出现滚动条,既:随着内容的增加而增加richTextBox的高度,并且内容减少时如果到了设定高度就不回减。我现在基本功能已经实现了,但有时仍然会出现滚动条,请教有没有什么解决思路可以完成这个功能? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我现在的代码是这样的: private int h; private int w; private int lineH;//行高 private int line = 11;// 标准行数量 private int midLine = 11;//中间变量line private int currentLine = 1; private void richTextBox1_KeyDown(object sender, KeyEventArgs e) { RichTextBox r = (RichTextBox)sender; currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1; this.Text = "line:"+line+",LinesLength:"+this.richTextBox1.Lines.Length.ToString()+",currentLine:"+currentLine; if (e.KeyData == Keys.Enter) { //如果是最后一行的话,那么将他的高度自动增长一行 if (richTextBox1.Lines.Length >= line) { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH); } } else if (e.KeyData == Keys.Delete) { if (richTextBox1.Lines.Length > line && currentLine != r.Lines.Length)//如果richtextbox总行数大于标准行数,且不是最后一行 { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); //e.Handled = true; } } else if (e.KeyData == Keys.Back) { if (richTextBox1.Lines.Length > line)//如果richtextbox总行数大于标准行数, { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); //e.Handled = true; } } } this.richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None; this.richTextBox1.ScrollBars = RichTextBoxScrollBars.None; 注意:随着内容的增加而增加richTextBox的高度 先设置richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;然后用TextChanged事件,简单实现private int LineH = 17; //行高 private int defaultHeight = 180; //默认richTextBox1高度 private int line = 11; // 标准行数量 private void richTextBox1_TextChanged(object sender, EventArgs e){ int currentlines = richTextBox3.Lines.Length; if (currentlines >= line) { richTextBox1.Height = LineH * currentlines; } else { richTextBox1.Height = defaultHeight; }} 写错了int currentlines = richTextBox3.Lines.Length; 改为int currentlines = richTextBox1.Lines.Length; 我之前用的一个简单的方式, 就是用一个大容器, 里面放两个小容器, 上面的一个小容器 Dock 设为 top下面的一个容器设为 Full, 当不需要上面小容器的内容时, 只需设置: Visible 为 false 就OK了, 不需要写许何代码! 在设计界面richTextBox 属性scrollbars设为none 你是//如果是最后一行的话,那么将他的高度自动增长一行 的你已经设定好了` 根本不用改什么``结果是一样的 ref: 我现在基本功能已经实现了,但有时仍然会出现滚动条..----------_-!!! 你不是指你的自增自减功能已经完成了吗? private int h; private int w; private int lineH;//行高 private int line = 11;// 标准行数量 private int midLine = 11;//中间变量line private int currentLine = 1; private void richTextBox1_KeyDown(object sender, KeyEventArgs e) { RichTextBox r = (RichTextBox)sender; currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1; this.Text = "line:"+line+",LinesLength:"+this.richTextBox1.Lines.Length.ToString()+",currentLine:"+currentLine; if (e.KeyData == Keys.Enter) { //如果是最后一行的话,那么将他的高度自动增长一行 if (richTextBox1.Lines.Length > = line) { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH); } } else if (e.KeyData == Keys.Delete) { if (richTextBox1.Lines.Length > line && currentLine != r.Lines.Length)//如果richtextbox总行数大于标准行数,且不是最后一行 { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); //e.Handled = true; } } else if (e.KeyData == Keys.Back) { if (richTextBox1.Lines.Length > line)//如果richtextbox总行数大于标准行数, { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); //e.Handled = true; } } }顶 else if (e.KeyData == Keys.Back) { if (richTextBox1.Lines.Length > line)//如果richtextbox总行数大于标准行数, { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); //e.Handled = true; } } -------------------------------------------------自己又测试了一下,关于退格键没有控制好,把scrollbars设置为none后,使用backspace键会使richTextBox的高度小于设置的标准高。不知道各位有什么好的见解。 重新计算高度阿││博客空间:http://blog.csdn.net/lovingkiss││资源下载:http://download.csdn.net/user/lovingkiss││Email:loving-kiss@163.com [MSN也是这个]││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤ 截止到现在,我把delete和backspace的控制放如keyup里,基本已经实现了之前的要求但是如果用户复制的文本里含有回车,即\n的话,我该如何让他等价实现回车的效果?------------------------------------------------------------------------------------- //控制richTextBox的高度自增高自减小 private void Form1_Load(object sender, EventArgs e) { h = richTextBox1.Size.Height; w = richTextBox1.Size.Width; lineH = lineS==0?h:h/lineS; //this.richTextBox1.ScrollBars = RichTextBoxScrollBars.; } private int h, w;//标准总行时的控件高和宽 private int lineH;//标准行的行高 private int lineS = 11;// 标准总行数量standard private int midLine = 11;//标准总行lineS的中间变量,主要起比较作用 private int currentLine = 1;//设置当前行为第1行 private void richTextBox1_KeyDown(object sender, KeyEventArgs e) { RichTextBox r = (RichTextBox)sender; currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1; if (e.KeyData == Keys.Enter ) { //总行数超过了标准行(line)的数量后,那么将他的高度自动增长一行,-_-!!!这个已经实现! if (r.Lines.Length >= lineS) { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH); } } //this.Text = "line:" + lineS + ",LinesLength:" + r.Lines.Length.ToString() + ",currentLine:" + currentLine + ",midLine" + midLine; } private void richTextBox1_KeyUp(object sender, KeyEventArgs e) { //释放键时发生 RichTextBox r = (RichTextBox)sender; currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1; if (e.KeyData == Keys.Delete) { //如果richtextbox总行数大于标准行数,且当前行不是最后一行,并且总行数要发生了变化(排除是在同一行按下delete的情况) if (r.Lines.Length >= lineS && currentLine != r.Lines.Length && midLine != r.Lines.Length )//&& r.Height > h) { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); } } else if (e.KeyData == Keys.Back) { //如果richtextbox总行数大于标准行数,并且总行数要发生变化 if (r.Lines.Length >= lineS && midLine != r.Lines.Length ) { r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH); } } midLine = r.Lines.Length; this.Text = "lineS:" + lineS + ",LinesLength:" + r.Lines.Length + ",currentLine:" + currentLine + ",midLine" + midLine; } LZ 为什么不在 richTextBox1_TextChanged 里来做? 有个应用程序是用C# 写的,然后想应用到网页上,是不是用asp最方便? 求解答Socket线程问题 datagridview 合并单元格问题【WINFORM】 多线程处理 请教string怎么转换成htmldocument(不用webbrowser) 新年好 各位前辈,帮忙做个解编二进制文件程序吧,有结构,但是出错!!! 如何实现排序问题 高难度问题:如何激活一个已经启动的程序的主窗口 请问哪里可以找到关于issuevision的比较详细的资料 VC#应用程序不能运行 求ado.net中各类操作的超时设置
private int h;
private int w;
private int lineH;//行高
private int line = 11;// 标准行数量
private int midLine = 11;//中间变量line
private int currentLine = 1;
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
RichTextBox r = (RichTextBox)sender;
currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1;
this.Text = "line:"+line+",LinesLength:"+this.richTextBox1.Lines.Length.ToString()+",currentLine:"+currentLine;
if (e.KeyData == Keys.Enter)
{
//如果是最后一行的话,那么将他的高度自动增长一行
if (richTextBox1.Lines.Length >= line)
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH);
}
}
else if (e.KeyData == Keys.Delete)
{
if (richTextBox1.Lines.Length > line && currentLine != r.Lines.Length)//如果richtextbox总行数大于标准行数,且不是最后一行
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
//e.Handled = true;
}
}
else if (e.KeyData == Keys.Back)
{
if (richTextBox1.Lines.Length > line)//如果richtextbox总行数大于标准行数,
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
//e.Handled = true;
}
}
}
richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
然后用TextChanged事件,简单实现private int LineH = 17; //行高
private int defaultHeight = 180; //默认richTextBox1高度
private int line = 11; // 标准行数量 private void richTextBox1_TextChanged(object sender, EventArgs e)
{
int currentlines = richTextBox3.Lines.Length;
if (currentlines >= line)
{
richTextBox1.Height = LineH * currentlines;
}
else
{
richTextBox1.Height = defaultHeight;
}
}
int currentlines = richTextBox3.Lines.Length;
改为
int currentlines = richTextBox1.Lines.Length;
下面的一个容器设为 Full, 当不需要上面小容器的内容时, 只需设置: Visible 为 false 就OK了, 不需要写许何代码!
你是//如果是最后一行的话,那么将他的高度自动增长一行 的
你已经设定好了` 根本不用改什么``结果是一样的
---------
-_-!!! 你不是指你的自增自减功能已经完成了吗?
private int h;
private int w;
private int lineH;//行高
private int line = 11;// 标准行数量
private int midLine = 11;//中间变量line
private int currentLine = 1;
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
RichTextBox r = (RichTextBox)sender;
currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1;
this.Text = "line:"+line+",LinesLength:"+this.richTextBox1.Lines.Length.ToString()+",currentLine:"+currentLine;
if (e.KeyData == Keys.Enter)
{
//如果是最后一行的话,那么将他的高度自动增长一行
if (richTextBox1.Lines.Length > = line)
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH);
}
}
else if (e.KeyData == Keys.Delete)
{
if (richTextBox1.Lines.Length > line && currentLine != r.Lines.Length)//如果richtextbox总行数大于标准行数,且不是最后一行
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
//e.Handled = true;
}
}
else if (e.KeyData == Keys.Back)
{
if (richTextBox1.Lines.Length > line)//如果richtextbox总行数大于标准行数,
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
//e.Handled = true;
}
}
}
顶
{
if (richTextBox1.Lines.Length > line)//如果richtextbox总行数大于标准行数,
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
//e.Handled = true;
}
}
-------------------------------------------------
自己又测试了一下,关于退格键没有控制好,把scrollbars设置为none后,使用backspace键会使richTextBox的高度小于设置的标准高。不知道各位有什么好的见解。
││博客空间:http://blog.csdn.net/lovingkiss
││资源下载:http://download.csdn.net/user/lovingkiss
││Email:loving-kiss@163.com [MSN也是这个]
││联系方式:Q66840199 项目、聊天、咨询、探讨、统统收费,呵呵......
╚---------------------------------------------------------------------------------------------------------ō*︻$▅▆▇◤
但是如果用户复制的文本里含有回车,即\n的话,我该如何让他等价实现回车的效果?
-------------------------------------------------------------------------------------
//控制richTextBox的高度自增高自减小
private void Form1_Load(object sender, EventArgs e)
{
h = richTextBox1.Size.Height;
w = richTextBox1.Size.Width;
lineH = lineS==0?h:h/lineS;
//this.richTextBox1.ScrollBars = RichTextBoxScrollBars.;
} private int h, w;//标准总行时的控件高和宽
private int lineH;//标准行的行高
private int lineS = 11;// 标准总行数量standard
private int midLine = 11;//标准总行lineS的中间变量,主要起比较作用
private int currentLine = 1;//设置当前行为第1行
private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
RichTextBox r = (RichTextBox)sender;
currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1;
if (e.KeyData == Keys.Enter )
{
//总行数超过了标准行(line)的数量后,那么将他的高度自动增长一行,-_-!!!这个已经实现!
if (r.Lines.Length >= lineS)
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height + lineH);
}
}
//this.Text = "line:" + lineS + ",LinesLength:" + r.Lines.Length.ToString() + ",currentLine:" + currentLine + ",midLine" + midLine;
} private void richTextBox1_KeyUp(object sender, KeyEventArgs e)
{
//释放键时发生
RichTextBox r = (RichTextBox)sender;
currentLine = r.GetLineFromCharIndex(r.SelectionStart) + 1;
if (e.KeyData == Keys.Delete)
{
//如果richtextbox总行数大于标准行数,且当前行不是最后一行,并且总行数要发生了变化(排除是在同一行按下delete的情况)
if (r.Lines.Length >= lineS && currentLine != r.Lines.Length && midLine != r.Lines.Length )//&& r.Height > h)
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
}
}
else if (e.KeyData == Keys.Back)
{
//如果richtextbox总行数大于标准行数,并且总行数要发生变化
if (r.Lines.Length >= lineS && midLine != r.Lines.Length )
{
r.SetBounds(r.Location.X, r.Location.Y, r.Width, r.Height - lineH);
}
}
midLine = r.Lines.Length;
this.Text = "lineS:" + lineS + ",LinesLength:" + r.Lines.Length + ",currentLine:" + currentLine + ",midLine" + midLine;
}