1 名前:最凶VB厨房 mailto:sage [2006/08/11(金) 19:40:44 ] [前スレ]VB.NET質問スレ (Part16) pc8.2ch.net/test/read.cgi/tech/1149432480/
116 名前:108 [2006/08/22(火) 15:56:59 ] >109-112 1、Button1でタイマースタート。 Label2,Label3に乱数表示開始。 2、Button2でタイマーストップ。Label2,Label3に表示されている乱数をa,bに数値として代入する。 3、a,bが同じ数であった場合のみ、再度、自動的に選び直させてLabel2,Label3に表示させる。 明らかに滅茶苦茶かもしれませんが、以下を試しても無理でした。 Do Timer1.Enabled = True If Timer1.Enabled = True Then Timer1.Enabled = False End If Loop Until a <> b a,bの値が変わってないと仰るのも、どうしてであるのかよくわからないので、是非ともご教授下さい。 そして、スレ違いのようですので、然るべきスレへのご誘導も宜しくお願いします…
117 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 16:17:25 ] >>116 Rnd()のシードが変わらないからずっと同じ値が帰って来てるんじゃないの?
118 名前:デフォルトの名無しさん [2006/08/22(火) 16:22:34 ] >>116 ここでいい。 ここがお前様を立派な(?)プログラマにしてくれる(はず)。 ・・・ところで試さずに聞くけど乱数ってちゃんと違うものになるか? シード値とか無いと同じタイミングで作られた乱数って同じになるような無いような・・・。 まぁお前様よりドヘタレな俺の与太だから忘れてくれ。
119 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 16:29:09 ] > Timer1.Enabled = True > If Timer1.Enabled = True Then んと
120 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 16:52:46 ] >>116 初めにそれを書けばすぐ解決してたぞ Private Sub Button1_Click() Timer1.Enabled = True End Sub Private Sub Button2_Click() If Label1.Text <> Label2.Text Then Timer1.Enabled = False End If End Sub Private Sub Timer1_Tick() Label1.Text = CInt(Rnd() * 52) Label2.Text = CInt(Rnd() * 52) End Sub
121 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 17:00:41 ] > 3、a,bが同じ数であった場合のみ、再度、自動的に選び直させてLabel2,Label3に表示させる。 は、そういう意味なの?
122 名前:113 mailto:sage [2006/08/22(火) 17:14:49 ] 質問が意味不明ですか? それともアホすぎる質問なのかな・・・
123 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 17:16:51 ] >>113 は乱数君と同一人物?
124 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 17:19:25 ] >>122 素直に こうしとけば? do do loop until a=b loop until a=b
125 名前:113 mailto:sage [2006/08/22(火) 17:50:58 ] なんだか自分でもわけわからなくなってきたので出直します。 >>123 いや今日から始めたので違います。
126 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 18:08:58 ] >>121 確かにそこを正確に説明しないと伝わらない
127 名前:116 [2006/08/22(火) 18:35:21 ] >117 是非に、詳しい具体策をお教え下さい! >120 コードを書き直して、Int→CIntにもしましたが、同じ数が表示されて思うようにはなりませんでした… 3、a,bが同じ数であった場合のみ、再度、自動的に選び直させてLabel2,Label3に表示させる。 というのは、単に、結果としてLabel2とLabel3に表示されている数が異なれば良いんです。助けてください…
128 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 19:39:21 ] >>127 >>101 では駄目なの?
129 名前:116 [2006/08/22(火) 19:45:42 ] >118 忘れてました… ちゃんと違う値になる事の方が多いですが、デバックモードはコンピュータがあらゆる場合を試そうと判断しているのか、数回繰り返しているだけで2数が一致したりします(一致するのは1/52の確率です)。
130 名前:デフォルトの名無しさん [2006/08/22(火) 19:52:29 ] 「はぁ〜 プップクプ〜ッ ♪」 ∧_∧ ∧_∧ ∧_∧ (・ ε ・) (・ ε ・) (・ ε ・) ⊂ つ ⊂ つ ⊂ つ (_)`J (_)`J (_)`J 「やれ プップクプ〜 ♪」 ∧_∧ .∧_∧ ∧_∧ ∩ ・ε・ ∩ ∩ ・ε・ ∩ ∩ ・ε・∩ 〉 ノ 〉 ノ 〉 ノ し´ (_) し´ (_) し´ (_) 「 アキヒロ〜音頭で プップクプーの プ♪」 ∧_∧ ∧_∧ ∧_∧ (・ ε ・) (・ ε ・) (・ ε ・) ⊂ つ ⊂ つ ⊂ つ (_)`J (_)`J (_)`J
131 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 20:33:37 ] >>116 >>a,bの値が変わってないと仰るのも、どうしてであるのか aとbは値型でしょ? 参照型ではないから >>Do >> Label2.Text = Int((52 * Rnd()) + 1) >> Label3.Text = Int((52 * Rnd()) + 1) >>Loop Until a <> b これでは、Label2.TextとLabel3.Textの値は変わるけどaとbの値に変動はないんだから、永遠ループに入ると思うんだが。
132 名前:116,127 [2006/08/22(火) 21:11:22 ] >128 >101でもダメでした… >131 Do Label2.Text = Int((52 * Rnd()) + 1) Label3.Text = Int((52 * Rnd()) + 1) a=Val(Label2.Text) b=Val(Label3.Text) Loop Until a <> b もしくは Do Label2.Text = Int((52 * Rnd()) + 1) Label3.Text = Int((52 * Rnd()) + 1) a=Str(Label2.Text) b=Str(Label3.Text) Loop Until a <> b としてみます。 ありがとうございます!
133 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 21:27:46 ] それよりも、何でラベルのテキストを変更してからそれを変数に取ろうとするの? 普通変数に受けてそれをコントロールに落とそうとしない? オレはコントロールはあくまで人間とのインターフェースだと思ってるけどな
134 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 21:36:29 ] それよりも彼の場合まずロジックを考えられるようになる方が先決。
135 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 21:48:05 ] ちょっとした疑問なんだが、 >>Do >>Label2.Text = Int((52 * Rnd()) + 1) >>Label3.Text = Int((52 * Rnd()) + 1) >>a=Str(Label2.Text) >>b=Str(Label3.Text) >>Loop Until a <> b タイマーで乱数まわす意味あるのか? シード設定もしてないようだし。
136 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 22:07:42 ] そもそも>>120 でやっても >>127 > コードを書き直して、Int→CIntにもしましたが、同じ数が表示されて思うようにはなりませんでした… と、「同じ数が表示された」ってことなんだから、何か根本的に間違ってる/理解していないと思う。
137 名前:89 mailto:sage [2006/08/22(火) 22:26:52 ] >>120 button2押しても止まらないときがあるような・・・ >>135 スロットっぽくしたいんじゃないの? ちなみに俺が言いたかったのは、Timer1_Tickで Do a = CInt((52 * Rnd()) + 1) b = CInt((52 * Rnd()) + 1) Loop Until a <> b Label1.Text = a Label2.Text = b まぁ、選びなおしは停止するタイミングでやった方がいいかもね
138 名前:デフォルトの名無しさん mailto:sage [2006/08/22(火) 22:54:52 ] >>137 「同じだったら止まらない」仕様通りでは?
139 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 00:04:39 ] なあ、俺の思い違いだったらいいんだが。 スロットって回転してる間は、別に表示してる値の評価なんてしなく てもいいんでないか? ストップボタンを押した時に、初めて表示さ れてる値を比べて、当たり外れを付けるもんだろ?
140 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 00:06:05 ] 誰が比較して当たり外れを付けろと
141 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 00:17:12 ] 例え確立やタイミング的に大丈夫でもTimer内でLoopは嫌だな。俺は。 それはさておき、 > まぁ、選びなおしは停止するタイミングでやった方がいいかもね を考えてと、質問者のやり方に近い作りにすると、たったこんだけ。効率とか他の仕様とかコーディングポリシーとかは無視して。 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick hoge() End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.Timer1.Enabled = True End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.Timer1.Enabled = False Do Until Me.Label1.Text <> Me.Label2.Text hoge() Loop End Sub Private Sub hoge() Me.Label1.Text = CInt((52 * Rnd()) - 1) Me.Label2.Text = CInt((52 * Rnd()) - 1) End Sub 要は質問の仕方の悪さで長引いただけだと。
142 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 00:52:40 ] ここは 値型と参照型 値の代入と参照の代入 の区別がつかないヒドイ言語ですね どうしてこのような言語仕様になっているか エロイ人教えてください。
143 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 01:06:29 ] 何処の受け売り?
144 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 01:22:48 ] >>142 またC++の悪口か
145 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 01:36:58 ] ところでスロットを作りたいのでなければ何を作りたかったのだろうか
146 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 08:30:41 ] > スロットを作りたいのでなければ 同じ数値を排除したいって言ってるので最初っからスロットなんて考えられないのに。
147 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 09:41:41 ] >>84 でスロットという言葉が出ているんで仕方ないんでないか?
148 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 10:23:10 ] 絶対に当たらないスロットを作って稼ごうとしたのでは
149 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 10:59:17 ] Datagridviewをコード内で作成したDataTableにバインドして利用しようとしています。 データを表示するまでは可能なのですが、DataTableにデータを追加してもDatagridviewが更新されないで 表示が固まってしまいます。再描画?か何かが必要なのだと想像するのですが、分かりませんでした。 InvokeとかBackgroundworksなどを使うと良いとはあったのですが、理解できませんでした。 どのように処理すれば良いのでしょうか?よろしくお願いします。 (こんな感じのコード) Dim ds as Dataset Dim dt as Datatable Dim bind1 As BindingSource Sub form1_load() Handles MyBase.Load ds.Tables.Add(dt) dt.Columns.Add("column1", GetType(String)) (以下略) bind1.DataSource = dt Datagridview1.DataSource = bind1 End Sub Sub test() Dim Row as DataRow Row = dt.NewRow Row(0) = "a" Row(1) = "b" dt.Rows.Add(Row) End Sub
150 名前:デフォルトの名無しさん [2006/08/23(水) 11:50:22 ] テキストファイル読み込みは textfieldparserとstreamreaderどっちを使ったらいいの?
151 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 12:35:59 ] 読んで字の如く
152 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 12:55:37 ] >>150 中身による。
153 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 16:40:42 ] >>151-152 textfieldparser テキストの分野の解析? streamreader 流れながら読む? csvとかにはtextfieldparserで 通常はstreamreaderってことですかね
154 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 17:00:05 ] >>153 >>2 MSDN msdn2.microsoft.com/ja-jp/library/ms229284.aspx textfieldparser >構造化テキスト ファイルの解析に使用するメソッドとプロパティを提供します。 streamreader >特定のエンコーディングのバイト ストリームを読み込む TextReader を実装します。 とりあえず、読んだ方がよいかと。
155 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 21:38:07 ] Do-Loopキモイ。
156 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 21:42:09 ] 乗り遅れ突っ込みもキモイ
157 名前:デフォルトの名無しさん mailto:sage [2006/08/23(水) 23:33:27 ] うそつきはDoLoopのはじまり
158 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 08:10:35 ] >>154 おお、ありがとう。
159 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 09:19:11 ] 最近はMSDNすら見ないのか・・・・・
160 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 11:32:50 ] ここの議論はいつも Do Do めぐり。
161 名前:デフォルトの名無しさん [2006/08/24(木) 17:51:13 ] homepage1.nifty.com/rucio/main/dotnet/shokyu/index_sta.htm ここ見ながら勉強してるんだけど、 graphicsで描写したものを消すにはどうしたらいいの? 一度最小化するとかってのは無しで・・・。
162 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 17:56:05 ] 無限ループしたらパソコン壊れますか?
163 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 18:41:08 ] デルノートなら爆発もありうるな
164 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 19:05:46 ] >>161 Invalidate
165 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 21:06:59 ] VB2005の解説サイトで良いところありませんか? Cなんかは簡単に見つかりましたが、 VBではテンプレみてもどれがいいのか、 何を書いているのかほとんどわかりません。 >>161 みたいなものがいいのですが、 あまり体系立った説明がされていない (後回し後回しで要点がつかみ難い) のでわかりにくいです。 具体例を用いてあると尚良いのですがどこかありませんか。
166 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 21:23:36 ] >>165 >>3-5
167 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 21:49:23 ] テンプレみてもどれがいいのか 何が書いてあるのかほとんどわかりません… ある程度基本が身に付いた人であれば 知りたい情報はどこにあるか見当もつけられると思うのですが 現時点では>>3-5 のサイト一通り巡回してもわけがわかりませんでした。 あと、関係ないのも多数混じっていませんか?
168 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 21:55:17 ] >>164 さんくす。でも具体的な使い方はどうやればいいの? MSDNで検索したけどワカラン たとえば ボタン1をクリックしたらピクチャーボックス1に黒い円が浮かび上がって ボタン2をクリックしたらその円が消えるようなプログラムは どうする?
169 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 22:11:53 ] >>168 背景色で塗りつぶしたらよかんべえ
170 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 22:13:46 ] >>167 「あまり体系立った説明がされていない」なんてえらそうなこと言う 前に、まずどこでもいいからひとつでも全部通して読むべきだよ。い まの「どこがわからないのかわからない」状態から脱したいならね。
171 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 22:16:16 ] だるまの目を塗りつぶしたいんだけど、 背景色で塗りつぶすとだるまも消えちゃう・・・。 だるまも再表示するようにしても、うまくいかないのよー
172 名前:161・168・171 mailto:sage [2006/08/24(木) 22:19:12 ] ↑は>>169 宛です
173 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 22:20:00 ] >>167 体系立った説明が欲しいなら、仕様書。これ。 msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vbls7/html/vbSpecStart.asp >>171 逆に考えるんだ 描画したものを消すと考えるんじゃない 描画したものの上から黒眼/白眼を書けばいいと考えるんだ
174 名前:デフォルトの名無しさん mailto:sage [2006/08/24(木) 22:36:10 ] >>173 ありがと。考え方は理解できた。 でもだるまの目の部分よりも、塗りつぶす黒目が大きい場合はどうしたらいいの?
175 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 01:17:25 ] buttonの名前をいじってて cancelbuttonにしたらエラーが多発してデザイン画面が出てこなくなった・・・。 いったん他の名前に変えて難を逃れたんだけど、 もともとのデザイン画面がでてこない・・・。 表示タブのデザインっていうの選んだらデザインタブでてくるよね? 再起動してもでてくるよね? ・・・出てこない。 ・・・オワタ?
176 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 02:01:48 ] 自分でデザイン部分のソース修正。
177 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 02:11:22 ] >>175 CancelButtonとかAcceptButtonは地雷。つかプロパティ名とかぶるのでそういうことになるよ。 フォーム名.Designer.vbをごりごり修正。
178 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 08:38:42 ] FlexGridで処理後に次の行特定の列を選択した状態にしたいのですが、 選択するとそこがboolreanで勝手にチェックがはいってしまいます。 FlexGrid.cols(4).type=boolrean FlexGrid.select(3,4) 初歩的だと思いますが何か設定があるのでしょうか?
179 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 09:18:23 ] boolrean
180 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 12:10:23 ] DataGridViewの中にコンボボックスをいれたいんだけどどうすんの?
181 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 12:33:00 ] いれればいいじゃん
182 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 14:45:26 ] それがわからんのです(´;ω;`)ブワッ
183 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 14:54:09 ] DataGridViewの、コンボボックスにしたい列をコンボボックスにしてあげればいいと思うよ。
184 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 15:03:14 ] そのままやんけ!って思ったけどそのままやったんですね。 できました。どうもありがとうございます。<(_ _)>
185 名前:178 mailto:sage [2006/08/25(金) 18:36:20 ] 自分で解決できました。 ただ単にarrolweding=falseにするだけでした。
186 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 20:29:54 ] arrolweding
187 名前:チョ初心者 mailto:sage [2006/08/25(金) 21:02:24 ] クラスにテキストボックスそのものを渡して キーコードに応じて処理をしてテキストボックスの中身を変えて戻す そうゆうのって問題なしですか?
188 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 21:35:09 ] それにキモさを覚えなければ問題ないが、 それにキモさを覚えないのには問題があるな
189 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 21:42:37 ] >>187 そうしたい理由や手順をフローにして書いてみそ。 もっと洗練されたやり方があるかもしれない。
190 名前:デフォルトの名無しさん [2006/08/25(金) 22:46:28 ] 助けてください。いろいろ調べたのですが、うまく出来ません。 参照の循環する依存関係で苦しんでます。 同じソリューションの別プロジェクトの画面遷移をしたいです。 スタートアップのA画面からB画面へ、そしてB画面からA画面へ 戻る遷移になります。つまり、相互遷移です。 B画面が開いたら、A画面は閉じるのが条件です。 で、双方のプロジェクトに参照設定を試みました。 下記の図です。 ソーリューション | |-プロジェクトA 参照設定(FormB.dll) FormA |-プロジェクトB 参照設定(FormA.dll) FormB 当然ながら、循環参照でエラーとなります。 基礎的な事でしょうが、 まだ、開発経験が浅く、どう調べていいかがわかりません。 ヒントなりもといただきたいと考えております。 よろしくお願いします。
191 名前:デフォルトの名無しさん mailto:sage [2006/08/25(金) 22:53:26 ] 流れを管理するプロジェクト C を作って、C が AB を参照。 AB は他は気にせず自分の事だけやればよい。
192 名前:190です。 [2006/08/25(金) 22:54:28 ] 書き残しました。 共通部分をクラスライブラリとして括り出して、それを参照する とういう方法論までは、わかったのですが、 そこから先がわかりません。 下の図のように、新プロジェクトを作成し、 そこで、イスタンス化を計ったのですが、 やはり、循環参照でエラーになります。 ソーリューション | |-新プロジェクト 参照設定(FormA.dll,FormB.dll) classA | |-プロジェクトA 参照設定(classA.dll) FormA |-プロジェクトB 参照設定(classA.dll) FormB
193 名前:デフォルトの名無しさん [2006/08/26(土) 01:00:09 ] っていうか、プロジェクトとか、クラスライブラリを参照するってことの意味を 何か勘違いしているような。。 いやそれ以前にクラスって概念からしてわかってないんじゃねえの? フォームなんてハリボテに過ぎないもの、推移とかいったって所詮 表示したり消したりするだけのことなのに、いちいち画面ごとにプロジェクト分ける気か?
194 名前:187 mailto:sage [2006/08/26(土) 03:12:35 ] >>189 遅くなりましたが… 理由は入力チェックをクラスで纏めたい為です。 ・エスケープなら指定オブジェクトへフォーカスを移す。 ・リターンなら種類によってコードチェック 次のオブジェクトにフォーカスを移す。 ・入力ミスならエラー表示をする。 と、そんな感じにしたいのですが フォーカス指定と入力テキストボックスで3つもオブジェクトを渡すのってマズいのかな…と 先生方、もっとカコイイやり方があれば是非ご教授下さい 始めたばかりで、クラスとかもよく分かってないですが…(つД`)
195 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 03:27:21 ] >>194 単にチェック&エラー表示したいだけならErrorProviderがお手軽だけど。
196 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 03:57:15 ] 過去に既出であったり、王道があれば教えてください。 WMPのように、多重起動せず受け取ったコマンドラインを すでに起動している同じソフトに送信するのに ・APIのSendMessage GetMessege ・APIのSetProp GetProp ・127.0.0.1でSOCKET ・変数のポインタをどっかのファイルに書き込むorレジストリでそこを読んで 改変 ・特定のファイルorレジストリでそこを監視 ・.net新規のものでもっといいのあるよ〜 受け渡しは前述の通り、文字列だけです。 使用バージョンは VB.net 2005です。 これらの中で”一般的にはこれ”等あればご教授お願いします。
197 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 05:27:20 ] >>196 プロジェクト−プロパティ−アプリケーション「単一インスタンスのアプリケーションを作成する」。VB専用。 名前つきMutex(System.Threading.Mutex)を使う。C#でも可能、データの受け渡しは不可。
198 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 05:30:58 ] >>196 あとは、.NETリモート処理を使う方法もあるが、実例はあまり見たことがない。 .NET 2.0で追加されたIpcChannelが9x系ではエラーになるなど問題が多い。
199 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 07:42:50 ] Formにスナップ機能?winampのように他のウィンドウや画面の端にくっついたりするにはどうすればいいですか? 教えてください。お願いします。
200 名前:190です。 [2006/08/26(土) 11:55:03 ] >>193 すいません、正直、あまり、わかっていません。 動きは全て、仕様です。 Formの開閉時に、DBに接続して、Select,Update,Insertを 行う仕様になってます。
201 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 12:02:46 ] >>197-198 どうもありがとうございます。 単一インスタンスにすると2重起動時、 Loadなりなんなりで 後から起動したほうを終了して、 普通に宣言してある変数の内容を書き換えるだけで すでに起動していた側からその変数を見たら変更されてて この目的なら万事おk ってことですよね? とりあえず試してくるw
202 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 12:11:29 ] そんなことしなくても後から起動されたほうは勝手に終了する。 先に起動してた方のMy.Application.StartupNextInstance イベントのパラメータに 後から起動したコマンドラインが渡されるので後はお好きなように。 つーかMSDN嫁。
203 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 12:17:23 ] >>202 そんな楽にできるのかw MSDNじっくり読んできます〜 マジありがとう。
204 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 12:20:32 ] >>200 >>191 さんが書いてるのは仕様に外れるからダメってことか?
205 名前:149 mailto:sage [2006/08/26(土) 12:33:16 ] その後色々と調べたところ、同じ症状の対策がでてました。 DataGridViewのスクロールバーがおかしくなる ttp://dobon.net/vb/bbs/log3-26/15520.html delegate void DataTableAddRowCallback(DataTable dt, DataRow dr); private void DataTableAddRow(DataTable dt, DataRow dr) { if (dataGridView.InvokeRequired) { DataTableAddRowCallback d = new DataTableAddRowCallback(DataTableAddRow); Invoke(d, new object[] { dt, dr}); } else { dt.Rows.Add(dr); } } //別スレッドから DataTableAddRow(dataSet.Tables["TableName"], dataRow); で、解決するらしいのですがC#はさっぱりで、VBに書き換えも撃沈しました。 どなたか、教えていただけないでしょうか。よろしくお願いします。
206 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 12:40:25 ] >>195 遅くなりましたが、有り難う御座いました こんな見易い便利なの物があるんですねーー 初めてみました(´Д`) 複数コード入力した後の最終チェックなんかに使ってみたいです とはいえ、やはりコード入力がものすんごいあるので フォームでのコード入力のところをごっそり省きたい…… やはり、オブジェクト渡してやっちまいまつ(゚∀。)
207 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 12:47:17 ] >>205 >>149 のコードを見る限りDataRowへのデータの追加を 別スレッドでやってるようには見えないんだが、そこんとこはどうなの? 同一スレッドでやってるんならリンク先の対策は役に立たないと思うが。
208 名前:149 mailto:sage [2006/08/26(土) 13:06:25 ] >>207 すいません、そうでした。現在のソースはこのような感じです。仮想モードは使っていません。 Dim ds as Dataset Dim dt as Datatable Dim bind1 As BindingSource Friend WithEvents Bg_main As System.ComponentModel.BackgroundWorker Sub form1_load() Handles MyBase.Load ds.Tables.Add(dt) dt.Columns.Add("column1", GetType(String)) (以下略) bind1.DataSource = dt Datagridview1.DataSource = bind1 Bg_main.RunWorkerAsync() '別スレッドへ End Sub Sub Bg_main_DoWork() Handles Bg_main.DoWork Row = dt.NewRow Row(0) = "a" Row(1) = "b" dt.Rows.Add(Row) End Sub Bg_main.RunWorkerCompleted で追加を検出してMe.Refreshでも固まってしまいます。DataGridViewで何かイベントがいるのかな。
209 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 13:13:30 ] >>208 順序がおかしいな。 別スレッドで DataSet/DataTable にデータを突っ込む>元スレッドで DataSource に設定 だ。 > DoWork イベント ハンドラでユーザー インターフェイス オブジェクトを操作しないように注意する必要があります と MSDN にあるが、 DataSource に設定済みの DataSet/DataTable への操作も UI の操作に当たる。
210 名前:149 mailto:sage [2006/08/26(土) 13:35:50 ] >>209 レスありがとうございます。 頻繁に書き換えがあるので、左記にDataSourceを割り当てているのです。 実際には、スレッドは沢山あって、それぞれにDataDableを更新しています。 その更新結果を、DataGridViewにリアルタイムで表示しているのですが、スクロールバーが出ると固まってしまいます。 MSDNにはUIを操作するなと書いてあるのは知ってますが、リアルタイムでデータが流れてくるので、別スレッドに流し込まない と処理が間に合わないのが現状でして。 表示自体は、RunWorkerCompletedにMe.Refresh()を入れれば改善はされるのですが、やはり触ると固まってしまいます。 そこで、色々調べたら>>205 の症状と似ていたので。 205のソースは、いろいろと変更して入れて見る努力はしたのですが、そもそも知識不足で理解できませんでした。
211 名前:デフォルトの名無しさん [2006/08/26(土) 13:50:50 ] だったらこんなところに質問している間に理解しようとすればいいのに。 この人に限らないけど、ダメな奴っていうのは基本的に努力の方向が間違ってるよ。
212 名前:149 mailto:sage [2006/08/26(土) 13:55:24 ] >>211 C#のヘルプとか見ながら色々と試行錯誤しているんですけど、なかなか上手くいかなくて。。。。
213 名前:デフォルトの名無しさん [2006/08/26(土) 14:06:52 ] いや、だからたぶんデリゲートとかスレッドがよく分からんのでしょ? だったらまずそれを理解しろよ。でなきゃ埒があかん。小学生でもわかる理屈。 @ITとかCodeZineに解説あるし、別にたいして難しいもんじゃない。
214 名前:デフォルトの名無しさん mailto:sage [2006/08/26(土) 14:15:37 ] > スレッドは沢山あって、それぞれにDataDableを更新しています。 ってアンタ…… なんか色々絶望的だな
215 名前:149 mailto:sage [2006/08/26(土) 16:32:56 ] Invokeを使ってもやっぱりかたまる。DataGridViewのイベント関係なのかも。 Delegate Sub DataTableAddRowCallback(ByVal dt As DataTable, ByVal dt_row As DataRow) Public Class Form1 >>208 と一緒 Public Sub DataTableAddRow(ByVal dt As DataTable, ByVal dt_row As DataRow) If DataGridView1.InvokeRequired Then Dim d As DataTableAddRowCallback d = New DataTableAddRowCallback(AddressOf DataTableAddRow) Me.Invoke(d, New Object() {dt, dt_row}) Else dt.Rows.Add(dt_row) End If End Sub Sub Bg_main_DoWork() Handles Bg_main.DoWork Row = dt_temp.NewRow Row(0) = "a" Row(1) = "b" DataTableAddRow(dt, Row) End Sub End Class
216 名前:デフォルトの名無しさん [2006/08/26(土) 19:00:19 ] ダメグラマが「固まる」って言葉が好きなのは法則か何かかねw ダメグラマはなんでダメなくせになんでいきなり全部を完成させようとするんだろう。 そのくせ問題が起こると、「問題の切り分け」すらしようともせず、 全然見当違いのことを問題の原因だと思い込む。 もちろん彼はシンプルなコードを書いて、本当に彼が思っていることが 問題の原因なのか、確認しようともしない。