2012-01-11 18 views
-2


XtraGridリポジトリエディタで入力した1行のテキストをその列の固定幅に制限する必要があります。このフィールドはレポートに表示されるため、モノスペースフォントとMaxLenghtは使用できません。
KeyPressイベントハンドラで、ラベルを作成し、文字列をその上に置き、そのPreferedSize.Widthを列の幅と比較しようとしました。それはうまくいきましたが、余分な文字を削除する必要がある場合は、貼り付け操作を制御するのは簡単ではありません(f.ex:テキスト値を変更すると、カーソルは0にジャンプします)。
私はActiveEditor.CreateGraphics.MeasureStringを使ってみましたが、DevExpressと同じ方法でテキストを描画(計測)することはできません。
Before_WordWrapイベントをキャッチすることができれば解決策になります。
ありがとうございます。DevExpress-WinFormsテキストをテキストの幅に制限します。最大幅ではありません

編集:私は自分自身で答えを見つける努力が十分ではなかったと考えているので、2つの否定投票をしましたが、答えは簡単ではないと考えています。スレッドを削除しないのは、他の人に役立つと思うからです。よろしくです。 よろしくお願いします。

+1

maxlengthプロパティは使用できません。あなたが制限したいXTraGridのフィールドは何ですか?また、テキストの長さを取得して最大長を設定できるEventHandlerもあります。 – MethodMan

+0

フィールドは、Crystal Reportsレポートに表示される請求書の記事の説明です。私は複数行のフィールドを使うことはできません。 –

+1

入力されたテキストの長さはどれくらいですか?この機能を持つことを望んでいるコードを投稿して、それがあなたのために働くかどうかを確認するメッセージを投稿できます。 ?グリッドの内部には、そのフィールドのonChangedイベントがあります。これは、実際にチェックが行われるべき場所です。multilineは問題ではありません。これを処理するにはいくつかの方法がありますが、実際に作業しているコードスニペットを表示する必要があります。 – MethodMan

答えて

0

DJ KRAZEの提案に感謝しました。
リポジトリTextEditのEditValueChangingイベントでは、e.NewValueをDevExpressラベルに割り当て、そのPreferredSize.Widhtを列Widthと比較します。それが大きい場合は、文字が小さくなるまで文字を取り除き、テキストをe.NewValueに代入します。
カーソルが0にジャンプしていたので、DevExpress FAQに従って、私はTextEdit.SelectionStartプロパティを変更するためにInvokeを実行しなければなりませんでした。くそー! VB-2008は匿名メソッドを受け入れず、それをappartに置く必要がありました。
ありがとうございました。
よろしく。

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 
+1

投票は常に奨励されています..私はあなたに手掛かりを貸すことができたことをうれしく思っています。私はVBも知っていますが、遠く離れて滞在することを好む.LOLもう一度..グラス正しい方向... – MethodMan

+0

もう一度ありがとうございます。私はVBが好きです、私はいつもそれらの{}どこでもC#で混乱しています。 –

+1

投票できる場合は – MethodMan

関連する問題