유용한 정보

[C#] TextBox 컨트롤에 수직스크롤바가 있는지의 여부 판단하기

DevReff 2025. 4. 16. 05:01
728x90
728x90
SMALL

 

1. 소스
/// <summary>
/// 주어진 TextBox 컨트롤에 수직스크롤바가 있는지의 여부를 구한다.
/// </summary>
/// <param name="txt">TextBox 컨트롤</param>
/// <returns>
/// - true : 수직스크롤바가 있다.
/// - false : 수직스크롤바가 없다.
/// </returns>
bool ExistsVScroll(TextBox txt)
{
try
{
StringBuilder sb = new StringBuilder(txt.Text);
string lastline = txt.Lines[txt.Lines.Count() - 1];
SizeF size;
using (Graphics g = Graphics.FromHwnd(txt.Handle))
{
if (string.IsNullOrWhiteSpace(lastline))
sb.Append("1");
size = g.MeasureString(sb.ToString(), txt.Font);
}

if (size.Height > txt.Height)
return true;
}
catch (Exception ex)
{
KLog.Write(ex.ToString());
}

return false;
}

반응형

2. 사용예제

    텍스트박스의 내용이 정해준 줄수를 넘으면 스크롤바를 생성하도록 한다.

private void TXT_MEMO_TextChanged(object sender, EventArgs e)
{
try
{
if (TXT_MEMO.Lines.Count() < 1)
return;

int cursor = TXT_MEMO.SelectionStart;

if (FuncsOfCtrl.ExistsVScroll(TXT_MEMO))
TXT_MEMO.ScrollBars = ScrollBars.Vertical;
else
TXT_MEMO.ScrollBars = ScrollBars.None;

TXT_MEMO.Select(cursor, 0);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}

728x90
728x90
LIST