C#でいうところの using() {} のように 自動でIDisposable させる為の 構文はVB.NETにありますか?
enabled=false つーかラベルをどういじるの?
930 :
デフォルトの名無しさん :2005/11/08(火) 21:32:31
なんつうか、グレー表示にならんかな
931 :
デフォルトの名無しさん :2005/11/08(火) 21:33:09
>>929 えーと、これチェックしたらコレ使えるで、みたいな雰囲気を出しときたい
自分でコントロール作ればいいんだよ。 ラベルなりなんなり継承して。 そんなの三分もあれば出来るよマジで。
windows.formsなアプリで、起動直後に設定ファイルの有無の判断を行ない、 設定ファイルがある場合フォーム(A)を表示、なければ設定用のフォーム(B) を表示といったアプリケーションを作りたいと思っています。 この時、A.exeを起動して設定ファイルのチェックをし A.exe のフォームを 表示せずにB.DLLを表示させられなくてつまづいています。 A.exeのフォームが必ずでてしまいます。 A.exe を起動しつつ、A.exeのフォームを表示したくない場合には どのようにすべきでしょう?
モジュール作ってプログラムのプロパティのスタートアップの設定で そのモジュールにする で、そのモジュール(のmain)でApplication.Run(_form1)の前にForm2.Showdialogかな?
>>933 適当なクラスにMainって共有メソッドを作って
そいつをプロジェクトのスタートアップにすべし。
っていうか、こんなのドトネトのTips紹介してるサイトをちょっと巡れば
調べがつくでしょ。
937 :
933 :2005/11/08(火) 22:06:53
ありがとうございます。 自分で Main メソッドを作ればいけるんですね。 助かりました。
オプション画面を作る時、左側のツリー選択で右側の画面を切り替える場合は、新しいフォームのインスタンスを作って右側だけに呼び出すという形でいいのでしょうか? それとも、もっと一般的な形があるんでしょうか?
939 :
デフォルトの名無しさん :2005/11/09(水) 00:08:57
>>938 Formを普通のコントロールにして右にLoad
TopLevelだっけかな?
ナンノコチャw
941 :
デフォルトの名無しさん :2005/11/09(水) 00:15:10
TopLevel = FalseにしないとForm内にFormを追加できねぇ
942 :
904 :2005/11/09(水) 12:10:31
1つのソースで完結する(ビルドできる)ソースファイル2つを 1つの実行ファイルにまとめたい(ソース1でソース2に記述したクラスを 呼び出す?)のですがMSDN見てもやり方がまったくわかりません 実際こういうことは不可能でソース2を解体してソース1に組み込まないとだめなのでしょうか?
943 :
904 :2005/11/09(水) 14:10:58
>>942 は解決できました
ありがとうございました
944 :
デフォルトの名無しさん :2005/11/09(水) 16:21:38
今日VB.NET始めたばっかですが質問させてください テキストボックスに入力した値を変数xに入れて 別の変数nを10のx乗させて変数yに格納したいんですが Dim y As Double = n * E(x) これだとだめでした どうしたらいいんでしょうか^^;
べき乗するなら ^ を使う 10^2 は 10の2乗^^
E(x)って書くと、「xを引数として関数Eをコールする」か「配列Eのインデックスx番の値」って意味になっちゃう。 階乗演算子は ^ 10のx乗は 10^x 変数nを10のx乗するってのは意味がわからんけど、察するに以下のようにすればいいと思う。 Dim y As Double = n * (10^x)
947 :
944 :2005/11/09(水) 17:44:30
948 :
デフォルトの名無しさん :2005/11/09(水) 19:56:38
ファイル→新規作成→プロジェクト→新しいプロジェクト→OK とすると「オブジェクトでサポートされていないプロパティまたはメソッドです。」 と出て、新しく始める事ができません。 どうか、解決策を教えてください。
開発環境を入れ直せ。
950 :
デフォルトの名無しさん :2005/11/09(水) 20:37:23
>>949 ありがとうございます。さっそく、やってみます。
>>938 PanelかUserControlを派生させて、そこにそれぞれの画面を作る。
Formにそれぞれを重なるように配置して、表示するのを変えるにはそのコントロールをBringToFrontする。
952 :
948 :2005/11/09(水) 21:23:14
探したのですが、どこで開発環境の変更をするかわかりません。 誰か、教えてください。
変更って何?
954 :
948 :2005/11/09(水) 21:28:43
間違えました。入れ直す、でした。
vb.net で作成した DLL(Windows.Forms) を、参照設定する事なく、 インスタンスの生成を行ないたいのですが(フォームの表示をさせたい) 実現させる方法はありますか?
System.Reflection.Assembly.LoadFromでアセンブリをロードして、 そのAssemblyでGetTypeして型情報を取得、 System.Activator.CreateInstanceでその型のインスタンスを作成。
ありがとうございます。 GetType する時にクラス名がわかっていないといけないようですが、 クラス名がわからなくてもアセンブリのインスタンスを生成する なんて事はできないでしょうか?
型名も分からないのにインスタンスを作るってのもなかなか有り得ないと思うが……。 Assembly.GetTypesでType配列を取得して、それぞれBaseTypeを遡っていって調べてみるとか。 > アセンブリのインスタンスを生成する これは意味不明だ。
>>952 VisualStudioをアンインストールして
もう一度インストールする
あるDBのマスタテーブルからデータを読み込む(書き込む機能は不要)クラスを作るとした時。 このデータの読み込むタイミングは以下のどちらが一般的でしょうか? ・コンストラクタでマスタのCodeを渡して読み込む ・コンストラクタでは何もせず、DataRead(Code)のようなメソッドを持ちそこで読み込む 上司に「コンストラクタは初期化なんだから何もせず、読み込むメソッドを持った方がいい」と指摘をうけたのですがどうなんでしょう。 なんか「初期化」の意味を取り違えてるような気がしないでもないのですが・・・ 作る側としては読み込むメソッドを持つと、使う側で呼び忘れてエラーの元になってしまうと思ったので コンストラクタで読み込んでしまうような作り方をしていました。
一般的にはその上司の言が正しい。 特に処理が重くなる場合はコンストラクタに実装するのは避けるべき。
ケースバイケースだろうけど俺は
>>960 の設計の方をむしろ推すね。
要するに読み込みを非同期にすりゃいいだけでしょ?
客から注文もらってから問屋に注文だすような店なら最初からイラネ。
コンストラクタではまず重い処理はやるべきではない。
次に、どっちにも対応すればいいんだから・・・。
上司コンストラクタ − インスタンス生成だけ
>>960 コンストラクタ − 生成して検索関数呼ぶ
検索ぱぶりっく関数 − 検索実行
面子潰さず、自分の意見通しつつ。
textboxコントロールがフォーカスを受け取った時にコントロールの 背景色を変えようと思っているのですが、 フォーカスを受け取ったイベントとして、 Enter を使うべきか、GotFocus を使うべきか、どちらを 使うべきでしょうか?
Enterを使うべきだとあちこちに書かれてると思うんだが。 GotFocus使ったらフォームをアクティブにしたときも発生したりするぞ。
VB.NETのIF文で最初の条件がFALSEの場合2番目以降の比較は行なわないように 記述する方法はありますか? dim x as boolean = false dim y as boolean = true if(x and y = nothing) then の場合、xがFALSEなのでyの値が何であっても条件に該当しないので このように最初の条件がFALSEになった場合、それ以降の条件判断を して欲しくないのですが。IF文を2つにわけるしかないでしょうか? よろしくお願いします。
AndAlso ちょっとはリファレンス見ようぜ
968 :
960 :2005/11/10(木) 17:48:52
>>961 >>962 >>963 レス感謝です。
「コンストラクタには重い処理を書くべきではない」ってのを今日まで知りませんでした。
1万件のレコードを、960に書いた2通りの方法でそれぞれ試してみましたが時間的な差は無かったです。
なにか実感できるようなサンプルってありますか?
厳密にはデバッグできなくなるって理由でないの?>コンストラクタに書かない
>>968 >「コンストラクタには重い処理を書くべきではない」ってのを今日まで知りませんでした
単に961の俺様ルールだと思うよそれ。
だってそんなルールに何の合理性のないじゃん。
すくなくとも無条件にいつでも合理的とはいえないよ。
というか、重いなら単に非同期で処理すればいいだけの話で
どうせ必須の引数なら最初から受け取っておく、必須の処理なら最初からやっておく
これが普通の考え方でしょう。
もちろん「特に理由がない限りにおいては」ね。
つ コンストラクタの使用方法のガイドライン
Cで作った xxx.dll 中の typedef struct { int a; int b[50]; } X; int test(X *z) {} な関数を、VBで、 Structure X Dim a As Integer Dim b(50) As Integer End Structure Declare Function test Lib "xxx.dll" (ByRef z As X) As Integer として使おうとしたのですが、VBでは構造体に固定長配列が使えないらしく、 エラーが出てしまいます。 構造体の中では b() だけ宣言して後でReDim b(50) しても、 アドレス的に a に連続しないのか、test を呼び出したときに落ちます。 どうしたらいいでしょうか。
C#.NETでは書けて、VB.NETで書けないものってありますか?
>>972 Imports System.Runtime.InteropServices 'コードの先頭で宣言
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=50)> _
Dim b() As Integer
>>973 VB2005で可能になるけど、カスタムイベント、演算子のオーバーロード、XMLドキュメントあたり。
つうか、コンストラクタで非同期処理なんてしてほしくないよな。
977 :
デフォルトの名無しさん :
2005/11/11(金) 15:05:20 質問です。 データグリッドで、1つのセルに文字を打ったとき、 打たれた文字を判別することはできますか? データベースと連携させていて、aと打たれたらaから始まるコード(商品コードなど)を そのセルの部分でコンボボックスで表示させたいのですが。