C# 将DevExpress WinForms文本编辑文本限制为其宽度,而不是最大长度

C# 将DevExpress WinForms文本编辑文本限制为其宽度,而不是最大长度,c#,vb.net,winforms,devexpress,textedit,C#,Vb.net,Winforms,Devexpress,Textedit,我需要将在XtraGrid存储库编辑器中输入的1行文本限制为其固定列宽。我不能使用等距字体和最大长度,因为此字段将显示在报告中。 在KeyPress事件处理程序中,我试图创建一个标签,将字符串放在标签上,并将其PreferedSize.Width与列的宽度进行比较。它几乎可以很好地工作,但如果我必须删除超出的字符,则不容易控制粘贴操作(例如:如果我更改文本值,光标将跳到0)。 我还尝试使用ActiveEditor.CreateGraphics.MeasureString,但无法让它以与DevXP


我需要将在XtraGrid存储库编辑器中输入的1行文本限制为其固定列宽。我不能使用等距字体和最大长度,因为此字段将显示在报告中。
在KeyPress事件处理程序中,我试图创建一个标签,将字符串放在标签上,并将其PreferedSize.Width与列的宽度进行比较。它几乎可以很好地工作,但如果我必须删除超出的字符,则不容易控制粘贴操作(例如:如果我更改文本值,光标将跳到0)。
我还尝试使用ActiveEditor.CreateGraphics.MeasureString,但无法让它以与DevXPress相同的方式绘制(测量)文本。
如果我能在WordWrap事件之前抓住它,那将是一个解决方案。
多谢各位

编辑:我知道,我有2个负票,因为有人认为我没有足够的努力来找到答案,但我认为答案并不容易。我不会删除该线程,因为我认为它可能对其他人有用。
问候。

多亏了DJ KRAZE的建议,我终于明白了。
在存储库TextEdit的editValueChanged事件中,我将e.NewValue分配给DevExpress标签,并将其PreferredSize.widt与列宽进行比较。如果它更大,我将删除字符直到它变小,并将文本分配给e.NewValue。
光标跳到0,因此(根据DevExpress常见问题解答),我必须调用以更改TextEdit.SelectionStart属性。该死VB-2008不接受匿名方法,必须将其公开:)
谢谢。
问候

Private Sub repositoryItemTextEditDescriptip\u EditValueChangeing(ByVal sender作为对象,ByVal e作为DevExpress.XtraEditors.Controls.ChangingEventArgs)处理repositoryItemTextEditDescriptip.EditValueChangeing
静态lbl作为新的DevExpress.XtraEditors.LabelControl
Dim tx As DevExpress.XtraEditors.TextEdit=发送方
作为字符串的Dim s=e.NewValue.ToString.Split(vbCr)(0)
lbl.Text=s
lbl.Font=tx.Font
如果lbl.PreferredSize.Width>=colDescrip.Width-15,则

在lbl.PreferredSize.Width之前执行此操作是否确实不能使用maxlength属性。。?XTraGrid中要限制的字段是什么。。还有一个EventHandler,您可以在其中获取文本的长度并设置最大长度????该字段是将在Crystal Reports报告中显示的发票文章描述。我也不能使用多行字段。您希望输入的文本的最大长度是多少。。你能在你想要拥有这个功能的地方发布代码吗?我可以发布一些我正在发短信的东西,看看它是否对你有用。。?在填充该字段的网格内,必须有一个与文本相关的onChanged事件。。这才是你真正应该检查的地方。。多行不是问题。更多的是字符串长度。有几种方法可以处理这个问题,但确实需要查看您正在使用的代码片段。对不起,DJ KRAZE,我昨天不得不去。多亏了你的线索,我找到了解决办法。我把它贴出来作为回答。谢谢。为什么我的问题有两张反对票?我做错了什么?请告诉我下次要避免。我不习惯在论坛上提问。投票总是被鼓励的。。我很高兴能给你一个线索。。我也知道VB,但我更喜欢远离它。哈哈,再一次。很高兴我能帮你指出正确的方向…再次感谢你。我喜欢VB,在C#里我总是被那些{}弄得乱七八糟。谢谢Ivan,我很感激,很高兴能帮助你
Private Sub RepositoryItemTextEditDescrip_EditValueChanging(ByVal sender As Object, ByVal e As DevExpress.XtraEditors.Controls.ChangingEventArgs) Handles RepositoryItemTextEditDescrip.EditValueChanging
    Static lbl As New DevExpress.XtraEditors.LabelControl
    Dim tx As DevExpress.XtraEditors.TextEdit = sender
    Dim s As String = e.NewValue.ToString.Split(vbCr)(0)
    lbl.Text = s
    lbl.Font = tx.Font
    If lbl.PreferredSize.Width >= colDescrip.Width - 15 Then
        Do Until lbl.PreferredSize.Width <= colDescrip.Width - 15 Or s.Length = 0
            s = s.Remove(s.Length - 1)
            lbl.Text = s
        Loop
    End If
    Dim i As Integer = tx.SelectionStart
    e.NewValue = s
    BeginInvoke(New Action(Of TextEdit, Integer)(AddressOf sbTxSelectIndx), New Object() {tx, i})
End Sub
Private Sub sbTxSelectIndx(ByVal tx As TextEdit, ByVal i As Integer)
    tx.Select(i, 0)
End Sub