はじめまして。宜しくお願いします。
現在VB.NETでカスタムコントロールを作成しています。
(テキストボックスを継承)
そのmytextboxにある数値を入力しそこからフォーカスが抜けると
データベースに接続し検索結果が返ってくるものです。
そこで検索結果を表示するコントロール名を入力するprcontrプロパティ(自作:string型)を作りました。(string型)
質問なのですが、ユーザーに指定されたコントロール(例:textbox1)に表示させる部分が上手くできないので
アドバイスお願いします。
現在は下記のようになっています。
Private Sub mytextbox_LostFocus(〜)〜
Dim tb As TextBox = CType(mproBuddyKanaStr,TextBox)'←現在はここでエラー
(データベース読込)
cotr.text = 検索結果
contr.Text = kanakana.tostring
End Sub
Protected cotr As String
Public Property prcotr() As String
Get
Return cotr
End Get
Set(ByVal Value As String)
cotr = Value
End Set
End Property
宜しくお願いします。
すみません。コード訂正です<(_ _)>
Private Sub mytextbox_LostFocus(〜)〜
Dim tb As TextBox = CType(cotr,TextBox)'←現在はここでエラー
(データベース読込)
tb.text = 検索結果
End Sub
Protected cotr As String
Public Property prcontr() As String
Get
Return cotr
End Get
Set(ByVal Value As String)
cotr = Value
End Set
End Property
>Dim tb As TextBox = CType(cotr,TextBox)'←現在はここでエラー
>Protected cotr As String
キャスト間違い
この形でキャストするなら、
Dim tb As TextBox = CType(Me.Controls(cotr),TextBox)
になるのかな
(どこに書いてあるソースか明確でないので分からん)
むっきーさんありがとうございます。
コードはmytextboxのカスタムコントロール内のコードに書いてます。
すみません!
mytextboxはform1に貼り付けています。
Dim tb As TextBox = CType(Me.Controls(cotr),TextBox)
でやってみましたが下記のエラーがでてしまいます。
Option Strict On で 'String' から 'Integer' への暗黙的な変換はできません。
*あとmeの部分なのですがコード上でマウスを当てると class mytextbox と表示されちゃいます。
初心者で上手く伝えられずご迷惑かけます。
>Private Sub mytextbox_LostFocus(〜)〜
〜の省略部分が重要だったりしますがw
あと、継承した mytextbox のクラス名も書いたほうが良い。
…mytextbox なのか…
そこが分からないと回答できないけど
Dim tb As TextBox = CType(sender,TextBox)
とか
Dim tb As TextBox = CType(mytextbox,TextBox)
とか
Dim tb As 継承クラス名 = DirectCast(sender,継承クラス名)
とかも通るかもね?
↑ここまでは Form1 にコードを書いてる場合。
>コードはmytextboxのカスタムコントロール内のコードに書いてます。
おいおい(汗)
テキストボックスの指定なんかしなくても
Me が自分自身のことだから
Private Sub mytextbox_LostFocus(〜)〜
(データベース読込)
Me.Text = 検索結果
End Sub
で終わりでしょ?もしくは MyBase について調べてみて下さい。
あと過去ログ検索『継承』くらいしておくれ。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200408/04080006.txt
特攻隊長まるるうさんありがとうございます。
form1内にコードを書いてカスタムコントロール内に
検索結果を表示することはできでます。
検索結果を表示するコントロールを指定できるようにしようと
思いまして・・・
あと
mytextbox内↓
Private Sub testPost_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.LostFocus
(コード)
End Sub
省略していました。すみません。
カスタムコントロールのコード内でform1クラスのコントロール(例:textbox1)を呼べないですか?
ああ、ごめん。勘違いしてた。むっきーさんのをそれなりに解釈すれば
できるね。『継承』は関係ないですね。
Dim ctr As Control
For Each ctr In Me.Controls
If ctr.Name = cotr Then
ctr.Text = "検索結果"
End If
Next
でどう?
他にも
[@IT Windowsフォーム上のすべてのコントロールを列挙するには?]
http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html
[DOBON.NET フォームに配置されているコントロールを名前で探す]
http://dobon.net/vb/dotnet/control/findcontrolbyname.html
この辺りを応用すればできそうです。
できました!
特攻隊長まるるうさん、むっきーさんアドバイスありがとうございました。
初心者なので説明不足がありお手数かけました。
また宜しくお願いします。
かいけつ。
ツイート | ![]() |