tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルユーザーコントロールの組合せ構成
記事No10143
投稿日: 2010/06/13(Sun) 23:27
投稿者もすら
【お世話になります。
VB経験は1年未満で、現在VB2005を使用しています。(OSはVistaです)
以下に目標アプリとそれに対する現在困っている内容を質問させていただきます。

質問タイトル 通信モジュールを利用したLSI制御GUIの作成(モジュール構成)について

目標アプリケーション : LSIアクセスがI2Cプロトコルなので、PICを使い
           UART/I2C変換してレジスタアクセス制御する。この
           UARTモジュール・I2Cモジュールをを再利用できるように
           ユーザーコントロール化、レジスタ操作部もクラス化して
           アクセスを考えてます
質問 :一度は操作アプリケーションできたのですが、FORM上にベタにひたすら
    書いたので、可読性悪く、再利用できないのものとなり、
     似たような操作を追加したりする際、インスタンス操作で簡単に
    できず、ツールの再配置や変数を新たに作る面倒な作業が発生。
     特に面倒だったのが、前回の質問で「画面の初期化」に関してで。
    配置したツールや変数を全1つ1つ初期化しなければ・・・
     ここで、ユーザーコントロールでモジュール化する事で、クリアも再利用も
    再設計も簡単になると考えたのですが、以下の構造で問題がでました。

    FORM
     |---- UART(SerialPortとPCのPort(ON/OFF)、Send、Receive関数
     |---- I2C (アドレス値設定(数値チェック), PICのWrite、Readコマンド
     |    R/Wボタン
     |---- レジスタコントロール(レジスタ操作ボタン、TEXTBOXなど)
 
    @FORMにそれぞれのユーザーコントロールを配置しI2Cコントロール上のR/Wボタン
     を押したとき、I2Cコントロール内からPICコマンドを別のコントロール(UART)
     内にあるSend/Receive関数に渡すにはというところでつまづきました。
    Aレジスタコントロール上のボタンをおした時、別のコントロール内のI2Cの関数を
     使用し、さらに別のコントロール(UART)のsend/Receive関数へ渡すのをどのよ
     うにすればよいのかでつまづきました。

    通信系をモジュール化して利用するときの構成、考え方やAのようなあるユーザ
    コントロール上のボタン(イベント)で他のユーザーコントロールの操作を
    行うようにするにはどうするのか、これが正しいのか。
   (ちなみに今回レジスタ操作ボタンは500個くらいで非常に多い)

    アドバイスいただけないでしょうか
 

[ツリー表示へ]
タイトルRe: ユーザーコントロールの組合せ構成
記事No10145
投稿日: 2010/06/15(Tue) 07:13
投稿者オショウ
>     通信系をモジュール化して利用するときの構成、考え方やAのようなあるユーザ
>     コントロール上のボタン(イベント)で他のユーザーコントロールの操作を
>     行うようにするにはどうするのか、これが正しいのか。
>    (ちなみに今回レジスタ操作ボタンは500個くらいで非常に多い)
>
>     アドバイスいただけないでしょうか

  制御関係のソフト屋やっていますが・・・
  先の問いの方は中身確認せずに書いてます。

  思うに、通信機能とGUIを分離すれば?
  また、GUIと通信機能の間にデータ管理クラスを挟むとか・・・

  例えば、インターフェース社やコンテック社が販売しているボード用のソフトウェア
  は、ボードと通信するDLL(おそらくC言語で制作)と。それを呼び出すActiveX
  の2段構えになっていて、VB6等ならばそのActiveXをフォームに張る。と言う構造

  今回もそのような構造・方法は適しているように思いますが。

  ActiveX の部分が、ユーザーコントロールね!

以上。参考まで

[ツリー表示へ]
タイトルRe^2: ユーザーコントロールの組合せ構成
記事No10146
投稿日: 2010/06/16(Wed) 01:25
投稿者もすら
こんばんは アドバイス有難うございます。
>   例えば、インターフェース社やコンテック社が販売しているボード用のソフトウェア
>   は、ボードと通信するDLL(おそらくC言語で制作)と。それを呼び出すActiveX
>   の2段構えになっていて、VB6等ならばそのActiveXをフォームに張る。と言う構造

そうなんですが、実際 UA,UB,UCをユーザーコントロールとしてこれらをFORMに貼る。
 FORM
    |----UA(UART_W, UART_R、PORT取得TextBox、OPEN/CLOSEボタン)関数を用意
    |----UB( ボタンA(AAh/A3h/AAh/55hをUART送信), ボタンB(2Byte受信し、TextBoxへ表示)
    |----UC( ボタンD(00h-FFhをUART送信後、2Byte受信し、TextBoxに表示),
       ボタンE(256Byte受信 TextBoxへ表示)

このとき、AやDのボタンでUAのUART_Wに値をどのように渡し、送信させるかまた受信させるか
さらにDボタンのように 1つのボタンで送受信をさせるか。
FORM上に A,B,C,Dボタンを配置するならできそうですが、FORM上をシンプルにして
UB,UCを使いまわしして簡素化したいという思いがあるので。
(このコントロール系が数多くなるので、使いまわしをしたい)

こういう設計はNGなのですかね。
説明が下手ですみません。

[ツリー表示へ]
タイトルRe^3: ユーザーコントロールの組合せ構成
記事No10147
投稿日: 2010/06/16(Wed) 22:09
投稿者オショウ
> こういう設計はNGなのですかね。
> 説明が下手ですみません。

  プログラム方法には幾通りもありますので、うまくない方法かもしれません。
  .NETになってからそういう書き方してませんが、ActiveX(OCX)を作っていた頃
  は、コントロールから自分の親(Parent)が当然解りますので、親経由で、その
  親の子コントロールを探して・・・と言う動作はできました。

  .NETでもコントロールから見て、自分の親(この場合はForm)が解るはずなので
  できるんじゃ〜ないでしょうか。

  また、Form側で、各々の子コントロールに各々のインスタンスを渡してやれば
  相互呼び出しも可能かと。

以上。参考まで

[ツリー表示へ]
タイトルRe^4: ユーザーコントロールの組合せ構成
記事No10162
投稿日: 2010/06/18(Fri) 03:09
投稿者もすら
やはり親基点になりますよね。

私の作成コンセプトがまずいみたいですね。
もう少し考えなおしてみます。

ありがとうございました

[ツリー表示へ]