- PR -

コントロールで配置時に動作しないメソッドは?

投稿者投稿内容
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2002-10-31 16:22
お世話になります。

VB.NETで作成したコントロールをToolBoxよりForm上に配置した時、
コントロールがグラフィックで作られていても正常に動作しますが、
正常にデザイン時にコントロールを見ることが出来ます。
ファイル操作は出来ない見たいです。

しかし、実行時はファイル操作も出来るみたいです、そこ辺の資料を
ご存知の方がいれば教えてほしいのですが。

やりたい事は、コントロールの形状や動作をファイルに有るデータにより
変更させたいのですが。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-11-05 08:34
こんにちは。

>>やりたい事は、コントロールの形状や動作をファイルに有るデータにより
>>変更させたいのですが。

 コントロールをComponentから継承するときに、表示するメソッドをオーバーライドしますが、その中で「Component.DesignMode」プロパティーを見て、デザイン時か実行時かを判断します。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2002-11-05 17:55
Jittaさん情報有難う御座いました。

しかし初心者の為、色々説明を読んで見たのですがComponent.DesignModeのプロバテイ取得方法が分かりません。
ComponentModel.Component.の後にDesignModetが有りません。

現在は、Path.GetFileName(Reflection.Assembly.GetExecutingAssembly.Location)が
ビルトしたDLLファイルかどうかで判定しています。
これはデバックと実際の動作は区別できませんが、コントロールの画面デザイン時か
それ以外かを判別しています。
この画面デザイン時に保存データを読みたいのですが、無理なのですかね。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2002-11-06 12:59
こんにちは。

>>しかし初心者の為、色々説明を読んで見たのですが
>>Component.DesignModeのプロバテイ取得方法が分かりません。
>>ComponentModel.Component.の後にDesignModetが有りません。

 これはProtectedプロパティなので、外部からはアクセスできません。『コントロールをComponentから継承するときに、表示するメソッドをオーバーライド』して、オーバーライドしたメソッドで判別します。ところで、[Component]は、ButtonやTextBoxのことですけど、それはOKですよね?つまり、
If System.ComponentModel.Component.DesignMode Then
なんてやってもダメですよ。
If Me.DesignMode Then
とやります。
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2002-11-06 13:23
引用:

rvmxさんの書き込み (2002-10-31 16:22) より:

やりたい事は、コントロールの形状や動作をファイルに有るデータにより
変更させたいのですが。



アプリケーションの大元となるフォームのコンストラクタ、またはForm#Loadイベント時にファイルの読込みを行って各コントロールの内容を変更すれば良いだけなのでは?
ただし、変更した結果は実行時に始めてわかるということになります。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2002-11-06 14:48
済みません、説明が足りなくて。

ここで言っている事は、画面にToolBoxよりコントロールを貼り付けた時点の動作を
言っています。
よって、元のFormのコンストラクターはまだ動作していません。
勿論、デハック等で開始をすれば全て正常に動作します、コントロールのなかでファイルの読み書きも出来ます。
この時点では、ブーレクポイントも働きません。しかし、確実に動作はしています。
例えば、コントロールでアニメーション(GDI+)をさせた時、貼り付けただけで、アニメーションが動き始めます。
しかし、この状態ではファイルの読み書きは出来ないみたいです。
二天
ベテラン
会議室デビュー日: 2001/09/26
投稿数: 60
投稿日時: 2002-11-06 15:24
引用:

rvmxさんの書き込み (2002-11-06 14:48) より:

例えば、コントロールでアニメーション(GDI+)をさせた時、貼り付けただけで、アニメーションが動き始めます。
しかし、この状態ではファイルの読み書きは出来ないみたいです。



どうしてもデザイン時にファイルの読み書きをしてコンポーネントを変更したいのであれば、ヘルプで「カスタム デザイナ」をキーワードにして検索すればそれなりの情報が出てくるはずです。
ただし、すでに提供されているコンポーネントに関して使えるかどうかは知りません。
rvmx
大ベテラン
会議室デビュー日: 2002/09/26
投稿数: 184
お住まい・勤務地: 愛媛県
投稿日時: 2002-11-07 06:47
済みません、勘違いでした。

ファイルのPathを取得するのに、Application.Startuppathを使っていましたが
当然のことで、デザイン時とデバック時でPathが変わっていました。
よって、ファイルが読めませんでした。(Pathを固定で書くとうまく動作しました)
しかし、それでは配布などに不便な為、今回はあまり気が進みませんでしたが、
下記方法でレジストリーを使いました。
VB.NETの例
Dim Regdata As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\****\****", False)
まあ、当分はCLRもWindows環境でしか動かないと思いと思いますので、我慢します。
お騒がせしました。

スキルアップ/キャリアアップ(JOB@IT)