2

Label.TextAlignタイプはContentAlignmentです。開発者は、垂直方向と水平方向の配置の任意の組み合わせを選択できます。

TextBox.TextAlignタイプはHorizo​​ntalAlignmentです。LeftCenter、およびRightのみを許可します。

ContentAlignment = MiddleLeftTextBoxの動作を模倣したいと思います。

MsgBox基本的に、カスタムダイアログを作成しようとしています(MessageBox.Show非 VB 開発者向け)。Microsoftでは、Windows API を介しMsgBoxて自動的に設定されているようです。ユーザーがテキストを選択して、部分的または完全にクリップボードにコピーできる必要があるためLabel.TextAlign = MiddleLeft、 (ラベルではなく) である必要があります。TextBox

これまでのところ、私はこの解決策を思いつきました:

  1. TableLayoutPanel があり、そのセルの 1 つに上記の TextBox が含まれます。
  2. 設定しAnchor = Left,Rightます。これにより、水平に引き伸ばされたままになります。
  3. MeasureText表示する直前 (例: Form_Load)、および調整しTextBox.Heightます。

    Dim size As SizeF = TextBox1.CreateGraphics.MeasureString(
                        TextBox1.Text, TextBox1.Font, TextBox1.Width)
    TextBox1.Height = size.Height
    

これが実際にどのように機能するかの写真です (デモ プロジェクト、まだカスタム MsgBox ではありません)。

ここに画像の説明を入力

サイズ変更やテキストの変更に対する回復力がなく、かなり汚いアプローチのようです。もちろん、これらのイベントはそれに応じて処理できますが、全体的に煩雑になります。

質問: よりクリーンなアプローチはありますか? 上記の動作を実装するのに役立つ可能性のあるものを探しています-必ずしもである必要はありませんTextBox

4

1 に答える 1

0

フォームに WPF ElementHost を追加する場合。次に、TextBox を含む WPF UserControl を次のように作成します。

<UserControl x:Class="UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="113" d:DesignWidth="234" BorderThickness="2" BorderBrush="Black">

    <TextBox x:Name="TextBox1" BorderThickness="0" IsReadOnly="True" Background="{x:Null}" HorizontalContentAlignment="Center" VerticalContentAlignment="Center">Hello World</TextBox>
</UserControl>

次に、コードで次のように値を設定できます。

Me.UserControl11.TextBox1.Text = "Some Text Value Here"

当然、これは WPF を使用できることを前提としていますが、プラス面として、すべての Xaml スタイリング機能を自由に使用できます。

于 2013-02-22T16:38:56.670 に答える