カスタムコントロールでプロパティの自作から。

解決


saki  2005-04-07 18:36:12  No: 120733

はじめまして。宜しくお願いします。 
現在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

宜しくお願いします。


saki  2005-04-07 18:42:00  No: 120734

すみません。コード訂正です<(_ _)>

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


むっきー  2005-04-07 19:18:22  No: 120735

>Dim tb As TextBox = CType(cotr,TextBox)'←現在はここでエラー

>Protected cotr As String

キャスト間違い
この形でキャストするなら、

Dim tb As TextBox = CType(Me.Controls(cotr),TextBox)

になるのかな
(どこに書いてあるソースか明確でないので分からん)


saki  2005-04-07 19:49:03  No: 120736

むっきーさんありがとうございます。

コードはmytextboxのカスタムコントロール内のコードに書いてます。
すみません!
mytextboxはform1に貼り付けています。

Dim tb As TextBox = CType(Me.Controls(cotr),TextBox)
でやってみましたが下記のエラーがでてしまいます。

Option Strict On で 'String' から 'Integer' への暗黙的な変換はできません。

*あとmeの部分なのですがコード上でマウスを当てると class mytextbox  と表示されちゃいます。

初心者で上手く伝えられずご迷惑かけます。


特攻隊長まるるう  2005-04-07 20:00:56  No: 120737

>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 について調べてみて下さい。


特攻隊長まるるう  2005-04-07 20:03:31  No: 120738

あと過去ログ検索『継承』くらいしておくれ。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200408/04080006.txt


saki  2005-04-07 20:36:23  No: 120739

特攻隊長まるるうさんありがとうございます。
form1内にコードを書いてカスタムコントロール内に
検索結果を表示することはできでます。
検索結果を表示するコントロールを指定できるようにしようと
思いまして・・・

あと
mytextbox内↓

Private Sub testPost_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.LostFocus

(コード)

End Sub

省略していました。すみません。
カスタムコントロールのコード内でform1クラスのコントロール(例:textbox1)を呼べないですか?


特攻隊長まるるう  2005-04-07 21:14:00  No: 120740

ああ、ごめん。勘違いしてた。むっきーさんのをそれなりに解釈すれば
できるね。『継承』は関係ないですね。
        Dim ctr As Control
        For Each ctr In Me.Controls
            If ctr.Name = cotr Then
                ctr.Text = "検索結果"
            End If
        Next
でどう?


特攻隊長まるるう  2005-04-07 21:41:00  No: 120741

他にも
[@IT Windowsフォーム上のすべてのコントロールを列挙するには?]
http://www.atmarkit.co.jp/fdotnet/dotnettips/224controls/controls.html
[DOBON.NET フォームに配置されているコントロールを名前で探す]
http://dobon.net/vb/dotnet/control/findcontrolbyname.html
この辺りを応用すればできそうです。


saki  2005-04-07 23:15:22  No: 120742

できました!
特攻隊長まるるうさん、むっきーさんアドバイスありがとうございました。
初心者なので説明不足がありお手数かけました。
また宜しくお願いします。


saki  2005-04-08 00:57:21  No: 120743

かいけつ。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加