初めて質問させて頂きます。
テキストボックス内で指定行数まで改行したら、
指定行数以降は改行できないようにしたいです。
過去ログを拝見したり、調べたりしたのですが、
うまくいきません。
どの様なコードを入力すれば宜しいですか?
宜しくお願いします。
VB6と仮定しての話です。
基本はKeyPressイベントで改行の数を数えればいいと思いますが、
貼り付けされた場合を考慮するなら、Changeイベントもコーディングの
対象になると思います。
Private Sub Text1_KeyPress(KeyAscii As Integer)
Dim strCrlf() As String
Dim intCrlfCnt As Integer
If KeyAscii = vbKeyReturn Then
'エンターが押下された場合
strCrlf = Split(Text1.Text, vbCrLf)
intCrlfCnt = UBound(strCrlf) + 1
If intCrlfCnt > 20 Then
'無効
KeyAscii = 0
End If
End If
End Sub
matsu様
ご返答ありがとうございます。
早速、ご指導頂いたコードを入力したのですが、
エンターが指定した改行数以降も押せてしまいます。
下記が入力したコードです。
当方、VB2005を使用しております。
(記載せず申し訳ありませんでした。)
Private Sub 備考textbox_keypress(ByVal keyascii As Integer)
Dim strCrlf() As String
Dim intCrlfCnt As Integer
If keyascii = Keys.Enter Then
'エンターが押下された場合
strCrlf = Split(備考TextBox.Text, vbCrLf)
intCrlfCnt = UBound(strCrlf) + 1
If intCrlfCnt > 3 Then
'無効
keyascii = 0
End If
End If
End Sub
この「備考textbox」のプロパティの設定がいけないのでしょうか?
multilineはtureにしています。
宜しくお願いします。
VB2005のKeyPressイベントって引数が違うとおもいますが。
matsuさんのコードをコピーしてvb2005に以降しても、只の関数
扱いになってイベント時にその処理をしないと思うのですが、、
>If keyascii = Keys.Enter Then
ここにブレークポイントを挿入して、Enterキーを押してみてください。
そこで止まらなければ、その処理はしていません。
KG様
ありがとうございます。
>If keyascii = Keys.Enter Then
>ここにブレークポイントを挿入して、Enterキーを押してみてください。
>そこで止まらなければ、その処理はしていません。
上記の部分を確認しましたら、
止まりませんでしたので、この処理はされていないのですね・・・
>VB2005のKeyPressイベントって引数が違うとおもいますが。
このご助言を頂き下記の様にコードを変えてみたのですが、
やはり希望通りには動いてくれません。
どの部分がおかしいのでしょうか?
Private Sub 備考textbox_keydown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles 備考TextBox.KeyDown
Dim keyascii As Integer
If keyascii = 13 Then
If UBound(Split(Me.備考TextBox.Text, vbCrLf)) >= 4 - 1 Then
keyascii = 0
End If
End If
End Sub
宜しくお願いします。
TextBoxを継承したコントロールを利用すれば、以下のようになります。
(1)新規クラスを作成します。
(2)以下のコードと差し替えます。
Public Class Class1
Inherits System.Windows.Forms.TextBox
Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Enter Then
If UBound(Split(Me.Text, vbCrLf)) >= 4 - 1 Then
Return True
End If
End If
Return MyBase.ProcessDialogKey(keyData)
End Function
End Class
(3)とりあえずビルドします。
(4)フォームデザイナにすると、ツールボックスに「Class1」といコントロールができています。
(5)(4)をフォームに貼り付けます。
あとはテキストボックスと同じ要領で利用できます。
クラス名は適宜修正してくださいね。
うなまな様
ありがとうございます。
ご指導通りにしましたら、希望通りの動きになりました。
現在、データベースに接続して作業を行っているのですが、
このclass1のコントロールをフォームに貼り付けた場合、
DataBindingsを希望するデータベースにすれば宜しいのですか?
宜しくお願いします。
特別なコントロールではなく、基本はTextBoxコントロールなので、
通常のTextBoxと同様に利用できます。
ですから、DataBindingsに同様に設定できます。
matu様、KG様、うなまな様
ありがとうございました。
無事希望通りの動きにする事ができました。
本当に助かりました。
また質問させて頂く際は、宜しくお願いします。
ツイート | ![]() |