したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

プロパティの使い方について

1こじら:2010/04/01(木) 01:27:43
度々すみません。
今回はプロパティーというものを使ってみようと勉強していますが、
いまいちイメージがつかめないので、以下のような使い方として
正しいか教えていただけたらと思い、書かせて頂きました。

まず、UART等の通信を用いてLSIのレジスタ操作を行おうとています。
様々な動作をさせるのに同じレジスタを何度も使う事があるので
レジスタをグローバル変数にしようと最初は考えましたが、
いまいち使いにくく、プロパティを使う方法でいけるようなアドバイス
を頂いたので検討することにしました。
bit7 6 5 4 3, 2, 1, 0
Address 00 AAA (Init 00h) (A7, AA, AB, AC, AD[3:0]
Address 01 BBB (Init 00h) (BB, BC, BG, BH, BI, BK, BL, BM)
Address 02 CCC (Init 11h) ****
Address 03 DDD (Init C7h) ****

等とレジスタがあった際、

まず、Class RegBit ファイルに Bitの定義
Private _A7 as string
'---- Reg AAA (bit7) -------
 Public Property A7() As String
Get
Return _A7
End Get
Set(ByVal Value As String)
_A7 = Value
End Set
End Property

Private _AA as string
'---- Reg AAA (bit6) -------
 Public Property AA() As String
Get
Return _AA
End Get
Set(ByVal Value As String)
_AA = Value
End Set
End Property

  ・
Private _AD as string
'---- Reg AAA (bit3:0) -------
 Public Property AD() As String
Get
Return _AD
End Get
Set(ByVal Value As String)
_AD = Value
End Set
End Property

とし、
Byte単位のアクセス関数を作成
上記 00アドレスのByteレジスタ定義
Private _AAA as string

Public Property AAA( ) As String
Get
Dim List(7) as String
List(7) = _A7
List(6) = _AA
List(5) = _AB
List(4) = _AC
List(3) = _AD
Return List
End Get
Set(ByVal value As String)
_AAA = value
End Set



などとして

上位ファイルで 
   ・
   ・
 click・・・イベント 

  Dim regAAA as New RegBit

txtAAA.text = regAAA.AA (テキストボックスにAAーBitを表示)

などと レジスタ(Byte単位とBit単位のプロパティを作成し、
インスタンス化して使えばよいのでしょうか?
このとき、インスタンスをグローバル化でしておけば、そのファイル
内で呼び出し、書込みが可能で、どこでも値が反映、使用できる
と思ったのですが、違いますでしょうか。

また、 同じプロパティファイルを異なるファイルで参照したとき
プロパティーファイルを使って、異なるファイル間で値の共有なんか
できたりしますでしょうか。
 もしできないなら、異なるファイル間でデータを共有するには
データベースみたいなものを使用しまければできないのでしょうか

あまりにもラフな例題で申し訳ありませんが、宜しくお願いします。

それとも、使い方間違っていますでしょうか。

2igoten:2010/04/01(木) 14:58:20
フィールドの変数をPrivateで隠蔽してProperityで設定、取得
するやり方は.netの推奨される正式な方法で良い方法で
有ると思います。
インスタンスのスコープですが同じクラスのインスタンス内であれば
グローバルにしておも良いと思います。
フォームの置かれたButtonとかTextBoxと言ったような感じですね。
ただしおっしゃっているファイルと言う意味がちょっとわかりません。
異なるファイル間のデータの共有とはどのような意味でしょうか?

3こじら:2010/04/02(金) 01:02:52
すみません。
簡単に言うと、FORM1とFORM2、...と複数FORMがあって、
Main(起動時)はForm1で、そこでグローバル宣言として
プロパティーのクラスをインスタンス化すると、
 
FORM1であるボタンを押すとFORM2が起動、FORM2のある
ボタンをまた押すとFORM3が起動するとしたとき、
FORM2、FORM3ではFORM1のそのインスタンスは使えず、
プロパティーの値が使えない。
 それぞれのFORM(FORM2、3)でそれぞれプロパティー
クラスを再度インスタンス化すると、それはFORM1とは
新規に別物として作成される(と思ってます)から、FORM1の
それとはリンクがとれていない。従ってFORM2,3で変更した値
はFORM1には反映されていないと思われます。
 できたら、値を共有したいと考えているのですが、
なにか共有できる方法はないでしょうか。
 (FORM1に256個のプロパティ(レジスタ)があり、その256個の
値をFORM2,FORM3でも同様に使用したいと考えてます)

ちなみに ファイルと表現していたのは、FORMを新たに作成したら
FORMクラスが統合環境の窓に追加され、この新たにできたFORMの
ファイルのつもりで言っていました。

これでわかって頂けるかも不安ですが、アドバイスお願いします

4igoten:2010/04/02(金) 13:35:29
次のコードを試してみて下さい。
Form1上にはボタン一つとテキストボックス1つを置きます。
Form2上にはボタンを一つ置きます。
Form1でForm2を作成して、Form2上のボタンを押すと
Fomm1上のTextBoxに文字を書き込みます。
Public Class Form1
Dim F2 As Form2
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
F2 = New Form2(Me)
F2.Visible = True
End Sub
End Class

Public Class Form2
Private F1 As Form1
'フォーム起動時に親から呼び出される
Public Sub New(ByVal _F1 As Form1)
InitializeComponent() 'これは必ず必要です
F1 = _F1
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
F1.TextBox1.Text = "Hello"
End Sub
End Class

5こじら:2010/04/06(火) 22:14:24
返事おそくなりまたもやすみません。
教えて頂いた方法でできました。有難うございました。

これに関して教えていただきたいのですが、
FORM1型の変数F1をインスタンス化し、
F1.TextBox1.Text = "Hello"
としてデータアクセスするのと
インスタンス化せず、
FORM1.TextBox1.Text="Hello"とするのと
違いがあるのでしょうか?

また
Class Form1
public Common as New clsAA

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles Button1.Click
Common.A7 = "12345"
End Sub
end Class

Public Class clsAA
Private _A7 As String
Public Property A7() As String
Get
Return _A7
End Get
Set(ByVal value As String)
_A7 = value
End Set
End Property
end Class

としたとき
Class Form2
  
  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)_
            Handles Button1.Click
    TextBox1.text=Form1.Common.A7
End Sub
End Class

としたときなんですが、 変数commonみたいな使い方
って普通なのでしょうか。
 したいことは データベースのように、どのような
Formや、関数もデータアクセスは一箇所、共通にしたい
と考えていて。
 アドバイス宜しくお願いいたします

6igoten:2010/04/07(水) 16:52:08
その件に関してはVB.NETのバージョンによります。
>http://www.geocities.jp/hatanero/form1andform2-2.html
を見て下さい。
VB2005以降で有ればどちらでもいいのです。
ただし私はインスタンスを明確に作成する方法を推奨します。<br>
<br>
クラスのフィールドを定義して、プロパティでアクセスする方法ですね、
普通だと思います。

7こじら:2010/04/08(木) 01:36:57
こんばんわ
毎回有難うございます。

私もインスタンス作成で行うことにしました。
その方が、FORM2とかで固定してしまうより、
汎用的に使いまわしが用意かなって気がしたので。

今まで多くのこと教えて頂き、今まさにUARTで機器と
通信できるTOOLらしいものができあがりつつあります。
 今は最後の最後で、Toolで通信した後機器をToolの
コマンドでリセットかけたら機器はリセットされるの
ですが、Toolの画面の値が初期化されないところで
苦戦してます。
 最初の設計仕様が悪かったようです。

ありがとうございました。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板