テキストボックスの高さを変更するにはどうすればよいですか?
以下のいずれも機能しません:
this.TextBox1.Size = new System.Drawing.Size(173, 100);
または
this.TextBox1.Size.Height = 100;
可能であれば、複数行を使用せずに、フォントサイズに合わせて単一行のテキストボックスの高さを変更できるようにしたかったのです。
これを行うには2つの方法があります。
それが唯一の方法だと思います。大きなフォントサイズは自動的にテキストボックスに収まるはずです
YourForm.Designer.csに移動して、テキストボックスまでスクロールします。以下の例は、textBox2オブジェクトの場合です。これを追加
this.textBox2.AutoSize = false;
そして、あなたが望むものにそのサイズを設定します
this.textBox2.Size = new System.Drawing.Size(142, 27);
チャームのように機能します-multilineをtrueに設定しなくても、デザイナー自体のオプションを変更するまでのみです(これら2行を再度設定する必要があります)。この方法は、マルチラインよりも優れていると思います。私のアプリにはニックネームのテキストボックスがあり、複数行の場合、Thomas\nThomas(実際のテキストボックスの行には1つしか表示されていません)のように、誤って名前を2回書いていることがあります。このソリューションでは、各文字が幅に対して長すぎて単純に左側に隠れているため、ユーザーが入力を入力するのがはるかに安全です。
テキストボックスのMinimumSize
および/またはMaximumSize
プロパティを設定できます。これはすぐにはサイズに影響しませんが、フォームデザイナでテキストボックスのサイズを変更すると、サイズは最小/最大サイズの制約を満たすように自動的に調整されます。これは、Multiline
がfalse
に設定されていても機能し、フォントサイズに依存しません。
最小サイズのプロパティを設定します
tb_01.MinimumSize = new Size(500, 300);
これは私のために働いています。
テキストボックスにカスタムの高さを設定するための素晴らしい小さなトリックを見つけました。
デザイナビューで、minimumSize
を任意の値に設定し、size
設定を完全に削除します。これにより、デザイナーは新しい最小設定で更新されます!
public partial class MyTextBox : TextBox
{
[DefaultValue(false)]
[Browsable(true)]
public override bool AutoSize
{
get
{
return base.AutoSize;
}
set
{
base.AutoSize = value;
}
}
public MyTextBox()
{
InitializeComponent();
this.AutoSize = false;
}
以下を試してください:)
textBox1.Multiline = true;
textBox1.Height = 100;
textBox1.Width = 173;
もう少し遅れるかもしれません。しかし、あなたはこれを行うことができます。
txtFoo.Multiline = true;
txtFoo.MinimumSize = new Size(someWith,someHeight);
そのように解決しました。
AutoSize、Minimum、Maximumは柔軟性を与えません。複数行を使用して、キー入力イベントを処理し、キー押下を抑制します。よく働く。
textBox1.Multiline = true;
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
e.Handled = true;
e.SuppressKeyPress = true;
}
}
私がやりたかったのはテキストボックスの高さを設定するだけだったので、これは私にとってうまくいったものです。プロパティは読み取り専用で、プロパティはUnitクラスにあるため、設定することはできません。そこで、新しいUnitを作成し、コンストラクターで高さを設定してから、代わりにtextboxをその単位に設定します。
Unit height = txtTextBox.Height;
double oldHeight = height.Value;
double newHeight = height.Value + 20; //Added 20 pixels
Unit newHeightUnit = new Unit(newHeight);
txtTextBox.Height = newHeightUnit;
何人かは近かったのですが、デザイナーのコードをそのように変更すると、いつも戻ってもう一度変更する必要があるため、面倒です。
元のOPはおそらくバージョン4がフォントに合わせてテキストボックスの高さを自動調整するため、古いバージョンの.netを使用していましたが、コンボボックスとテキストボックスのサイズは同じではなく、まったく異なる問題ですが、ここで私を引きました。
これは、フォーム上のコンボボックスの隣にテキストボックスを配置するときに直面した問題です。高さの異なる2つのコントロールを並べて使用したいのは誰ですか?または、高さを強制する別のフォントですか?マイクロソフトを強化してください、これは簡単なはずです!
私はVS2012で.net framework 4を使用していますが、以下が最も簡単なソリューションでした。
フォームロードイベント(またはInitializeComponent
の後に発生する限り):textbox.AutoSize = false
次に、高さを任意に設定します。私にとっては、テキストボックスとコンボボックスを同じ高さにしたかったので、textbox.height = combobox.height
は私のためにトリックをしました。
ノート:
1)デザイナーは影響を受けないため、プロジェクトを開始して最終結果を確認する必要があるため、試行錯誤が生じる可能性があります。
2)テキストボックスが下に伸びるので、サイズ変更後にコンボボックスとテキストボックスの上部を適切に配置する場合は、上部を配置します。
私にとって最良の方法は、テキストボックスの境界線を削除し、パネル内に配置することです。これは、必要に応じてカスタマイズできます。
InitializeComponent()を呼び出した後、コンストラクタに次のコードを追加すると、a)Multilineプロパティを変更する、b)高さをハードコーディングする、またはc)Designerをいじることなく、プログラムでテキストボックスを正しい高さに設定できます。生成されたコード。それでも、カスタムコントロールで行うほどきれいであるとは限りませんが、かなりシンプルで堅牢です。
if (txtbox.BorderStyle == BorderStyle.None)
{
txtbox.BorderStyle = BorderStyle.FixedSingle;
var heightWithBorder = txtbox.ClientRectangle.Height;
txtbox.BorderStyle = BorderStyle.None;
txtbox.AutoSize = false;
txtbox.Height = heightWithBorder;
}
静的クラスに配置し、TextBoxの拡張メソッドにすることで、よりクリーンで使いやすくすることにしました。
public static class TextBoxExtensions
{
public static void CorrectHeight(this TextBox txtbox)
{
if (txtbox.BorderStyle == BorderStyle.None)
{
txtbox.BorderStyle = BorderStyle.FixedSingle;
var heightWithBorder = txtbox.ClientRectangle.Height;
txtbox.BorderStyle = BorderStyle.None;
txtbox.AutoSize = false;
txtbox.Height = heightWithBorder;
}
}
}
手順:
希望の高さと同じ背面色のパネル内に配置できます。この方法には、テキストボックスが水平方向に中央に配置できるという利点がありますが、これは他のソリューションでは提供されていません。
次の方法を使用して、さらに自然にできます。
private void textBox1_Enter(object sender, EventArgs e)
{
panelTextBox.BorderStyle = BorderStyle.FixedSingle;
}
private void textBox1_Leave(object sender, EventArgs e)
{
panelTextBox.BorderStyle = BorderStyle.None;
}
それを行う最も簡単な方法
1 ..テキストボックスを右クリック
2 ..プロパティに移動
multiline = Trueを設定します
これで、TextBoxのサイズが自動的に変更されます
カスタマイズすることもできます