在WPF中,它具有TextBox控件垂直对齐的默认支持。但在Windows窗体中,无法设置TextBox控件的垂直对齐方式。
在我的情况下,我使用多行文本框,文本需要显示在TextBox的底部,并且需要在键入时保持对齐。
我试图获取输入文本的行数,并尝试根据文本的长度计算文本框的边界。但是在使用自动换行编辑文本时,行数不正确。
任何人都可以帮我解决这个问题,以便在编辑时保持TextBox的垂直对齐吗?
我尝试使用该主题中给出的建议更改文本框的位置。在编辑文本时。当我尝试编辑文本时,边界未正确更新,文本的某些部分隐藏在文本框中。我根据字体大小和文本宽度计算了边界。
tsc
编辑文本时工作正常,但在某些情况下,Size textSize = TextRenderer.MeasureText(TextBoxText, this.textBoxControl.Font);
int textBoxTop = this.textBoxControl.Bounds.Top;
int nol = (textSize.Width > this.textBoxControl.Width) ? ((textSize.Width) / this.textBoxControl.Width) + 1 : 1;
{
if (nol > n)
{
n = nol;
rect1 = this.textBoxControl.Bounds;
if (top + (height - nol * textSize.Height) > top)
{
rect1.Y = top + (height - nol * textSize.Height);
rect1.Height = nol * textSize.Height;
this.textBoxControl.Bounds = rect1;
}
else
{
this.textBoxControl.Bounds = rect1;
}
}
else if (nol < n)
{
n = nol;
rect1 = this.textBoxControl.Bounds;
if (rect1.Y + nol * textSize.Height < top + height)
{
rect1.Y += textSize.Height - this.textBoxControl.Margin.Top;
rect1.Height -= textSize.Height;
//this.textBoxControl.Bounds = rect1;
}
if (nol == 1)
{
rect1.Y = top + height - textSize.Height;
rect1.Height = textSize.Height;
//this.textBoxControl.Bounds = rect1;
}
this.textBoxControl.Bounds = rect1;
}
}
行计数错误计算。如何获取文本框的实际行数,包括换行。
答案 0 :(得分:1)
我创建了一个控件,其TextBox
停靠在面板底部,看起来有点像// Make sure you have this.
using System.Linq;
public class BottomAlignTextBox : Panel
{
public BottomAlignTextBox()
{
this.BackColor = Color.White;
this.BorderStyle = (Application.RenderWithVisualStyles) ? BorderStyle.FixedSingle : BorderStyle.Fixed3D;
this.Size = new Size(200, 200);
this.Padding = new Padding(5, 0, 4, 2);
bottomAlignTextBox.Dock = DockStyle.Bottom;
bottomAlignTextBox.Multiline = true;
bottomAlignTextBox.WordWrap = true;
bottomAlignTextBox.AcceptsReturn = true;
bottomAlignTextBox.BorderStyle = BorderStyle.None;
bottomAlignTextBox.Height = 20;
bottomAlignTextBox.TextChanged += delegate
{
if (bottomAlignTextBox.Height < this.Height - 20)
{
if (TextRenderer.MeasureText(bottomAlignTextBox.Text, bottomAlignTextBox.Font).Width > bottomAlignTextBox.Width + 6)
{
string longestLine = bottomAlignTextBox.Lines.OrderByDescending(s => TextRenderer.MeasureText(s, bottomAlignTextBox.Font).Width).First();
bottomAlignTextBox.Text = bottomAlignTextBox.Text.Replace(longestLine, longestLine.Substring(0, longestLine.Length - 1) + Environment.NewLine + longestLine[longestLine.Length - 1]);
bottomAlignTextBox.Height += 19;
bottomAlignTextBox.SelectionStart = bottomAlignTextBox.Text.Length + 2;
bottomAlignTextBox.SelectionLength = 0;
}
}
};
this.Controls.Add(bottomAlignTextBox);
this.Click += delegate { bottomAlignTextBox.Focus(); };
}
public new string Text
{
get { return bottomAlignTextBox.Text; }
set { bottomAlignTextBox.Text = value; }
}
private TextBox bottomAlignTextBox = new TextBox();
}
:
select t1.*
from yourtable t1
inner join (
select max(`sale_Amnt(INR)`) as `sale_Amnt(INR)`, product_group
from yourtable
group by product_group
) t2 on t2.product_group = t1.product_group and t2.`sale_Amnt(INR)` = t1.`sale_Amnt(INR)`
答案 1 :(得分:0)
我不确定这是否完全可能,但我认为您可以使用Panel控件或某种类型包装控件并将其停靠在包装Panel控件的底部?如果大小需要是动态的,那么围绕Anchor属性玩游戏也应该有效。