2

Label.TextAlignContentAlignment类型。它允许开发人员选择垂直和水平对齐的任意组合。

TextBox.TextAlignHorizo​​ntalAlignment类型的。它只允许LeftCenterRight

我想模仿ContentAlignment = MiddleLeftTextBox 的行为。

基本上,我正在尝试创建一个自定义MsgBox对话框(MessageBox.Show对于非 VB 开发人员)。微软MsgBox似乎Label.TextAlign = MiddleLeft通过 windows API 自动设置。我需要它是一个TextBox(不是标签),因为用户应该能够选择文本并部分或全部复制到剪贴板。

到目前为止,我想出了这个解决方案:

  1. 有一个 TableLayoutPanel,它的一个单元格将包含上面的 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 回答