- - PR -
コントロールで配置時に動作しないメソッドは?
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-10-31 16:22
お世話になります。
VB.NETで作成したコントロールをToolBoxよりForm上に配置した時、 コントロールがグラフィックで作られていても正常に動作しますが、 正常にデザイン時にコントロールを見ることが出来ます。 ファイル操作は出来ない見たいです。 しかし、実行時はファイル操作も出来るみたいです、そこ辺の資料を ご存知の方がいれば教えてほしいのですが。 やりたい事は、コントロールの形状や動作をファイルに有るデータにより 変更させたいのですが。 | ||||
|
投稿日時: 2002-11-05 08:34
こんにちは。
>>やりたい事は、コントロールの形状や動作をファイルに有るデータにより >>変更させたいのですが。 コントロールをComponentから継承するときに、表示するメソッドをオーバーライドしますが、その中で「Component.DesignMode」プロパティーを見て、デザイン時か実行時かを判断します。 | ||||
|
投稿日時: 2002-11-05 17:55
Jittaさん情報有難う御座いました。
しかし初心者の為、色々説明を読んで見たのですがComponent.DesignModeのプロバテイ取得方法が分かりません。 ComponentModel.Component.の後にDesignModetが有りません。 現在は、Path.GetFileName(Reflection.Assembly.GetExecutingAssembly.Location)が ビルトしたDLLファイルかどうかで判定しています。 これはデバックと実際の動作は区別できませんが、コントロールの画面デザイン時か それ以外かを判別しています。 この画面デザイン時に保存データを読みたいのですが、無理なのですかね。 | ||||
|
投稿日時: 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 とやります。 | ||||
|
投稿日時: 2002-11-06 13:23
アプリケーションの大元となるフォームのコンストラクタ、またはForm#Loadイベント時にファイルの読込みを行って各コントロールの内容を変更すれば良いだけなのでは? ただし、変更した結果は実行時に始めてわかるということになります。 | ||||
|
投稿日時: 2002-11-06 14:48
済みません、説明が足りなくて。
ここで言っている事は、画面にToolBoxよりコントロールを貼り付けた時点の動作を 言っています。 よって、元のFormのコンストラクターはまだ動作していません。 勿論、デハック等で開始をすれば全て正常に動作します、コントロールのなかでファイルの読み書きも出来ます。 この時点では、ブーレクポイントも働きません。しかし、確実に動作はしています。 例えば、コントロールでアニメーション(GDI+)をさせた時、貼り付けただけで、アニメーションが動き始めます。 しかし、この状態ではファイルの読み書きは出来ないみたいです。 | ||||
|
投稿日時: 2002-11-06 15:24
どうしてもデザイン時にファイルの読み書きをしてコンポーネントを変更したいのであれば、ヘルプで「カスタム デザイナ」をキーワードにして検索すればそれなりの情報が出てくるはずです。 ただし、すでに提供されているコンポーネントに関して使えるかどうかは知りません。 | ||||
|
投稿日時: 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環境でしか動かないと思いと思いますので、我慢します。 お騒がせしました。 |