tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルユーザーコントロールについての質問
記事No3333
投稿日: 2006/03/20(Mon) 16:49
投稿者Levia
[OSのVer]:Windows    [VBのVer]:VB.NET 
はじめまして、Leviaと申します。

問題点:ユーザコントロールから対象フォーム(画面)の情報を取得する方法

概要 : A__________________________
      Form Main
           Class Enabled
         A.Common___________________
           UserControl FunctionKey

    ユーザーコントロールにはF1〜F12までのファンクションキーを表す為、
    ラベルで表示しています。
    F1(lblF1)を選択した場合、Enabled=FalseとなっているForm Mainのテキストボックスを
    Class Enabledを呼び出し、Trueにしようというものです。

    F1のKeyDownイベントは出来たのですが、F1(lblF1)のラベル部分をクリックした時
    どのようにすればよいのでしょうか?
    ユーザーコントロール側のlblF1_Clickでフォーム呼び出そうとしたのですが、
    フォームを呼び出すことが出来ませんでした。

    ご指導よろしくお願い致します。

[ツリー表示へ]
タイトルRe: ユーザーコントロールについての質問
記事No3335
投稿日: 2006/03/20(Mon) 17:19
投稿者じゃんぬねっと
参照先http://jeanne.wankuma.com/
考え方として、ユーザーコントロールはひとつのクラスであって、
そのコンテナ元の情報を取得するという考えは設計的にまずかろうと思います。
キーの処理はフォームに実装すべきです。

それでもやるのであれば、ユーザーコントロールは通知されたイベントだけの実装になるかな。
それもあまり望ましくはないのですけど。

[ツリー表示へ]
タイトルRe: ユーザーコントロールについての質問
記事No3336
投稿日: 2006/03/20(Mon) 17:22
投稿者YAS
Leviaさん,こんにちは。

ユーザーコントロールにイベントを定義して,F1キーのKeyDownのタイミングでイベントを発生すれば
よいと思います。

    Public Event F1KeyDown As KeyEventHandler

    Private Sub F1_KeyDown(ByVal sender As Object, _
                           ByVal e As System.Windows.Forms.KeyEventArgs)
        RaiseEvent F1KeyDown(sender, e)
    End Sub

    Private Sub F1_Click(ByVal sender As System.Object, _
                         ByVal e As System.EventArgs)
        RaiseEvent F1KeyDown(sender, New KeyEventArgs(Keys.F1))
    End Sub


手軽なインチキとしては,ユーザーコントロールから親のフォールに直接アクセスします。
他のフォームには貼り付けられなくなるので全然おすすめできません。

        DirectCast(Me.TopLevelControl, Form1).TextBox1.Text = "Test"

---編集---
いかん,かぶった。
じゃんぬねっとさんがおっしゃる通り,どちらも「できる」というだけでおすすめはしません。

[ツリー表示へ]
タイトルRe^2: ユーザーコントロールについての質問
記事No3338
投稿日: 2006/03/20(Mon) 17:51
投稿者Levia
[OSのVer]:Windows    [VBのVer]:VB.NET  
じゃんぬねっとさん、YASさん ご返信ありがとうございます。

お客様がフォームレイアウトを作ったもので、私に渡された時点で、
ユーザーコントロールが貼られており、どうしたものかと思っていました。
お二人のご意見を参考に、お客様に納得していただこうと思います。

社会人になって初の仕事が触った事のない.NETで・・・
毎日、テキストやWeb学習の日々です。
またよろしくお願い致します。

[ツリー表示へ]
タイトルRe^3: ユーザーコントロールについての質問
記事No3339
投稿日: 2006/03/20(Mon) 18:12
投稿者YAS
そのユーザーコントロールをいかしたいのなら,
キーの処理はフォームで行い,マウスクリックの処理はユーザーコントロールで
マウスクリックのイベントを発生させるでよいのではないでしょうか。

ユーザーコントロールを単にレイアウトの為に作ったのなら,見た目が同じになるように
パネルか何かのコンテナの上にラベルを並べ直してもいいかもしれませんが。

[ツリー表示へ]