乙と言わざるを得ない
乙。
前スレ
>>997 For I = 1 To 10
[email protected] = ???
Next
というコードで@の部分にfor~nextの I を入れたいのですがどうすれば入れられるでしょうか
おねがいします
またこれネタか
BindingFlags指定とか無視しているけど、大体こんな感じ? DirectCast(Me.GetType().GetField("PictureBox" & CStr(I)).GetValue(Me), PictureBox).Image = ???
アホに変なこと吹き込むなよ・・・
テキストボックスに表示してある下のような16進数なのですが 01-02-03-04-05-1A-1B-1C-1D-1E-1F これをバイト配列に入れたいのですがどうしたら良いでしょうか。 Dim b() As Byte b = Split(TextBox1.Text, "-") これだとStringはByteから派生していない為配列に変換できないというエラーになってしまいます。 お願いいたします。
12 :
7 :2009/08/22(土) 23:41:23
>>9 ありがとうございます。そのコードを使って作ってみます。
>>11 いったん String 型の配列にとって、ループで Byte に変換しながら突っ込んでいけばいいじゃん。
>>11 CByte(Val("&H" & str)) 'VB的な書き方
Convert.ToByte(str, 8) '.NET的な書き方
お好きな方をどうぞ。
一行に押し込めるならこんな感じか。
Dim b = TextBox1.Text.Split("-"c).Select(Function(arg) Convert.ToByte(arg, 8)).ToArray()
15 :
14 :2009/08/23(日) 00:27:51
よく見たら、Array.ConvertAllの方が良かったかも。まあいいや。
>>13-15 両方の方法を試してみたいと思います。
どうもありがとうございます。
17 :
14 :2009/08/23(日) 01:22:09
何で8進数やねん > 俺 すまないが、Convert.ToByte(str, 8)の8は16に直しておいてくれ。
そういうもんは BitConverter.GetBytes で一発変換できて欲しいけどね。 ToStringの逆も面倒見ろよ。 CByteのValっていらなくない。
試してみたら、確かにVal要らないわ。 だけどドキュメントにはその明確な記述が見つからない…… 定数宣言の際に使える表記である以上、 VB関連の関数では当然扱える、と解釈すべきなんだろうか。
>>19 CByteの実体は、
Microsoft.VisualBasic.CompilerServicesのConversions.ToByte メソッド で
これにはObjectとStringのオーバーロードがある
IDEでは、CByte(Object As Expression) As Byte とポップアップが出るけど
Expression型って何やねんw
誰も言わないからあえて言うけど、
VB厨呼ばわりされたくなかったら、CByteは論外として
Converter使うより型(この話の場合はByte)のParseメソッドを
使ったほうがいいと思うよ。
>>18 BitConverterの存在理由を考えればそれはないんじゃないの。
>>21 本物のVBプログラマは ToString() は使わないで CStr() を使う。
何故ならばVB IDEで色が変わるからだ。
それのほうがソースが見やすい。
>>21 CByte("&H" & str)
Convert.ToByte(str, 16)
Byte.Parse(str)
VBのコーディングとして下になるほど str(16進文字) をバイト型に
変換しているのが直感的に分かりにくくなると思うがどうかな?
好きなのを使えばいい。
その通り。でも1つのソースの中で混ぜるなよw
>>14 >Dim b = TextBox1.Text.Split("-"c).Select(Function(arg) Convert.ToByte(arg, 8)).ToArray()
目からウロコ。
1バイトずつList(Of Byte)に入れてからToArray()してたよ orz
>>23 俺には理解できな発想だ。
普通に考えれば、Byte.Parseは直感的どころか明示的(ズバリそのまま)なわけで、
これ以上の分かりやすさはないと思うが。
>>26 そんなネタみたいなコードにひょっとして本気で関心してるの?
悔い改めた方がいいよそういう発想。
VBerに限らず、ダメなプログラマっていうのは行数が短いことに価値がある、
という妄信に取り付かれている。
で、数ヵ月後自分で書いたコードが自分で理解できなくて困ってやがるw
プログラムっていうのは、コンパクトさよりも可読性をより優先しなくちゃダメ。
>>28 こういうトリッキーなのもあるのだと関心していただけですよ〜
実際のコーディングに使ったらかなり鬼畜です。
>>27 CByte("&H" & str) なんて.NET的にはお馬鹿なコーディングだけど
VB厨には分かり易いんじゃないですか?
>>30 どうもそうらしいね。
俺には理解できんけど。
ついつい ○ = ★ : ● = ◎ : ▼ = "あばばばば" とか ○ = × : ● = □ : ▼ = "くぁwせdrftgyふじこlp;" みたいにして一行に12,30文字ぐらい普通に詰めてしまう俺でごめんなさい 短めな所で改行された方が縦に長くなって見づらいんです
>>31 Java屋さんですか?
.NET(特にVB.Net)はJavaと違って「ぬるい」ところがあるのが好きですw
VB.Netだとフォームのコントロールの規定値がFriendだったりします。
よそから丸見え〜w (C#.NetだとPrivate)
あまり堅苦しいこと言っちゃぁVBなんてつつけません。
>>32 If ○ = ● Then ◎ = ★ : Dim □ = ▲ : △ = "うあああ"
くらいやってください。
>>33 言語は関係ないよ。
何も教条主義的なことを言ってるわけじゃない。
VB6から.NETに移行した人でも「CByte("&H" & str) 」式の書き方をする人と
しない人がいる。
前者の人は、要するにあたらしい事を覚えることを拒否してるだけ。
言い換えれば、例えばちゃんと.NET Frameworkについて少しは勉強して
Byte.Paraseメソッドを知ってる人であえてCByteを使う人はまずいない。
>>35 >Byte.Paraseメソッドを知ってる人であえてCByteを使う人はまずいない。
知っていてあえてCByteを使う人だって居ますよ。
新しいことを覚える事を拒否すると .NET Frameworkなんてものは使えません。
そういう人たちはVB6.0に留まってますし未だVB6.0のゴミのような保守の仕事もある。
断言するけどいないよw いやいるかもしれんが、そういう人は(そういうメソッドが存在することを)「知っている」 だけに過ぎず、ちゃんと理解してはいないんだろ。
そんなん、使い分ければいいだけだろがよ。 VB6 からの移行モノとかで、周りが Choge() ばっかり使ってるなら、 CByte() でもなんもおかしくないし。 知らないから使えない、以外にも、知ってるけどわざと使わない、って選択肢もあるんだよ。
>CByte("&H" & str) VB厨てきな書き方だけど &H があるので str が16進数だと言うのはすぐにわかる。 >Convert.ToByte(str, 16) これもToByteで16があるのでstrは16進数かなと思う >Byte.Parse(str) Byte.Parse メソッド (String) 数値の文字列形式を、それと等価の Byte に変換します。 パラメータ s: 変換する数値を格納する文字列。文字列は、Integer スタイルを使用して解釈されます。 戻り値: s に指定されている数値と等価の Byte 値。 Integer スタイルって何やねん? ってことになってInteger スタイルを調べると NumberStyles 列挙体にたどりつくと 数値基本型クラスの Parse メソッドに渡される数値文字列引数で使用できるスタイルを決定します。 この列挙体には、メンバ値のビットごとの組み合わせを可能にする FlagsAttribute 属性が含まれています。 ますます何やねん?でいまだにstrが16進数なのかどうかわからず。 こんなことになるのであえて CByte("&H" & str) を使うと。。
その善し悪しは別にしても、自分が知らなかったやり方に関心(感心?)するのは普通の感覚じゃない。 いけない発想だと、無理に押さえ込む必要はないと思うけど。
日本語でOK
ごめんなさい、ひらがなでかけばよかったかな?
>34 If 〜 Then の後に代入式三つは横スクロール必要になる事が多そうだなー i = 1 : s = "a" : c = "."c レベルの短さでコメント不要そうな内容なら考えるかも知れん
IIfもあるよ
- 感覚じゃない。(否定) - 感覚じゃない?(肯定しつつ同意を求める) この使い分けができない人が増えたよね。
>>43 マルチステートメントはCase文でしか使わないな〜
Select Case hoge
Case 1 : a = 2
Case 2 : a = 3
End Select
>>44 それはoption strict onだとcastしないといけないからキライ
>>40 ???だらけのソースだけど他のをみてもそうなので仕方なく
それに合わせる小心者なオレがいる。
本物のプログラマはVBなど使わない。一般に、12歳以上になって VB を使うプログラマなどいない。
腹へったじゃない。
↑は否定、同意? 日本語って難しいな。
中国語(北京語)なんか語尾の抑揚で意味が変わるらしいけどね
否定や同意だけじゃないよ。 ヒント: もぉ、おかけで仕事が増えちゃったじゃない。
>>49 働いたことないの?言語選ぶなよ
マジレスだぞ☆
C#で書いたものをVBのコードに変換すればいいじゃない
プログラマの意図通りに100%変換できるものなの?
>>39 誰も突っ込みを入れないので
Byte.Parse(str) は、10進数の変換で
Byte.Parse(str, Globalization.NumberStyles.AllowHexSpecifier) としないと16進数変換になりません。
ついでに速度も測ってみた (結構いいかげんな測定なのであまり信用できないが)
(1) Dictionary(Of String, Byte)
(2) Convert.ToByte(str, 16)
(3) Byte.Parse(str, Globalization.NumberStyles.AllowHexSpecifier)
(4) CByte("&h" & str)
(1)はジェネリックなハッシュテーブルに00〜FFをセットしてテーブル引きする方法でこれが最速
(1)を基準にすると速度は
(1) 1.0
(2) 1.8
(3) 2.8
(4)20.0
CByte("&h" & str) が予想外に遅い。
文字連結の "&" が遅いのかと思って連結をやめてもたいして変わらない。
印刷ダイアログでファイルに出力をチェックして ***.prnファイルになったファイルを VBでプリンタ(LPT1)に出力したいのですがどのようにしたら出来るでしょうか?
60 :
59 :2009/08/24(月) 00:24:30
すみません。出力したいのはLPT1ではなくて USBにつないだ通常使うプリンタに設定したプリンタです。
VBスレらしい質問でよいな〜
>>58 マジか。CByteとかのChangeType系は
パフォーマンスが稼げるってMSDNに載ってたが、
一体、何と比較したんだろうなMS。
ParseがConvertより遅いのも意外だな。
Parseのが厳密に文字列表現を見るから、
速いかと思い込んでた。
63 :
デフォルトの名無しさん :2009/08/24(月) 03:12:58
>>58 CTypeのテストをする時に、
shareのエロ動画DLが始まったんだろ。
>>62 ,63
俺も信じられなかったんで検証してみた
たしかにCByte(str)はConvert.ToByte(str, 16) より10倍程度遅かった
Val(str)はConvert.ToByte(str, 16)より早かった
Valの戻りはDoubleらしいのでバイト型に(暗黙の変換で)代入した
そしてここで驚くべき結果
CByte(Val(str))はConvert.ToByte(str, 16)より速い
Val(str))より若干遅いだけ
Cxx関数のヘルプ見ると、インラインコンパイルされるのでパフォーマンスが向上するときもあります、とw
CByte(string)は遅いがCByte(Double)はかなり早い
CByteに文字列渡したときにいったいどんなコードにコンパイルされてるんだろうねぇ
Utils.IsHexOrOctValue() ってのが遅そうだな。
>>63 そういうもんにはDL専用のPCがあるw
>>64 Valなんて前世紀の遺物くらいに思っていたがやるもんだな〜
>CByte(string)は遅いがCByte(Double)はかなり早い
それは、.NETのボックス化、アンボックス化が絡んでいると思う。
参照型と値型の相互変換が遅いってやつ。
何を訳のわかんないことをしたり顔で言ってるんだw どう考えてもそんなもの無関係
>>64 CByte(Val(str))とVal(str)は同じコードが生成されているので速さの違いは測定誤差だと思う。
>>67 では何が関係しているのでしょう?
クリップボードからrichtextboxに貼り付けるとき、 gettext で 例えば aa の間に bを挿入したいんですが、 これやると aab になっちゃんです。 対処法お願いします。
>>64 >CByteに文字列渡したときにいったいどんなコードにコンパイルされてるんだろうねぇ
CByte(str) ⇒ Conversions.ToByte(str)
CByte(Val(str)) ⇒ CByte(Math.Round(Conversion.Val(str)))
全然違うものになってる w
>>14 皮肉にもVB厨な構文の勝利に終わったわけだなwww
>>47 VB9からIf演算子が追加されたよーC系の?:演算子と同等の記述ができるよー
>
>>67 >では何が関係しているのでしょう?
いくらなんでもボックス化は関係ないわ
ボックス化って何なのさ。 厨なオレに分かるように説明してください。
タカ&トシの新しいネタです
>>76 LabelからTextBoxに値を入れること。
Label同士、TextBox同士の値の代入は速いが相互にやると遅い。
ComboBoxとTextBoxの間では速度低下はない。
Sub aaa(ByVal hoge as hogeClass) とByValで渡しているのにhogeの中身が書き換えられるのは何故なんでしょう? Sub aaa()の中でhogeが書き換えられなくするにはどうしたらいいの?
> とByValで渡しているのにhogeの中身が書き換えられるのは何故なんでしょう? hogeClassが参照型だから > Sub aaa()の中でhogeが書き換えられなくするにはどうしたらいいの? ディープコピー作るとか構造体にするとかあるけど まあ普通気にしないでいいよ
>>79 変数hogeの中に入っている「値」とは、hogeClassのインスタンスの
メモリ上の位置を表す「値」だから、とでも考えるよろし。
書き換えられたくないのなら、インスタンスのクローンを作ってそれを渡す、とか
ReadOnlyプロパティだけを並べたインターフェイスをhogeClassに実装させて
aaaはそのインターフェイスを引数に取るようにする、などの工夫が必要。
参照型と値型の違いとそれぞれの意味は、最初にちゃんと理解しとかないとマズいね。
>>81 >ReadOnlyプロパティだけを並べたインターフェイスをhogeClassに実装させて
元のメンバーをPrivateにして新しくPublic ReadOnlyのを作るわけですか?
横レスだけど何で.NETにはC++のconstな値渡しみたいなのは無いのだろうか。
constな値渡しって何?
dクス 半分くらいわかった。
DataGridViewで行を下げて行くにはどうすればいいでしょうか? ループを使いたいと思っています for i = 0 to 10 DataGridView1.Rows(i).Cells(1).Value = 0 next ↑ではエラーが出てお手上げ状態です お願いします
行を下げるっていうのは、下の行を表示させるということ?
どういうエラーが出てどうお手上げなんだよ やりたい事をもっと正確に書けよ
全然意味わかんねーけど、多分行が11行もないんじゃないの
91 :
87 :2009/08/26(水) 20:23:07
すいません詳しく書くと
別のDataGridView(DataGridView2とします)の行数をRowCountでiに行数を入れており
DataGridView2と同じ行数で内容は入っていないDataGridView1が出来ています
iが3だとするとDataGridView1のRows(0)からRows(2)までに0を入れたいと考えています
そこでループで行けるかと思い
>>87 のコードでやってみたところRowsの()の中は変数は使えないみたいでした
再度よろしくお願いします・・・
どうしてエラーの内容を隠匿しようとするんだろうね?
使えるから。
詳しいエラー内容 イミディエイト ウィンドウ 'System.ArgumentOutOfRangeException' の初回例外が mscorlib.dll で発生しました。 例外ヘルパ インデックスが範囲を超えています。負でない値で、コレクションのサイズよりも小さくなければなりません。 パラメータ名: index ArgumentOutOfRangeException i = DataGridView2.RowCount が問題でしょうか?
そんなコード書いてないじゃん。
>>90 の言うとおりだな。
こいつには教えなきゃならんことが多すぎて教える気もなくなるわ
97 :
87 :2009/08/26(水) 20:45:06
すいませんでした。失礼します
String型は値型なのでしょうか参照型なのでしょうか?
>>99 参照型ですね。
でも他の参照型と違う動きをしますよね。(謎
>>87 とりあえず動いた。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'列の設定
Me.DataGridView1.ColumnCount = 1
Me.DataGridView2.ColumnCount = 1
'グリッド1に3行追加
Me.DataGridView1.Rows.Add("hoge1")
Me.DataGridView1.Rows.Add("hoge2")
Me.DataGridView1.Rows.Add("hoge3")
'グリッド2にグリッド1の行数を追加
Dim Count As Integer = Me.DataGridView1.Rows.Count
Me.DataGridView2.Rows.Add(Count)
'グリッド2に値を代入
For i As Integer = 0 To Count - 1
Me.DataGridView2.Rows(i).Cells(0).Value = "hoge" & (i + 1).ToString
Next
End Sub
>>100 不変クラスとかimutable classで調べてみると分かる。
>>102 ぐぐったらJavaのばかり出てきました。
上のほうで出てきてるシャローコピーとかディープコピーとかもJavaですね。
どれも概念の話であって言語は関係ないな
そういう概念ってVBだけやってると永久に辿り着けそうに無いな。。
VB的にはStringは基本型のひとつという位置づけ。 でも不変参照型というのが分かってないと なんでStringBuilderが必要なのか理解できない。
>>106 それは参照型のString型を値型と同等に扱える仕組みと言うことで理解してOK?
よくない
VB.Netで不変参照型なのはString型だけなの?
そういう風に設計すればいくらでも 標準ライブラリでぱっと思いつくのはSystem.Drawing.Font
>>111 有難うございます。
System.Drawing.Font 見たけど不変参照型みたいな事は書いてないですね。
不変参照型って自分でも作れるんですかね。。
教えてくんになってしまっているので自分で勉強して出直してきます orz
クラスと構造体を別々に作るのと、クラスの中に構造体を作るのとでは、 どういう違いがあるのでしょうか ストラクチャ名だけでインスタンスを作るとグローバルな感じで、 入れ子にすると[クラス名].[ストラクチャ名]でインスタンスを作れるから、 どの目的のための構造体なのかがわかりやすい、というだけ? あと、構造体のインスタンスは Dim Hote As [ストラクチャ名] これで暗黙的にNewされてインスタンスが作られている、 という理解で間違いないですか?
114 :
113 :2009/08/27(木) 10:36:49
あ、それと下の質問がその通りであれば、 Dim Hoge As [ストラクチャ名] Dim Hoge As [ストラクチャ名] = New [ストラクチャ名] この2つは同義で、どっちを使ってもおkということですか?
ストラクチャ名……なんだろうこの違和感 ネストされた型の大きなメリットはアクセス制御をPrivateやProtectedにできること 内部の型から外部の型のPrivateメンバにアクセスできること > 入れ子にすると[クラス名].[ストラクチャ名]でインスタンスを作れるから、 > どの目的のための構造体なのかがわかりやすい 名前空間と型名だけで表現できてなかったらすでに命名がまずい > この2つは同義で、どっちを使ってもおkということですか? IL レベルで違いはあるがまあ同じと考えて良い
116 :
113 :2009/08/27(木) 12:44:11
>>115 ありがとうございます、よくわかりました
違和感のところはすみませんでした
>>101 までの流れを読んでて思ったけど、
真面目に回答してた奴は、
質問者が拗ねてしまって、
危険な流れとばかりにスルー。
煽った奴は、相手がスレからつまはじき者にされて
自分の煽りの影響力にご満悦。
>>101 のようにスレのルールに忠実な結果報告だけが
残る。2chって無責任な場所ですよね。
10年前から知ってましたが。
今更痔ろう
10年前にこっ酷い目に会って、今漸く帰って来たのですね。わかります。 でないと、こんな青臭いレスなんてできないよな。
わかります(笑) こういうのに限って「スイーツ(笑)」とかやってたりするんだよねw
だよねw
>>119 「青臭い」って・・・実際、他人に使ってみたことある?
きっと、言われた方は、喜ぶと思うよ。
イカ臭い
きっと、言われた方は、喜ぶと思うよ。
WindowsVista64Bit VS2008で開発してます。 ある画像を表示する為に、APIのStretchDIBitsを使用しています。 ピクチャーボックスのPaintイベントで画像を描画する為、 引数のe.GraphicsからHDCを取得して使っています。 このHDCですが、なぜかLabelなどに一度値を出力しないと、画像が描画されないんですが、 似たような経験された方はいらっしゃらないでしょうか?
>>125 画像のパスを設定するとか
外部の設定によって描画内容(描画ロジック)に変更ある?
変更あるなら変更のタイミングで描画命令を発行
変更ないならロジック晒すべし
>>125 初め表示される時には、画像が無かったってオチかなあ。
XPと違ってVista以降はあまり再描画が発生しないし。
偶々そのLabelの変更がきっかけになっている、とか。
ウィンドウ表示後に画像が用意されるのなら、
ピクチャーボックスを明示的にInvalidateなりしないと。
俺125じゃないけど、基本的なこと聞いていい? Paintイベントのヘルプみると >コントロールが再描画されると発生します。 ってあるんだが、これは コントロールが再線画されようとしたら発生 コントロールの再線画が完了したら発生 のどっち? 日本語を素直にとらえると後者なんだが、 例とかみてると前者じゃないとおかしな動作しそうだし
129 :
デフォルトの名無しさん :2009/08/29(土) 11:17:18
コントロールで質問です コマンドボタンのような見た目で、押した時に凹んだままになり、 もう一度押すと元に戻るボタンをなんというのでしょうか?
旧VBを知らないからコマンドボタンというのがなんなのかは知らんが、 トグルできるButton風のコントロールはCheckBoxで扱う
132 :
129 :2009/08/29(土) 11:25:31
>>130-131 もうコマンドボタンっていわないんですね、失礼しました
ありがとうございました
>>128 コントロールが<コントロール自身によって>再描画されると
>>133 コントロールの描画は、OnPaintメソッドで行われるらしいので、
このメソッドの中でPaintイベントを発生させてるってこと?
そうなると、描画が完了してからイベント起きるか、完了まえにイベント起きるかは
そのコントロールの実装次第、ってことになるのかな?
だから、省略してある言葉を補った文章のとおりでしょ 『コントロールが<コントロール自身によって>再描画されると』 これを描画前に呼ばれる可能性もありうると読み取るようなら、 日本語のセンスがちょっとヤバいんじゃないかと思うけど。
Paintイベントを発生させるControl.OnPaintをいつ呼ぶかは、実装に拠るからなあ。 Control.OnPaintのサンプルだと頭で呼び出しているけど。
だから、MSDNライブラリっていうのはチミやオレが実装したコードについて、 ではなく、MSの中の人が実装したコードについて「こうなってます」っていう 解説書だから、そういう物言いはナンセンス以外の何物でもない。 当たり前のことだと思うんだけどね。
Paintイベントは、 コントロールが再描画された後、追加の描画をユーザーに提供する目的で発生します。 一部のコントロールではこのイベントが発生しないこともあります。 こんな感じ?
そもそもMSDNで日本語を正確に読み取ろうとしても意味はない。 正確に読み取りたければ英語のを読め。
>>128 Paintイベントはコントロールが再描画されようとしたときに発生するから。
なので、コントロール自身の再描画処理は、MyBase.Paint()で行う。
このMyBase.paint()を呼ばなければ、コントロール自身の再描画は行われない。
全然違う コントロールの描画処理はOnPaintというメソッドの中に書かれている。 描画が終わった後,最後に基底クラス(Controlクラス)のOnPaintを呼ぶ。(呼ばなくてもいい) ControlクラスのOnPaintメソッドの中にはPaintイベントを発生させる処理だけが書かれており, Paintイベントが発生する。 だから,派生クラスを作ってOnPaintをオーバーライドしてその中に描画処理を書けば 基底クラスの描画処理は行われない。
142 :
140 :2009/08/30(日) 22:17:53
すまん、MyBase.OnPaint()の間違い。
あと、一番最後の「コントロール自身の再描画は行われない。」は「基底クラスの描画処理が行われない。」
の間違い。
いいたかったことは、
>>141 と同じこと。
>>141 >描画が終わった後,最後に基底クラス(Controlクラス)のOnPaintを呼ぶ
これなんだが、MSDNの例だと最初に呼んでる
最後に呼ぶと線画完了後にイベント起きることになる
俺がMSDNで調べた限りでは、
まず、最初にMyBase.OnPaint(e)を呼び出し、Paintイベントを発行させて、
その引数eをもとにレンダリングするのが正しい作法じゃないかな
したがって、
Paintイベントは再描画される前に発生し、そのイベントの引数により描画内容を変更することができる
が正解だと思う
実際すべてのコントロールがそのように実装されてるかどうかはしらね
実際にはすべてのコントロールが描画後にMyBase.OnPaintを呼んでる 通例,On○○をオーバーライドするときには基底クラスのOn○○を先に呼ぶことが多いんだけど OnPaintの場合は後で呼ばないとPaintイベントで描画した内容が見えなくなるだろ
145 :
144 :2009/08/31(月) 10:03:26
捕捉 コントロールがControlクラスから直接派生している場合は,OnPaintには何の描画処理も書かれておらず, ただPaintイベントを発生させる処理だけが書かれているので,後で呼ぶことができる。 こうしておけば,コントロールのユーザがPaintイベントを使うことによって描画を上書きできる。 でも,Buttonなど既にOnPaintに描画処理が書かれているコントロールから派生する場合は話が違ってくる。 そのようなサンプルで先にOnPaintを呼んでるのは,まず基底クラスに描画させてその上に描画するため。 その場合,その自作コントロールのPaintイベントは描画が行われる前に呼び出されてしまうので使えなくなる。 (そのコントロールのユーザがPaintイベントで描画してもOnPaintでの描画に上書きされてしまうから)
言っちゃ悪いけど、そんなこと普通MSDNの記述を読んでちょっと考えればわかる 当たり前のことじゃないか? 少なくとも俺はそうだったが・・・
>>146 Paintイベントのヘルプだけ見てもここまでわからないだろ
まあ、関連しそうなところ全部読んで理解すればわかるんだろうが
MSDN全部読んで調べろっていうなら、質問スレの質問ほとんどがそれで済む
すくなくともここは初心者お断りじゃないだろう
まあ145まではいかなくても,落ち着いて自分の頭で考えたら少なくとも
>>143 みたいな早とちりには至らないわな
VB.netのくだすれが無い以上、ここにくだすれ向けの質問も書かざるを得ないとは思う。 くだすれ作れよってことなら立てるだけなら誰でもできるが、果たして質問に答える方の人材はどうだろうかとも。
多分答える人たちは両方のスレで同じ
まあ、あれだ。 標準のクラスがどうやってるかは Reflector で調べるのが確実。
くだらん質問ですみません。 VB6で書いたコードをVB2008で読み込んで自動でコードを 変換させました。 CommonDialog1.CancelError = True VB2008のCommonDialogクラスにはCancelErrorなんてプロ パティは無いそうで、変換できないといわれました。 VB2008のコモンダイアログでCancelボタンを押したときの 値ってどこで取得したらよろしいんでしょう? なにとぞよろしこ
ShowDialogの返値
resultってVB6もあったよね?
155 :
152 :2009/09/01(火) 14:45:29
DialogResult.Cancelっていう値を返していたのね。 分かりました。へっぽこですんません。ありがd
おまいらが思う、世界の歴史上最も美しいオープンソースのVB.NETを紹介しろよ。
美しいとかいう以前に無いから .NETのオープンソースはほとんど全てC#
ほとんどなのか全てなのかはっきりしろ
じゃVB.NETはまれによくあるんだろうか
まれなのかよくあるのかはっきりしろ
CodePlexなんかにはVB.NETで書かれたものもほんの少しはあるけど C#とは比べ物にならないので,そういうの漁るならC#は必須 ほとんど一緒だから慣れたら脳内翻訳できる
質問です。 あるクラスから Form が呼び出されている場合、その Form で自分の呼び出し元クラスを取得する方法はありますでしょうか? 呼び出し元クラスの他のメソッドを実行したいのです。 現在は下記のように書いていますが、もっとスマートな方法はありますでしょうか? フォーム frmX でクラス HOGE を New してっていうのが違和感があります。 HOGE.A() で f.Tag = Me とすれば frmX で Call Ctype(Me.Tag, HOGE).B() としてもいけそうですが、これもスマートではない気がします。 それとも、呼び出し元クラスのメソッドを実行する設計自体が問題あるのでしょうか? Public Class HOGE Public Sub A() Dim f as New frmX f.Show() End Sub Public Sub B() MessageBox.Show("Hello!") End Sub End Class Public Class frmX Private Sub Button1_Click(Byval sender as System.Object, Byval e as System.Eventargs) Hanles Button1.Click Dim H As New Hoge Call H.B() End Sub End Class
frmXのコンストラクタの引数として渡す 一般に,呼び出し元に依存するような設計は良くないんだけどVBならどうでもいいよ
164 :
162 :2009/09/02(水) 10:25:14
>>163 ありがとうございます。
なるほど!です。
frmX で
Private _Caller As HOGE
Public Sub New(Caller As HOGE)
InitializeComponent()
_Caller = Caller
End Sub
Private Sub Button1_Click(〜
Call _Caller.B()
End Sub
とすることでできました。
Form の既定のプロパティに呼び出し元を取得できるものでもあれば、と思っていたのですが
見つけることはできませんでした。
呼び出し元に依存するような設計の良くないと言われるのはどういった点でしょうか?
今後の参考にさせていただきたいので、お教えいただければと思います。
逆に言うとそのHOGEがないと呼び出せないということになる HOGEの中身によるけど,あんまりその場に依存した具体的なクラスだとfrmXが使い回しできなくなる
166 :
162 :2009/09/02(水) 10:44:48
開発しているシステムに「HOGE」「FOO」「BAR」みたいに3つの機能があるとします。 で、それぞれの機能をクラスに分けようと思っています。 もっと言うと別Dllにしてしまおうと考えています。 各機能で固有の機能や画面は各クラスで実装するつもりで、メインプログラムから 例えば処理HOGEを行う場合は、クラスHOGEのインスタンスを作成し、そのクラスの メソッドを実行しようとしています。 frmX を他のクラスから使いまわすということはないです。 複数のクラスから使いまわす予定のものは呼び出し元クラスに依存しないような設計に すれば問題ないですか?
他でも使う機能なら、フォームのクラスに載せないで、 共通機能として別クラスに作るだけでいいんじゃないの?
>>162 >>164 「呼び出し元」て…
frmX にイベントを追加するのが一般的じゃね?
Class HOGE
Public Sub ...
Dim f As New frmX
AddHandler f.押された, AddressOf B ' ←─ ここでハンドラ追加
f.Show()
End Sub
:
Public Sub B(ByVal self As Object, ByVal e As EventArgs)
MessageBox.Show("Hello!")
End Sub
End Class
Class frmX
:
Public Event 押された(ByVal self As Object, ByVal e As EventArgs)
:
Private Sub Button1_Click(...
RaiseEvent 押された(Me, New EventArgs)
End Sub
End Class
これ全然一般的じゃないだろw
使い回さないって言ってるんだから普通にHOGEのメソッド呼べばいいと思うよ
>>166 を読む限り,frmXの処理は密接にHOGEに結びついてるみたいだから
無理にイベントを使っても強くHOGEを意識する形になると思われるのであまり意味がない
本当に分離するなら,frmXで触るデータを保持するクラスをHOGEとは別に作る
VB2008を使っています。 関数の処理時間を計ろうと以下のクラスを作成しました。 Public Class ProcTime Private dtDiff As DateTime Public Sub New() dtDiff = DateTime.Now End Sub Protected Overrides Sub Finalize() Debug.Print(DateTime.Now.Subtract(dtDiff).Milliseconds.ToString()) End Sub End Class '時間を計る関数に Private Sub Test() Dim pt As New ProcTime '〜処理〜 End Sub とした場合、正しく計れないのですが間違っていますか?
Finalizeはいつ呼ばれるかわからないから,そういう使い方はできない。 そういうパフォーマンス計測にはSystem.Diagnostics.Stopwatchという専用のクラスがあるからそれを使う。
173 :
171 :2009/09/02(水) 14:22:34
早速の回答ありがとうございます。 時間を計測したい関数の最初と最後に Start、Stop を配置して 計測するんですね、分りました。
c++で作ったDLLの関数が次のような場合 >int Foo(void **param) 実際はparamが複数ある >ダブルポインタを渡してオブジェクトのポインタ値を取得する。NULL値も許容する。 VB.net2003での宣言を以下のようにしたらNothingを渡してもNULL(0)になりませんでした。 >Declare Ansi Function Foo Lib "hoge.dll" (ByRef param As IntPtr) As Int32 VBからポインタ値の先を直接参照するわけではなく、ハンドル的な使い方をしたいのです。 NULL値も渡せるようにするにはどうしたらいいのでしょうか?
175 :
174 :2009/09/02(水) 16:56:48
書き漏れがありました。 C++のDLLはネイティブ(アンマネージド)DLLです。
ByVal param As IntPtr()
NULLに相当するのはIntPtr.Zero
>>176 Declare Ansi Function Foo Lib "hoge.dll" (ByVal param As IntPtr()) As Int32
としたところ「型 'System.IntPtr' の値を 'System.IntPtr の 1 次元配列' に変換できません。」とエラーになってしまいました。
呼び出し側も何か書き方があるのでしょうか?
>Dim param As IntPtr
>Dim b = Foo(param, Nothing) '引数が2個の場合
配列知らないって言われても困る
VB2008で「ビルド|発行」を実行したら、setup.exeを含むインストーラっ ぽいのができてしまいました。setup.exeを実行すればなんとなくインスト ールされて立ち上がります。しかし、インストールされた実行ファイル等は programfilesのフォルダには影も形もありません。 そもそもVB6の時のように、インストール不要のexeファイルを作りたいの ですが、VB.Netではできないのでしょうか?
基本的に/bin/Release以下のファイルをコピーするだけでいい
182 :
180 :2009/09/02(水) 17:48:36
ゴミを入れんなよゴミを
184 :
デフォルトの名無しさん :2009/09/05(土) 04:06:17
今後vb.netで開発を行っていくのにはどのバージョンが適切なのでしょうか? vb2005、vb2008はどちらかというと個人向けとwikiに書かれていました。 vb.net 2003が良いのでしょうか? ご教授願います。
どのwikiに書かれてたのか知らんけど、多分誤読してる
187 :
デフォルトの名無しさん :2009/09/05(土) 09:35:14
>>184 いまどき2003は無いよ。IDEボロだし。
WPFとか最新機能を使わないのなら2005でOK
2008でも良いけどIDEが劇重い
そうか? まともなPCなら2008の方が体感速度は速い気がする
たいして変わらん
Core2 T550 1.67GHz は今時のまともなPCではありませんか Orz
T5500だった
2008は型推論とかXMLリテラルとか便利だよ
Eclipseの方がいいよ。VBは使えないけど
Excel VBA のエディタよりは使いやすいな。>Eclipse
VB2008は使いやすいよ インテリセンス超速いし,徹底的に洗練されてる感じ ゴテゴテのEclipseとは対照的
ゲイツ乙
俺が、VB2008がEclipseよりも劣っていると思うこと。 ・スコープを考慮した変数名の一括置換が出来ないなど各種リファクタリング機能が無い叉は貧弱。 ・編集ウィンドウのタブに閉じる「×」が無いため閉じるのが面倒。また全てを一度に閉じる機能も無い。 ・プライベート変数からプロパティを自動生成する機能が無い。 ・プラグインが作り難い。 ・Javaで書かれたEclipseよりもなぜか重く感じる。
あ、もうひとつあった。最大の欠点は、Windows専用であることだな。
>>198 初心者が誤解するので、Express しか使ったことがないなら
そう書いて欲しいもんだ。
じゃ、使わなきゃいいじゃん。
あと、タブクリックで最大化する機能も欲しいな。
スコープを考慮した変数名の一括置換はできる。 全てのドキュメントを閉じる、は付いてる。 プロパティはコードスニペットを使う。 いつからEclipseがVBに対応したのか知らないけど。
このウインドウ以外全て閉じるはあったけど、全てを閉じるってあったっけ? あんま使わないから覚えてないけど。 既にあるプライベート変数から、プロパティ作るのと prop->のコードスニペットは別の動作だと思う。
×ボタンとか
EclipseよりVS2008が使い易いとか言ってる奴は素人だろ
IDE付属のテキストエディタ如きで満足している奴は皆素人ってことだろ。 まあ、俺はテキストエディタ素人だから、JavaはNetBeans、.NET系はVisualStudio使うけど。
釣りとは思うが時代錯誤な見解だね。 でも今時になってもリアルで「エディタにこだわる俺はお前らとは違うんだ」っていう 痛い奴がいたりするからあまり笑えないかも。
Eclipseがいいと思うなら思えばいい だがここはVB.NETスレだからEclipseとかいらん
だがC#と同じぐらいのリファクタリング機能はVBにもつけてほしいのう
VBプログラマはリファクタリングの意味すら分ってないから不要だろ
ここで〜してほしいって愚痴るぐらいなら VS2010ベータ試してフィードバックに投げた方がよほど建設的なの
>>210 ツールがあったはず。
C#と同等のリファクタリング機能とか謳ってた記憶があるが名前忘れた。
少なくともメソッドの抽出は出来たはず。
'どうせウチの環境じゃ入れてもらえないけど…
Refactor!ってやつがなかなかいいよ
Function GetItems(type As Type) As Object() Dim items As Object() 〜 If type Is GetType(String) then items = new String() {} 〜 return items End Function Dim names() As String = GetItems(GetType(String)) とすると「InvalidCastException」になりました。 CTypeやDirectCastも試してみましたが同じ結果でした。 要素を1つずつコピーすれば出来ると思うのですが、もっと単純な方法はありませんか?
普通に Generics 使えよ。
そんなメソッドの使いどころが全く分からない
戻り値やitemsの型をArrayにしたらいいんじゃね 普通はジェネリック使うべきだけど
>>215 何がしたいのか意味が全然わからないが、
呼び出し側でString()を常に期待する(
>>215 のコードを見る限り、そう取れる)
のなら、GetItems()の返り値の型をString()にすれがいいんじゃないの?
Typeオブジェクトで指定した型の配列を返すようにしたいってこと?
それはできないから、どうしてもというならObject(Object()ではない)を
返すようにして、呼び出し側でキャストするしかない。
If type Is GetType(String) then items = new String() {} If type Is GetType(Integer) then items = new Integer() {} If type Is GetType(Double) then items = new Double() {} みたいなことをやりたいんじゃないの?
それだったら Function CreateArray(Of T)(ByVal size As Integer) As T() Return New T(size){} End Function
単純にArray.CreateInstance()使えば?
要素コピーとかいってんだから配列作るだけじゃないんだろ
>>215 です。
やりたいこととしては
>>220 に近い感じです。
〜Collectionとかの要素をオブジェクトの配列として参照したり文字列の配列として参照したりしたかったのです。
ジェネリックは2005から使えるみたいなので私の使っている2003では使えませんね。
Object()ではなくObjectにすればキャスト出来るみたいなので試してみます。
ああ、2003のことを忘れてた
先に言えよハゲ
はじめから配列も〜CollectionもIListとして扱えばいい すべて共通のコードで扱える
2003なんですが質問です。 DataGridで特定の行に色設定し、さらに行選択もできるようにしたいんです。 DataGridで特定の行に色設定することは、 DataGridTextBoxColumnを継承してクラスを作成し、 Paintメソッドをオーバーライドすることで出来ました。 行選択もHandles DataGrid1.Paintしたメソッドに DataGrid1.Select(DataGrid1.CurrentRowIndex) を書けばできました。 でも両方をいっぺんにやる方法が分かりません。>< たぶん、オーバーライドしたPaintクラスから DataGrid1.Selectが出来れば良いんだと思いますが、 やり方が分かりません。 どなたか教えてくださいませんか?
SELECT * FROM npcname_jp jp INNER JOIN npc eg ON jp.id=eg.id 上記SQLでセレクトしたテーブルをリストボックスに入れて DisplayMemberpを jp.id などにすると、なぜかそのような列が見つからないようで、表示に反映されません。 なぜだか分かる方いませんか(;´Д`)
SELECT jp.id as hoge, * FROM npcname_jp jp INNER JOIN npc eg ON jp.id=eg.id としてhogeにしてみたら?
超ありがとう 積年の恨みが一瞬で解決した 痔は治らないが
「なぜそうなるのか」がわかってないと解決とは言えないと思うんだぜ?
と思うんだが? と思うぜ?
>>233 …
まあ最近見ない表現だから解らんのも無理はない。<「〜だぜ?」
表現だぜ? 無理だぜ? と言っても 見ないんだぜ? 解らんだぜ? とは言わなんだぜ?
236 :
デフォルトの名無しさん :2009/09/08(火) 23:24:19
vb2008express editionを使っています ウインドウ左上のアイコンを変更するにはどうすればいいでしょうか? ちなみにアイコンそのものは変更してみましたが変わりませんでした
238 :
デフォルトの名無しさん :2009/09/09(水) 00:13:38
>>237 アイコンの変更は試しましたがウインドウの左上の絵がかわりませんでした
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt このキーに新しいキーを追加してメニューから自作アプリを起動たいのですが レジストリキーの既定のところに c:\test.exe と書いても起動しないのですが他にどんな設定をしたら良いでしょうか?
スクリプトしか実行できないんじゃなかったっけ?
他にどんな設定をしてもだめ
すみません初歩的な質問です。 今まで独学でvb.net+mdbのデータベースを勉強しているのですが、サンプルに使っているSQL文がそのままだとJETに使えないため、いっそMySqlに乗り換えようと試みています。 いろんなサイトでMySqlのデータベースを作成することはできたのですが、なぜかそのファイルが生成されていないみたいです。 「ファイル+vb.netで作ったアプリケーション」を人に渡して使ってもらうようにしたいので、どうしてもファイルが必要です。 また、渡した相手のローカルコンピュータにはMySqlは基本的にありません。 もしくはvb.netのソースコード側でMySqlのデータベースファイルを生成する方法でもあるのでしょうか? よろしければ教えてください。
sqliteを使えばいいかと
データベースって何?って事を理解したらいいかと思う
データベースといっても色々あるがな
SQLiteかわいいよSQLite
あー、そりゃ通らねぇだろうなあ。 MySQL と PostgreSQL 以外にこの構文受け付けるやつってあったっけ?
2005から2008ってどう変わったの? 乗り換えるメリットある?
・VB9(LINQ, ラムダ式, 型推論, XMLリテラル) ・.NET3.0&.NET3.5(WPF,WCF等) ・.NET2.0の部分は変更なし WPFとか使わないならそんなに変わらない どうせWinFormsはVS2010以降も放置だろうけどな
256 :
デフォルトの名無しさん :2009/09/12(土) 23:24:55
VBでTCP、UDP通信ができるプログラムを作りたいのですが、 VB6でwinsock使ってやってたのですが、 VB2008やらVB.netでも同様にできるのでしょうか?
ググってみつからないようなことならまだしも、 ググればその手の情報はいっぱい出てくるじゃん。
258 :
デフォルトの名無しさん :2009/09/13(日) 00:36:19
でてこねーからいってんだろ
>>258 そりゃぁ、回線を首に巻いて首吊って回線切れてんだから
ぐぐっても出ねぇよw
こういうことを実現したくて、調べたところこういうことがわかりましたが、 このソースのこの部分がよく分りません。そこでこういうふうにしてみましたが、 こういうエラーが出てうまく行きません。このエラーはこういう意味みたいなので、 ここをこうしてみましたが同じエラーがでます。他にエラーの原因として考えられる ことはあるでしょうか? ...みたいな努力のあとは欲しいわな。いくらゆとりとはいえ。
「VB.NETでTCP/UDPを扱う」じゃなくて 「VB.NETでWinsockを使う」って考えで調べるからダメなんじゃないだろうか、この手の人
>>256 winsockってwinsock.ocxの事かな?
であればvb.netでもocxは使えるので同じように作れるけど。
VB6って言ってるから「dll」の方だと思われ
わしが男塾塾長 江田島平八である!!
GroupBoxとPanelの違いは?
お前のレスそのままグーグルで検索かけろ
>>263 ocxじゃ無くなったんですか。
vb.netでもCOMなdll呼べるし、Dllimportでwinsock APIも呼べるし
ソケットプログラムには不自由しませんね。
いや、普通にSystem.Net.Sockets.TcpClientとか使えばいいから。
空気嫁
>>268 それじゃ全然オプションないだろ
使い物にならなくね?
UNIXみたいに自由にできん
>>270 System.Net.Sockets.Socket クラス使えばOK
Winsockより自由に扱えるんだっけ? UNIX波に
開発環境の違いにより同じアプリを作るにもコードの書き方が変わったりしますか? 数年前発売されたVisualStudio6.0を持っているのですが マイクロソフトから提供されているフリーの.NETをインストールするか悩んでいます。 .NET開発環境ではマウス操作だけで出来ることをVC6.0ではシコシココードを書かなければいけないというふうな 違いがあるのであればVC6.0で勉強するだけ無駄になりますし。
ここVB.NETのスレなんだが? とりあえず.NET以前のVBとVB.NETは別物と思った方がいいぐらい違う
VB6からVB 2005に移行しました。 今まで pos = Arrary( x, y) のような表記だったのをそのままビルドしようとすると >エラー 1 'Array' は型です。有効な式ではありません。 と前回ビルドに成功したものが実行されます。 左辺値は別アプリ(Photoshop)のオブジェクトライブラリのメンバで、As Variant, unit value(?)以外の詳細が分かりません。。 これを、 dim ops as Object ops = New Object(){x, y} pos = ops とやると、実行時に最後の行でCOMエラーが起きます。どのように修正すべきなのでしょうか・・・。 まだ切り替えたばかりで調べつつなので、書くべき情報が少なかったらすいません。必要あれば追記します。
>>275 > 左辺値は別アプリ(Photoshop)のオブジェクトライブラリのメンバで、As Variant, unit value(?)以外の詳細が分かりません。。
じゃあ誰も分からん
.NETでのCOMとの相互運用はVB6みたいな「よくわからないけどなんとなく使える」じゃ通じない
278 :
275 :2009/09/15(火) 22:41:14
レス遅れました。 277さんありがとうございます。 COM自体あまり良く理解してないと思うので、大人しくこのツールはVB6現行のまま作ろうと思います。 Photoshopのスクリプティングガイド等にもそこまで詳しい情報は載ってませんでした。orz
COM参照できそうなもんだが つーか詳細が分かりませんって、スクリプティングガイドあるんだからちょっとは調べろー
280 :
275 :2009/09/15(火) 23:20:15
すいません、もう一度じっくり読んだら型がDoubleと書いてあるのにLongで宣言してたのが原因でした・・・。 型宣言を書き換えたらエラー無し。 .NET以前の問題で申し訳ありません。。orz...
すみません、VB.netは超初心者なんですが。
将来的にMS ACCESSの制御をやることになりそうなので、練習ということで、
ソリューション エクスプローラの参照設定を右クリックして、
"Microsoft Access 10.0 Object Library"を登録して、そこまではうまく行ったんです。
そのあと、しばらく色々と遊んで、
そのあと、参照設定の参照ツリーから何かの拍子にAccessを削除して、もういちど登録したら、
黄色い三角に「!」の警告マークがでて、参照ができなくなってしまったんです。
過去にClick Onceのテスト用にビルド&発行してあった場所に、interop.access.dllというのが
あったので、それをインポートしたら復旧したのですが、このDLLが自PCのどこを探しても
ないのです。
いろいろググって、PIA
http://support.microsoft.com/default.aspx?scid=kb;ja;328912 がタイプライブラリ(的なもの)の詰め合わせ、と思ってダウンロードしてインストールしたら、
名前が、
×Access.Application
○Microsoft.Interop,Access.Application
でないと呼び出せなくなってしまってたんですね。どうも不可解で、
「ああ、それはこの辺がクサいよ」というエスパーの方、おられませんでしょうか?
結局、修復インストールまでしたのですが、だめ。(上に書いたinterop.access.dllが必須)
念のため書いておくと、Accessの参照を登録してから、他にやった(かもしれない)こととして、
・dotNetFx35setup.exe という最新版を落として入れた。
・MicrosoftR WindowsR Software Development Kit for Windows ServerR 2008 and .NET Framework 3.5
というのを入れた
というのがあります。
なにとぞご協力を。多少熟練した暁には、私も回答お手伝いしますので。
OS から再インストールしろよ
>>281 単に、以前は参照設定でMicrosoft.Interopが入っていただけじゃないのか?
284 :
デフォルトの名無しさん :2009/09/17(木) 11:29:31
System.IO の Directory.Exists() や File.Exists() を実行すると、そのたびに
メモリーを消費しているような感じなのですが問題はないのでしょうか?
メモリー消費のチェックには、
http://www.forest.impress.co.jp/lib/sys/wincust/taskservice/prcsxplorer.html を使いました。これを起動して、該当するアプリケーションのプロセスを
右クリックして[Properties]→[Performance]タブで[I/O]欄内のOtherを
モニターしてみると、上記メソッドを実行するたびに数バイトずつ増加していきます。
そのとき同時に同タブ内の[VirtualMemory][PhysicalMemory]の値も増加していました。
Directory.Exists() や File.Exists() の後ですぐに GC.Collect() を行なうと、
原則として[VirtualMemory][PhysicalMemory]の値は増加しないようでした。
しかし[I/O]欄内のOtherは増加していました。GCを使ったのはこれが初めてです。
これはいわゆる言うところのメモリーリークなのでしょうか、すみませんがご指導を
お願いします。
馬鹿?
web browserを作ったのですがweb browser.applicationから.exeにするにはどうしたらいいのでしょうか?
287 :
284 :2009/09/17(木) 11:36:19
288 :
284 :2009/09/17(木) 11:42:35
>>284 >Directory.Exists() や File.Exists() の後ですぐに GC.Collect() を行なうと、
原則として[VirtualMemory][PhysicalMemory]の値は増加しないようでした。
しかし[I/O]欄内のOtherは増加していました
この GC.Collect() を使った場合でも、それまでに GC.Collect() を使わないで
累積してしまった[VirtualMemory][PhysicalMemory]は減らないようでした。
「気にしない」が正解
290 :
284 :2009/09/17(木) 11:51:46
Fileのメソッドに限らず,メモリを割り当てないメソッドなんかほとんどないぞ? 何のためにGCがあると思ってるんだ
一時的にせよ、意図しないメモリが増えるのが気に入らない人の選択肢: C++ (unsafe)
一時的なオブジェクトはたいがいGen0の高速なGCで消えるから放置して問題ない FullGCしたら無駄に遅くなるだけ
284「私は必ずメモリ消費は抑えるぞ。他の何を犠牲にしてもだ。 そのためなら処理速度だってくれてやる。OSが壊れたって構わない。 データの不整合? 頻発する強制終了? BIOSから進めない? 知ったことか。 私はメモリという1つの美しい空間が1の状態に励起されることが、 そのような乱暴な行いが、それらのすべてが許せないのだ!!!!」
数バイト増えたからGC.Collect() 基地外かよ
2ちゃんに書き込むパケットはどうすればいいの? POSTを使うのはわかるが、リファラとか構成がわかわん
VB.NETじゃないけどjaneのソース見れば分かるしググればいろいろ出てくるぞ
2000*3000程度のjpgをPictureboxに入れてスクロールバーでスクロールさせてみるとものすごく処理が遅いのですが
何か高速化の方法があれば教えてください。
今のところ自分の試した方法は無駄な描画を減らすことですが、大した変化はありませんでした。
コードは以下のような具合です。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ClientSize = PictureBox1.BackgroundImage.Size
Me.SetStyle(ControlStyles.ResizeRedraw, True)
Me.SetStyle(ControlStyles.Opaque, True)
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
e.Graphics.DrawImage(PictureBox1.BackgroundImage, Me.ClientRectangle)
End Sub
また、下記のサイトでVB.NETのとっている画像処理方式が最悪であり、遅いといわれていることが分かりました。
http://www.nextftp.com/swlabo/m1_vbnet/hp_experiment/exp001.htm これってつまり、これ以上はどうしようもないということでしょうか。
このサイトにはなにやら方法が書いてあるようですが、書いてあるコードは宣言もしていない変数を当たり前のように使っているし理解不能でした。
そのページには、SetPixelが遅いと書かれているようにしか見えないのだが。 まあそれはともかく、クリッピング任せで毎回全部描画するのを止めれば良いんじゃないかな。 表示領域の範囲だけ転送するようにするだけでも大分マシになると思う。
rep2のソースを見ればいいと思う
302 :
デフォルトの名無しさん :2009/09/18(金) 13:56:04
VB.NET 2008 で、MouseMove に Beep() だけを書き込んだ次のプログラムで Public Class Form1 Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove Beep() End Sub End Class マウスカーソルをフォームの上に置いて、移動しなくても 約1秒ごとにBeep() が実行されます。 つまり、移動しなくても MouseMove は定期的に呼ばれています。これは、仕様ですか? それとも環境が悪いのでしょうか。 Windows 7 Ult のほぼ素の状態で実行してます。
家の環境は x64 Windows7 Pro だが、全く再現しないな。
304 :
302 :2009/09/18(金) 20:09:13
>>303 ありがとう。
あのぉ すまん。
再起動したらならなくなった。
原因は不明だが、そんな仕様なわけないわな。
すれ汚しすまん。
VBというわけでもないのですが、数値データを使って 地図上に線を引きたいのですが、そういうことが出来る地図ソフトはあるでしょうか? 有料でも良いので知っていたら教えて
GoogleMap
VBで使えるコントロールってことじゃね?
ソフトって言ってるからただのスレチ
出来合いのアプリケーションが欲しいって話なら寧ろイタチ
311 :
デフォルトの名無しさん :2009/09/22(火) 15:36:35
VS2005のデザイナー上で、ボタンとかのコントロールを あるコンテナ上から別のコンテナ上にカット&ペーストで移動すると Handles句で書かれたハンドラーからHandles句が削除されたままになります。 これを回避するためには、ハンドラをAddhandlerで関連付けする以外にない でしょうか?
削除されたHandles部分を書き直せばいいだけじゃないのか。 VSが自動で書いたコードと人が書いたコード、全く同じ文字列だった場合でも動作に違い生じるとでも?
まあ、アホみたいにイベント紐付けしてるとそれが面倒、ということでしょ。
>>311 そもそもカット&ペーストする必要があるの?
VS2003まではコンテナの外に出すにはカット&ペーストしか方法がなかったような気がしたけど
2005以降はマウス操作でそれも可能になってるのに。
普通にマウスかキー操作で移動すればいいじゃん。
あとはあれかね、小手先のテクニックだけど カット&ペーストする前にイベントハンドラをコメントアウトしておく、とかかね。 普通同じコントロールのイベントハンドラはまとめてあるだろうから、 それならたいして手間はかからないんじゃないかな。
つか、どーなって欲しいのかが判らん。 まさかハンドラを別フォームに置きたいとか、そういうトンデモなことをしたいのか?
>>315 それはさすがにお前さんの側の問題だと思うよ。
別に
>>311 はそう変なことは言ってない。
デザイナでコントロール選択してイベントのドロップダウンボックスで選び直したら
質問です。 フォームを開いてるときにフォームの外(スタートとか)の操作をさせない方法ありますか? タスクに表示させないのは出来るんですけど、スタートボタンの禁止ができません。 今作ってるのは、ユーザーを選択して起動したあと、パスワードを入れて正確じゃないと他の操作に進めないっていう奴です。 私はアドミニストレータじゃないので、ユーザーのパスワードだけだとアドミニストレータにばれてしまうんです。
ありません。 そういうのは、普通 GINA で作ります(XP までは)。
>>319 すいません。
プログラムを操作中に、プログラムの操作(ボタンをクリックするとか)以外をしないように出来ますか?という事です。
やっぱりできないですかね?
>>322 一番簡単なのは、昔のインストーラーでよく使われてた、
タイトルバーがないウィンドウを最大化してしまう方法かね。
もちろんこれではウィンドウズキーまでは抑止できないけど。
システムモーダルなんて方法もあった気もするけど、ドトネトのWinフォームは
システムモーダルに対応してなかったはず。
というか、そもそも普通はそんなアホな仕様のプログラムはありえないと思う。
本当にそんなアホな仕様が必要なのかね。
9割り方君がそう思い込んでるだけだと思うよ。
>>323 どうしてもアドミニストレータが入ってくるのを抑えたくて、その方法がこれしか思いつかなかったんです。
やっぱ最大化しかないですかね。ウィンドウズキーがありますからね…
ありがとうございます。
Administrator うんぬんはまた別の話だろ。 何をやりたいのか、まったく理解できないけど。
>>325 アドミニストレータは制限付ユーザーのパスワードが分かってしまうので、ばれないようにしたかったんです。
でも無理みたいですよね。ありがとうございました。
そりゃ、クラックすればわかるし、パスワード変更はできるけど、 VB とはまったく関係ない話。
プログラム実行中はできなくしたとしても、プログラム終了させたらできちゃうから意味なくね?
>>327 ごめん、なんでそんな仕様にするの?って聞かれたから理由を言ったんだ
>>328 パスワード入力して正しくない場合は、×押したときに強制的にキャンセル
だから GINA で作れって言ってんだろハゲ
なんでそんな仕様にするの?って聞かれたから理由を言ったんだ。キリッ じゃねーよw
システム部を持たない会社が「おい、おまえパソコン詳しいよな」みたいなノリで 社員に社内向けツールを作らせようとするとそんな要求仕様になりやすいな(経験者談)
まあ、率直にいってそういうことがしたいなら、 今はUSBドングル使ってシステムをロックする製品なんてのもあるみたいだから そういうのを使った方が確実だろうね。 それ以前に、まあ普通は隠蔽したいものは何らかのデータなんだろうから、 そういうことなら暗号化すりゃいいだけだね。 しかし、そんな信頼できない奴がシステム管理者ってのがそもそも間違ってる気もしますが。
>>330 ごめんそっち勉強するよ。
>>331 いやそんなつもりはw
とりあえずできないのはわかったんでやめます。
ありがとうございました。
すいません 教えてください マウスの移動で線を描画したいのですが pictureboxでdrawlineで書いていますが 太さを1以上にすると 汚い描画になります、VB6のときはこんなことはなかったのですが、どなたか教えてください
Graphics のプロパティをいろいろ調べてみれ。
>>336 SmoothingMode はいくつか試しましたが、だめでした。
太さを大きめにすると目立ちます
なぜだろう? もっと違うところ?
>>338 いっちゃ悪いけどそういうトンマな回答もどうかね。
「VB6のときはこんなことではなかった」と言っているから、
そういう問題ではないはずだ。
>>335 「汚い描画」なんていう抽象的な表現では誰にも問題が正確に伝わらない。
こういう場合は(というよりほとんどの場合そうあるべきだが)くどいぐらいに
具体的に君の問題を表現しなきゃダメだよ。
御託はいいからコードを出せ、ってことだな。
まず問題あるっていうコードを出すのがスジだな。
汚い描画してるからじゃね?
>341 Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove 'position Dim POS_X As Integer Dim POS_Y As Integer Dim g As Graphics g = PictureBox1.CreateGraphics() ' Create a new Pen object. Dim Pen As New Pen(Color.Green) ' Set the width to 10. greenPen.Width = 10 If e.Button = Windows.Forms.MouseButtons.Left Then g.DrawLine(Pen, POS_X, POS_Y, e.X, e.Y) End If POS_X = e.X POS_Y = e.Y ' Dispose of the custom pen. Pen.Dispose() End Sub
>344 一部ミス Public Class Form1 Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove 'position Dim POS_X As Integer Dim POS_Y As Integer Dim g As Graphics g = PictureBox1.CreateGraphics() ' Create a new Pen object. Dim Pen As New Pen(Color.Green) ' Set the width to 10. Pen.Width = 10 If e.Button = Windows.Forms.MouseButtons.Left Then g.DrawLine(Pen, POS_X, POS_Y, e.X, e.Y) End If POS_X = e.X POS_Y = e.Y ' Dispose of the custom pen. Pen.Dispose() End Sub End Class
ボリューム・シャドウ・コピーをVB.NETで行うには どうやったらいいでしょうか?
Dim threads(n) As Threading.Thread threads(0) = New Threading.Thread(AddressOf Foo) threads(1) = New Threading.Thread(AddressOf Hoge) ・・・ For Each thread As Threading.Thread In threads thread.IsBackground = True thread.Start() Next でスレッドを作っています。 この後どれかのスレッドが終了するまで待って、その後全てのスレッドを終了させるにはどうしたらいいでしょうか? (WIN32APIでいうところのWaitForMultipleObjectです)
TrackBarコントロールでマウスをクリックしたときに、 その座標が目盛りのいくつなのかを取得したいのですが、 方法を御存知の方、いらっしゃいましたら教えてください。
スレッド自体からはWaitHandle取れないみたいだから、 ManualResetEvent1個用意しといて 各スレッドは終了時にSet かつ随時タイムアウトなしでWaitしてSetされてたら終了 呼び出し側は単にWait でいいんじゃね? まあ効率を気にするなら各スレッドでのチェックのために 終了フラグ一個追加した方がいいかも知れんが。
>かつ随時タイムアウトなしでWaitしてSetされてたら終了 タイムアウトなしじゃなくて0指定の間違い。
オレはそんなに沢山のスレッドを作って何がしたいのかが知りたい
そんな面倒なことしなくてもベタにやるだけだと思うけど・・・ 全スレッドを終了するメソッドを用意して、各スレッド内の処理の最後で それを呼び出すようにするだけじゃん。 悩むような問題かね。
MSChartでY軸を右側にしたいのでYAxisTypeをSecondaryに設定すると AxisY2.MinimumとMaximumは自動でセットされないんだね。 Primaryなら自動でセットされるのに。 これって仕様? なんか理由があるんだろうか?
>全スレッドを終了するメソッドを用意して、各スレッド内の処理の最後で >それを呼び出すようにするだけじゃん。 そのコード書いてみな。 絶対問題ありのコードになるから。
>>354 そりゃトンマなお前さんが書けばそうなるんじゃないの。
俺に言わせりゃ、こんなので問題起こす奴の方がオカシイと言わざるを得ない程度の、
超初歩的な内容だと思うけど。
>>353 事故レスだけど
IsStartedFromZeroの設定でした^^;
>>355 だから書いてみてよ。
全部のスレッドを終了するメソッドを問題ないように書いてみなよ。
>>357 逆にチミが「問題」が発生するコードを書いてみれば?w
俺は馬鹿に説明するためにそれなりに長くならざるをえないサンプルコードを
書くなんてまっぴら御免だけど、ダメなコードのどこがダメでどう直せばいいかを
解説するぐらいの手間は払うよ。
あーつまり書けないのか?かけるんなら書けよ。
超初心者でも間違う方がおかしいコードなんだろ。
すぐ書けるだろ。
俺は
>>349 辺りでどうかなって書いたんだからさ。
まあ絶対書かないよな、お前そういう奴だよ。
>俺に言わせりゃ、こんなので問題起こす奴の方がオカシイと言わざるを得ない程度の、
>超初歩的な内容だと思うけど。
いきなりこういう反応をするやつで、自分からまともに何かを示すやつを見たことがない。
何を言ってもはぐらかすだけで、自分からは絶対に書かないんだよ、
単純に字義通りに取った場合、最初のスレッドの処理が終わったら 他のスレッドの処理が途中であっても終了するということになる。 それを指摘してるんだろ。
>>359 俺は「かけるんなら書くべき」なんていう妙な価値観を持ってない。
もちろん君がそういう価値観を持つのは勝手ではあるが、
その価値観を他人に振りかざして無理強いする前に、君自身が自分の価値観を
実践したらどうなのか。
>>362 >352に対して、言葉は正しく正確にと。
まあ、汎用的な用途を考えるんじゃなくてスレッドの処理内容を全部自分で書くなら
全部のスレッドを強制終了させるようなコードでもまずまず問題はおこらならいだろうと期待はできるけど、
普通にスレッドを扱うようなプログラムを書くやつは、そもそもスレッドを強制終了させようなんて発想しないよね。
>>349 みたいなやり方を発想するのがごく普通というか常識な感覚であって、
>>352 みたいな発想は出てこない。
>>352 みたいな発想はまともにマルチスレッドのプログラムを書いたことがないようなやつの
典型的な発想パターンだよね。
>>366 俺はスレッドをアボートする、なんて一言も書いてないが。
先に「問題」があるコードをまず提示しろ、って言ってるのはそのあたりの
微妙な問題もあるからなんだけどね。
アボートする以外にどうやって全部のスレッドを終了するメソッドを書くのか教えてくれ。
>>368 だから、そんなものはスレッド内の処理に依存する問題であって、
一意にこうだ、なんて言えない。
だから先に「問題」があるコードを提示しろと言ってる。
>>367 基地外だなこいつ。
>先に「問題」があるコードをまず提示しろ、って言ってるのはそのあたりの
>微妙な問題もあるからなんだけどね。
>俺に言わせりゃ、こんなので問題起こす奴の方がオカシイと言わざるを得ない程度の、
>超初歩的な内容だと思うけど。
おいw
>>369 だんだんこいつが何を言ってるのか分からなくなってきた
>そんな面倒なことしなくてもベタにやるだけだと思うけど・・・
>
>全スレッドを終了するメソッドを用意して、各スレッド内の処理の最後で
>それを呼び出すようにするだけじゃん。
>悩むような問題かね。
そのやり方を教えろってんだよ。
>>349 に対して
>そんな面倒なことしなくてもベタにやるだけだと思うけど・・・
なんだったらもっとシンプルなべたな方法があるんだろ?
スレッドをアボートしない方法でそんな方法は思いつかないが。
>>372 スレッドをアボートするのとスレッドを終了させることはイコールじゃないよ。
こんなことから説明しなきゃならんのかよ。
例えばスレッドの中身が単純なwhileループなら、外からループ条件をfalseに
設定してやればスレッドは終了する。
っていうか、
>>347 の問題とスレッドの終了方法は直接関係がない。
だからそれってほとんど
>>349 だろ?
それよりもベタな簡単な方法が、
「全スレッドを終了させるメソッドを最後に呼ぶ」
なんだろ?
かつその方法はアボートしないんだろ?
じゃあどうすんの?
>>373 >>349 見たら明らかだがどうみてもそんなこと分かってるっていうか最初からそう書いてる。
単純化して言えば、
>>347 の問題は
>>352 に書いたとおり、
各スレッドを終了させる方法(メソッド)が用意されていれば、
全てのスレッドに対応するそのメソッドを呼び出すメソッドを作って、
それを各スレッドの一番最後の処理から呼び出すようにするだけ。
もちろん、自分のスレッドの終了を待つような馬鹿なミスを犯して
デッドロックしないよう注意は必要だよ。
>単純化して言えば、
>>347 の問題は
>>352 に書いたとおり、
>各スレッドを終了させる方法(メソッド)が用意されていれば、
>>354 >各スレッドを終了させる方法(メソッド)が用意されていれば、
www
そのメソッドを示さないと悩むだろw
>悩むような問題かね?
ってんだからさ、悩まないようにしてやれよ。
>各スレッドを終了させる方法(メソッド)が用意されていれば、
>全てのスレッドに対応するそのメソッドを呼び出すメソッドを作って、
>それを各スレッドの一番最後の処理から呼び出すようにするだけ。
>
>もちろん、自分のスレッドの終了を待つような馬鹿なミスを犯して
>デッドロックしないよう注意は必要だよ。
これが、
>>349 に対して、
>そんな面倒なことしなくてもベタにやるだけだと思うけど・・・
の面倒なことしないベタなやり方なんだな。
一番笑えるのは全部後だしでヒントが出た瞬間に反応してくることだな。
メインスレッドで終了フラグ立ててサブスレッドは そのフラグが立ってれば終了すればいいんじゃないの?
>>376 >もちろん、自分のスレッドの終了を待つような馬鹿なミスを犯して
>デッドロックしないよう注意は必要だよ。
デッドロックって言葉が思いついたのか?
この話の流れでは自分自身の終了を待つなんて状況自体が発生しないはずだけどな。
それとも
>>376 のどこかで終了を待つようなコードを書いてしまう可能性があるのかい?
どこで書くんだろうなそんなこと。
他所でやれ
>>379 メインからは分からないから終了フラグは立てられない。
だから、終了フラグみたいなのを立てるのはスレッド側になる。
>>349 のようにイベントを使うか、
もしくはフラグだけにしてメインからは全スレッドにJoinするか、くらいだな。
まあイベントの方が普通なやり方だけど。
Joinだと結局全スレッドが終わるのを待つ感じになるからね。
>>380 ダメグラマらしい意見だね。
全てのスレッドを終了させるメソッドは、それ自身が終了させようとする
スレッドの中の一つから呼ばれる。
スレッドの終了処理は、実際にターゲットのスレッドが終了したかどうかの
確証をするのが普通だから、例えばそれをベタにJoin()を使って行うとデッドロックする。
っていうか、結局起こりうる「問題」って何のことなのかね。 まったく意味がわからん。
普通じゃないし今回の話でも確証なんて意味がない。
止まらない可能性まで考慮するならそもそもJoinなんて使っちゃダメで
自分自身だからどうという話ではない。
まだ続ける気?
なら
>>352 の例を示してほしいんだがな。
>>385 >>349 に対して
>>352 で面倒なことしなくてもって言ってるんだから
しかもスレッドを終了させるって言ってるんだから、
普通に考えればアボートすると言ってるとしか読み取れない。
本来そんな事しないでもすむのにスレッドをアボートするってだけで既に問題ありとされるのが普通。
スレッド使う上での常識としてね。
で、どっちにしても書き方からスレッドに関して素人なのが明らかだから、
コード書かせりゃそれ以外にもどっかに問題あるコードになる可能性が高いと思ってな。
まあ必要ないのにアボートする時点で常識的に問題ありとみなしていいレベルだが。
まさかフラグ立ててスレッド側で監視しつつ終了待機するメソッド作るのが
>>349 よりベタとは思わないし、
フラグ立てるだけなら普通スレッドを終了するメソッドとは言わないし
そもそもメソッドにするだけで面倒が増えてるだけ。
>>349 ですら面倒で、よりベタとなるとアボートするくらいしかない。
ってのが
>>354 の意図。
ああ長い。
まあ正直いうと単に
>>354 みたいに書いたら
どっかでボロを出すかと思ったのも有るけどな。
>>352 も微妙な問題があるって自分で言ってるんだから、
本人じゃないならあとは
>>352 に微妙な問題について聞いてくれよ。
>>387 なーんか2ch脳らしい強引な物の言い方だね。
何度も言うように
スレッドの終了 ≠ スレッドのアボート
君が両者をイコールだと思うのは完全に勝手だが、
「俺にスレッドの終了=スレッドのアボートだと思わせるのはお前のせい」
みたいな自己中心的な物言いをされても、「恥を知れ」以外に返す言葉がない。
まあ、
>>352 の発言が言葉が足りずミスリーディングなのは認めるけど、
要は、スレッドで実行したい処理をクラスでラップする「ベタ」な方法を取るべきであって、
>>349 的なスパゲティーコードはよくないって事だよ。
お前
>>349 のやり方の意味分かってるのか?
かなりベタでスパゲッティとかいうようなやり方じゃないぞ。
だいたい
>>349 はプリミティブレベルの考え方に近いもので
クラス化するとかどう書くかは別にやりたきゃ好きにしろってレベルだぜ。
つかクラスでラップってまたいきなり初めて出てきたな。
>>352 がそういう意図ってお前エスパーでも相手にしてるのか?
流石にそのベタなコードとやらを示してもらわないと分からない。
あっ余計な事言ったか、またループだな。
スレッドで実行したい処理をクラスでラップする、なんていうのは、 「ベタ」、つまり説明不要の定石だから説明しなかったまで。 っていうか、もういいわ別に。 一人かどうか知らんけど君みたいな馬鹿言い負かしても意味ないし。
こんな感じ?待っていれば他のスレッドも終了するという前提だけど。 Static testArr() As Boolean = New Boolean() {False} SyncLock testArr Dim testRes As Boolean = testArr(0) testArr(0) = True If testRes Then Exit Sub End SyncLock For Each thread In threads If Not Object.ReferenceEquals(thread, thread.CurrentThread) Then thread.Join() End If Next testArr(0) = False
>>391 今回は元々やりたい処理がそれぞ別メソッドになってるけど、
それでも「処理」をクラスでラップするのが常識かな?
一般に処理をクラスでラップするのが常識なのは、
処理に必要なデータをクラス側で管理するためで
今回のはどちらかと言えばスレッドの制御をクラスの機能として実装し、
処理はデリゲートとしてスレッド制御のクラスに渡すってのが普通な気がする。
C#なら匿名メソッドやらラムダ式使えばすごいシンプルに出来るんだがな。
今のVBって複数行のラムダ式使えたっけ?
次のバージョンからだったかな?
394 :
351 :2009/09/26(土) 20:17:09
だから〜、沢山スレッド作っておいて一等賞を取ったスレッド以外を 終了させるなんていったい何がしたいんだ〜?
>>391 >スレッドで実行したい処理をクラスでラップする、なんていうのは、
>「ベタ」、つまり説明不要の定石だから説明しなかったまで。
>>347 のでどうやんだよこれ…?
396 :
347 :2009/09/26(土) 21:22:45
盛りあがってますね
>>349 の方法でやってみます。ありがとうございました。
>>351 最小で1つ、多くてもせいぜい3つぐらいなんですけどね>スレッド数
内容は禁則事項です♪
そんなスパゲッティで面倒な方法はだめだ。
>>352 >>376 >>389 >>391 を見てクラスでラップする「ベタ」な方法でやるんだ。
こんなの定石だから
>>351 はあえて教えてくれないぞ。
コードができたら問題点を指摘してくれるから見せてみるんだ。
言っとくがこんな超初歩なところで問題あるコードなんて書いたら ちょっとオカシイってことだからな、超初歩以前に君がおかしくないかがためされるんだぞ。 心してかかるんだ。
そろそろウザイ。
テンプレ Q. 〜のやり方を教えてください A. クラスにラップしてベタに書け
デリゲートでマルチスレッドし、AsyncCallbackでコールバック関数で残りすべてのスレッドを終了させればOK
>>401 BackgroundWorkerでよいのじゃないか
ダメとは言わないが向いてないね。 意味がない。
>>401 AsyncCallback関数の中をどうやって実装するのだろう?
なんか振り出しに戻る予感。。
BackgroundWorkerが一番楽だと思う。
WorkerCompleteあるし、CancelAsyncあるし。
>>401 は、どうやってほかのスレッド終了させるんだろう。
結局大して変わらないよね。
Environment.Exit()
VB2008の555だったかの究極?技?何とか言う本 立ち読みしてみたら酷かった。 この手の本はあんま進歩しないなあ。 ちゃんと理解してる内容だけ書けばいいのに。 .NET系って本に間違いが多すぎる気がする。
>>408 それだとプロセスが終了しちゃうじゃん。
>>347 っぽいコードをそれぞれのやり方で書いてみれば
どれがやりやすいか、あまり差がないか
よく分かると思うぞ。
>>409 ドボンちゃんのサイト等があるのに今どきそんな本を買う人が居るのかね〜?
詳しく
継承されるクラスを作成するときに オーバーライドとイベント実装をどこで切り分けていますか?
継承を前提にするんだったらイベントはいらん 継承しないで外からアクションを挿入するためにイベントを使うんだ
>>415 ,
>>417 二人とも何を言ってるのか意味不明すぎる。
エスパー同士の会話なのかアーパー同士なのかどっちなんだ。
419 :
417 :2009/09/28(月) 20:23:03
「継承されるクラスを作成」と書いてあるから,抽象クラスでも作ってるのかと思った たぶん勘違い Formの派生クラスを作ったときにFormのOnPaintをオーバーライドするべきかPaintイベントを使うべきか というような話なら,一般的にはオーバーライドした方がいい(少なくともMSDNにはそう書いてある)
>>419 Formは必ず派生クラスで使うのにOnHogeとHogeイベントの両方があるのかって話し。
実行効率が良いのはOnHogeだけど使いやすいのはHogeイベントかなと。
だったらイベントだけで実装しても良いのではないかと思っただけです。
OnHogeはオーバーライドされるためだけにあるんじゃない。 派生クラスから基底クラスのOnHogeを呼ぶことでHogeイベントを発生させるためにも使われる。 .NETのガイドラインで決まってることだから黙って従え
>>420 まあ
>>421 みたいな教条主義もどうかと思うが、
自分で発生するイベントを自分で受信する、普通に考えれば間抜けチックなプログラミングを
「使いやすい」と感じるセンスには疑問を持った方がいいと思うよ。
それはおかしい。かなり変てこなセンスだ。
WPFになるとOnHogeを持たず派生クラスでもイベントハンドラを使うしかないイベントが多く出てくるよ。 まあWPFは設計が全然違ってて機構上そうなってるんであって WinFormsではおとなしくOnHogeを使うべき。
424 :
420 :2009/09/28(月) 23:25:16
オレの説明がとっても変だったか。。 仮想メソッドを使うかイベントデリゲートを使うかって話です。 便利と言うのはIDEがイベントを挿入してくれるから。
仮想じゃなくて抽象メソッドだった。
>>422 IDEとトータルで考えない方がセンスがないだろう。
全部イベントなのにフォームとコントロールでわざわざ使い分けるのがセンスがいいのか?
>>425 つまり、別の言い方をすればprotectedなイベントは有りかって話かな?
少なくとも.NETクラスライブラリの中にはあるね。
個人的はそういう方法を取りたい場面に当たったことがない。
430 :
デフォルトの名無しさん :2009/09/29(火) 20:06:10
>>428 抽象メソッドとデリゲートは結果的の同じだが。
イベントは引数の形式が決まってるだろ(従わないことも可能だが完璧なガイドライン違反) テンプレートメソッド作る度にいちいちHogeEventArgsやHogeEventHandler用意すんの? それに抽象メソッドなら派生クラスで実装することを強制できる
>>424 便利かなぁ…?
とりあえず overrides空白 まで入れればインテリセンスは利くわけだし。
>>430 つまり「よくわからない」ってことね。
そのフォームを他のフォームのインスタンスに含めるのであれば
いちいち派生させずともイベントを追加してやればいいし
常に派生させるんだぜ!というのなら Protected Overridable なメソッドを
用意してやればいい。
まあ両方用意しとくのが無難だし、
>>422 には同意しとく。
>>431 >いちいちHogeEventArgsやHogeEventHandler用意すんの?
特に追加情報がなければ EventArgs をそのまま使えばいいし、
そーすっとデリゲートも
Public Event Hoge(ByVal sender As Object, ByVal e as System.EventArgs)
の一行で済む。
なんでM$製のアンチウィルスソフツがVBに関係するのか、
>>433 には説明を求む。
文中検索掛けてもVBもVisualも引っかからなかったのだが。
古典的ネタにマジレスカコイイ
>>432 >とりあえず overrides空白 まで入れればインテリセンスは利くわけだし。
お〜、そんなんが出来るんだ。
知らなかった。ありがと〜ん。
ネタだったのかYO! 何かVB.NETの動作を阻害するものが入って動かなくなるのかと心配しちゃったじゃないかw
インテリセンスとGoogleが無いとプログラミングが出来ない身体になってしまった。
それでいいのだ
>>428 オブジェクト指向で言う委譲とデリゲートの委譲は別のものでしょ?
同じだ オブジェクト指向でいう移譲を手軽に使えるようにするための仕組みがデリゲート
どこがどういうふうに手軽なの?
Javaやればありがたみがわかるよ いちいちイベントハンドラごとに内部クラス作ってインターフェイス実装するんだぞ やってることは本質的にデリゲートとまったく同じだけど糞面倒で可読性も悪い
別に内部クラスとかつくらなくても、クラス自身でインターフェース実装して、 addActionListener(this); とかできるじゃん。 全然面倒くさくないし、簡潔明瞭じゃん。
同じ型のリスナを複数実装したいときは? それに,直接実装するならpublicにしないといけないだろ? イベントハンドラが全部publicで同じ名前(実際には無理だけど)ってどう思う?
引数で区別できなかったっけ? publicで何か不都合ある? どうしても不都合なら、別に内部クラスとかつくるのもそれほど面倒とは思えんが。
>>446 443じゃないけど、面倒に決まってるでしょ。
だいいち、ただコールバックして欲しいだけなのに
本質的でないインターフェイスが必要になる点で鬱陶しすぎる。
>>446 Javaやってるとはとても思えないな
カプセル化ってわかってる?
コントロールを削除したらpublicメンバを削除して継承してるインターフェイス減らすの?
インターフェースが必要かデリゲートが必要かの違いだから面倒くささ度の観点からみれば対して変わらん。 インタフェースの方が実装の有無が他クラスから判断できるとか、使い回しができるとか、便利な面もある。 実際、AOPではインターフェースのそういった性質が多用されている。 同様にインターフェイス外すのも、デリケート外すのも俺的には面倒くささはいっしょ。特にC#とJavaでは。 VB.NETのは場合メソッド削除するだけだから幾分簡単に見えるが大した違いではない。あとIDEの自動化による 簡便性の違いは多少あると思う。
Javaは単一のactionPerformedで全部受けてifでイベントの発生源ごとに分岐するパターンが最悪 WndProcかよ
orz
>>449 デリゲートはあくまで委譲のための(処理をカプセル化するためといってもいい)しくみなんだし、
いわゆる一般的な意味でのインターフェイスに関して
インターフェイスかデリゲートかっていうものではないでしょ。
javaだってイベントは普通委譲モデルで、ほとんどデリゲートとおんなじことやってるだけだし。
この使い方においてはインターフェイスもデリゲートも大した違いはない。
まあ専用のしくみであるデリゲートの方がよっぽど分かりやすいと俺は思うが。
.NETの言語だって、本来の意味でのインターフェイスの代わりに
デリゲートを使うなんてことは普通はしない。
ただし、フォームのイベントなんかは、実質考え方自体がイベントなんだから、
自分自身のイベントもコントロールなんかと同じようにイベントハンドラでやっても
何らおかしいことはない。
問題はIDEとの相性の悪さ JavaでIDEにイベントリスナを自動生成させたりするとものすごーく分かりづらいコードが出来上がる
DataBindingしてるソースの方を変更したとき、コントロールに同期させるには どうすればいいでしょうか? IPropertyChangedを実装する方法はわかったのですが、そういった準備なしに どこかのメソッドを呼び出す形で同期することはできないでしょうか?
ResetBindings
Form2からForm1のTextBox1.Textを設定できネーよなんとかしろ
>>456 するな、そんな阿呆なこと。
Form1 に、TextBox1.Text を取得/設定する
Public なプロパティを定義するのが常套。
むしろVBだからこそ、そんな阿呆なことができるべき
VBだからどうでもいいよw Form1のデフォルトインスタンス使えばおk コントロールのアクセスレベルはデフォルトでinternalだからそのままアクセスできる
>>459 >デフォルトでinternalだから
Friend じゃなくて?
ああC#とごっちゃになってた
>>458 規定のアクセスレベルがFriendなので同じプロジェクト内からは
出来てしまうアフォな仕様ですよ。
気に入らぬのでPrivateに変えてます。
C#だとPrivateなんだけどな。
規定 ガイテイってよむの?
>>463 既定と間違うのはよくあること。
時々“規定クラス”と変換してしまうのは個人的によくあること。
オマエらどんな餌にでも食いつくんだなw
469 :
デフォルトの名無しさん :2009/10/06(火) 14:35:51
失礼します Convert.ToStringで、数値を16進数にし、さらに1桁の場合は頭に0をつけて文字数を揃えるのを一括して行う方法はあるのでしょうか? 現在は16進数の文字列にしたあと、文字数をチェックして1桁なら0をつけているのですが、書き方が汚くなってしまうので・・・。 すいませんがよろしくお願いします。
>>469 Convert.ToString(Int32, IFormatProvider)
IFormatProviderとしてNumberFormatInfoを使う。
なんて面倒なことしないで、
string.Format("{0:X04}", 100)
じゃ駄目?
471 :
デフォルトの名無しさん :2009/10/06(火) 15:11:02
むしろ100.ToStringで
473 :
デフォルトの名無しさん :2009/10/06(火) 20:14:58
("{0:X04}", 100) {0:X04}と100のイミは?
前後をある文字で埋めるだけなら、String.PadLeftやPadRightもあるね。
>>473 複合書式指定文字列と書式設定するObject
うーむ・・
もとの質問は2ケタでいいらしいぞ 大昔のBASICちっくに Right$("0" & Hex$(数字),2)とかどうだ
477 :
デフォルトの名無しさん :2009/10/08(木) 17:19:21
データグリッドビューでデータを表示させたとき 上の方をクリックすると勝手に列ごとにソートしてくれますが そのときのイベントを取得することってできますか? どうしたらよいかおしえてください
Sortedイベントとかあるけど
479 :
デフォルトの名無しさん :2009/10/08(木) 19:29:40
480 :
デフォルトの名無しさん :2009/10/08(木) 22:42:50
タイマの使い方がわかりません。以下のソースで試してみましたが、 Threading.Timerは時間通りに実行されず、他の2つは実行もされません。 Timers.TimerとWindows.Forms.Timerはデザイナの方で定義し、パラメータはデフォルトです。 イベントハンドラはすべてtimeout=trueとしているだけです。 どなたか教えてください。よろしくお願いします。 Dim timeout As Boolean Private Sub Button1_Click(略) Handles Button1.Click timeout = False Dim ThreadingTimer As Timer = New Timer( _ New TimerCallback(AddressOf ThreadingTimer_Tick), Nothing, 0, 1000) While timeout = False End While ThreadingTimer.Dispose() timeout = False TimersTimer.Interval = 3000 TimersTimer.AutoReset = False TimersTimer.Enabled = True While timeout = False End While TimersTimer.Dispose() timeout = False FormsTimer.Interval = 2000 FormsTimer.Enabled = True While timeout = False End While FormsTimer.Dispose() End Sub
無限ループやめろ
直接は関係ないけどDisposeの書き方が悪い Try-FinallyのFinallyの中でDisposeするか,Using文を使ってDisposeは書かない
まあ普通はタイマを一つのメソッド内でDisposeするなんてないだろうけどな
CPU目いっぱい使ってループしてんだから、 1コアだとかなり反応悪いだろうな。 2コア以上ならそれなりに動くかも知れないが。 で、デザイナではっつけてる方はそもそもUIスレッドでイベントが発生するしくみになってるから これじゃ動くわけがない。
何でModule使ったら駄目なんですか?便利なのに Myとか最高
どこで何やってるかわからなくなるからだよ。 こんなこと言っても解らないだろうけど,クラスを使うのは余計なことを考えなくて済むようにするため。
どういう文脈か知らんが、 Module使ったらダメってのは Moduleを自分で作るな ってことじゃないのか?
488 :
デフォルトの名無しさん :2009/10/09(金) 00:18:08
>>481-484 ありがとうございます。
原因がわかったのでなんとかできました。
タイムアウト付きの処理を行いたかったのですが、
Thread.Joinで希望する処理ができました。
すべてのクラスはnewして使うべき
はあ?
ふぅ
4次元ベクトルを作ろうと Public Class Vector4D(Of T) をつくり、この中で加算を定義するために T型 の変数同士の加算を使ったら定義されていないというエラーになりました。 このクラスはベクトルなので T型 の集合は加減乗除やべき乗に閉じていなければならないのですが、そのような制限をつけるために Of T 「As ...」 などで対応し、結果として T型 の変数同士の加算がエラーにならないようにすることはできますか? (練習用なのでこの方向で解決できるのかどうかをまず知りたいです。4次元固定のベクトルクラスが .NET Framework に存在するならば、さらにそれを教えていただけるとありがたいです。)
演算部分はデリゲートなりインターフェイスなりに委譲するようにする
演算子オーバーロードはジェネリックには使えないよー
Of T ってどんなイミが
>>496 2008で実験してみたが
ジェネリックに使えなくはないけど、型ごとにオーバーロードしないとだめっぽい
Public Shared Operator +(ByVal a As Vector4D(Of Integer), ByVal b As Vector4D(Of T)) As Vector4D(Of Integer)を定義
Public Shared Operator +(ByVal a As Vector4D(Of Double), ByVal b As Vector4D(Of T)) As Vector4D(Of Double)を定義
...以下延々と必要な型に対して定義していく
使う方は楽かもしれんが、定義する方はジェネリックの利点がなくなるなぁ
使う方にもデメリットがあるよ オーバーロードされていない型のVector4Dをまともに使うことができなくなる Vector4Dの外部から演算子オーバーロードを定義はできないから
そもそもベクトルをジェネリックにする意義がよくわかりません。 どういう意図なんだろ。よーわからん。
そこは疑問もつとこじゃないだろ。 あと今回問題なのは、Vector4Dの実装側で、 Tに対して算術演算が出来ないことなんだから、 演算子のオーバーロードは何の役にも立たん。
>>501 時々君みたいなこという人がいるけど、
そもそも必要性が疑わしいものの実現可能性を考えてなんの意味があるの?
ベクトルをジェリックにして何の意味があるんだよ。
意味ないでしょ。
System.Linq.ExpressionとかDynamicMethodとか使えばできなくはないよ 算術演算を行うメソッドを動的に生成してしまえばいい
float,double,decimal,固定小数点数型辺りで使い回したいとか?
C++ではたいていベクトルはテンプレートになってるけど 実際doubleやfloat以外に使われてるのを見たことがない
506 :
493 :2009/10/09(金) 22:23:58
皆さん、レスありがとうございます。最初に DynamicMethod を勉強して
>>503 を試してみることにしました。
>>494 もう少し具体的に書いていただけると助かります。
>>504 主な目的はその通りです。
DynamicMethodは無謀すぎる インラインアセンブラみたいなことするんだぞ 自分は.NETオタだと自負できるようになってから出直せ
命令口調クンって馬鹿だな、まで読んだ。
やっぱりそもそもの発想がおかしいと思うけどねえ。 パフォーマンスが重要でないなら一番「大きな」型だけで演算を定義して あとの型はその型との相互の変換だけ考えればいいし、パフォーマンスが重要なら・・・ そもそも演算誤差の扱いっていう泥臭い問題の存在を忘れてないか
テンプレートみたいな何でもできるものをイメージしてたら、 Vectorをジェネリックに定義するのは何もおかしくない。 別に数値要素だけでしか使わないものではない。
ジェネリックデリゲート使って演算定義から取り出すやり方も出来ないことはないぜ。 そこまでする価値があるかは別問題として。 DynamicMethodよりは楽だけど。
あとどっちにしてもパフォーマンスは若干悪くなるな。
>>511 Int32等のCLI組み込み型については演算子がオーバーロードされてるわけじゃないから無理
DynamicMethodを使わないのであれば,
Int32とInt32の足し算,Int32とByteの足し算,…みたいにすべてのケースに対する演算処理を
定義しておくしかない
それDynamicMethodで実装されてるんだけどな
サイトのソースデータをString変数に入れたら&という文字が&に置き換わっているのですが これを一括して元に戻すにはどのような方法で戻したら良いでしょうか? 他にも置き換わっているものがあると思うので&に限定したReplaceではない方法が あれば教えていただきたいです。
↑ なんか消えてしまったみたいです。 &が&amp; になってしまいます。(本当は半角)
518 :
493 :2009/10/11(日) 00:55:17
>>517 HtmlEncode/HtmlDecode
520 :
493 :2009/10/11(日) 00:58:02
特殊な文字があるutf-8のwebページのソースをファイルに保存したいのですが WebClientでutf-8を指定してダウンロードしてStreamWriterで、書き込み時にutf-8を指定して 書き込んでいるのですが、保存されたテキストを見るとその文字が?になってしまっています。 teraPadというエンコードを指定できるテキストエディタでutf-8を指定して確認しているのですが 元の文字は消えてしまっているようです。 WebClientでダウンロードした直後にString変数に入れて、デバッグを一時停止して カーソルを当てるとその特殊文字は正常に表示できているのですが、 そのままConsole.WriteLineに出力すると?になってしまっています。 ブラウザのソース表示から直接TeraPadでソースを開いても?になってしまいます。 これはどのようにして保存したら正しく保存できるでしょうか? ちなみに文字は〜という文字の波を上下に反転したような形の文字です。 よろしくおねがいします。
文字の確認はバイナリエディタでやった方が良い DownloadFileすればプログラム上でエンコーディング悩む必要もないけど?
コンソールとかエディタが使ってるフォントがその文字表示できないってオチじゃないだろうな
>>522 全角チルダの上下反転表示とくれば、
FullWidthTilda(U+FF5E) と WaveDash(U+301C) の変換問題だな。
TeraPadは内部コードがShift_JISらしいので、
WaveDashが化けてしまっているんじゃないかな。
一度、WikipediaのUnicodeの所を読んでみると良いよ。
>>518 Public Shared ReadOnly Add As Func(Of T, T, T) = Lambda(AddressOf Expression.Add)
Public Shared Function Lambda(ByVal op As Binary)
Return Expression.Lambda(Of Func(Of T, T))(op.Invoke(x)).Compile()
End Function
試してないけどだいたいあってるはず
Imports Binary = Func(Of ParameterExpression, ParameterExpression, BinaryExpression)
を忘れずに
527 :
526 :2009/10/11(日) 11:05:56
訂正 Return Expression.Lambda(Of Func(Of T, T, T))(op.Invoke(x)).Compile()
内部SJISのエディタでutf8開くなんて無謀すぎだ。
どちらかというと、今時内部SJISのエディタの存在自体が無謀な気もw
>>522 chcp 65001
hoge.exe >file
531 :
522 :2009/10/11(日) 22:12:39
レスありがとうございます。 素直にメモ帳で開いたら正しく表示できました。 正しく保存できているのにteraPadで表示しようとあれこれやっていたんですね; 助かりました。
comboboxで選択された内容を配列に格納すんのってどうやんの? 簡単におせーて
SelectedItem
>>532 一つしか選択できないのに何故ゆえに配列?
なにゆえゆえ?
いやまず君自身の頭の悪さをどうにかしないとダメだよ
無茶ゆうな
掲示板とかのメッセージみたいなツリー構造のデータをファイルに保存するのに良い方法があったら教えて
2ちゃんみたいに、フラットにしちゃうのが楽。
羽山博いきてる?
すいません、 コンボボックスのドロップダウンをEnableをFalseにせずに 出ないようにしたいんですが、これってvb.netじゃできないもんでしょうか?
For I = 1 To 1000 System.Threading.Thread.Sleep(1) Application.DoEvent Next これで約1秒待機しているのですが以前は大体1秒、2秒だったのですが 最近はすごい長くなってきました。 10000でも10秒位だったのですが、1分近くかかるようになりました。 これはどういう部分に原因がありそうでしょうか? そういえばパソコンの動作も鈍い感じがします。 CPUやメモリには全然余裕がある状態でも同じです。
そういうコードを書かない、でいいじゃないか
549 :
526 :2009/10/13(火) 20:28:24
UIスレッドでSleepはご法度
タイマを使う
待機が必要になるような処理をUIスレッドでやらない
API剥き出しw
必死な馬鹿が一人紛れてるな
作り方はともかく、Sleepは最小の待機時間しか保証しないからな。 その何倍も経過した後で戻ってきても何の不思議も無い。 Do-LoopとStopwatchクラスで1秒経過するまで待てばそれなりに動かせるけど、 設計自体見直したほうがいいだろうな。
DoEventsで時間食ってるんだろ
今無職なのでVBで食っていこうかなって思ってます。オスッ
ぼくも無職ですがVB覚えたい 昨日駅前のパソコンスクールに言って 「VBありますか?」 って聞いたら無いって言われました やはり独学しかないのか
スクールなんぞ金の無駄でしかない。
じゃ、本で独学がいちばん?
わざわざ始めるならJavaにしとけよ
>>546 キミのその糞なコーディングにパソコンが嫌気がさして来たからだと思う。
メディアプレイヤを起動してみるんだ
>>562 終わった話に後から煽るだけ、ってのやめれ。
頭悪そうにしか見えない。
JavaとC#を同時にやるのがいいと思う VBはC#ができれば自動的にできるからあえてやる必要はない
なにゆえ同時に
Dim Arr As New ArrayList Dim R As New Regex("hoge.+?") Dim M As MatchCollection M = R.Maches(hogeString) 上のような正規表現のMachesでマッチした結果を ArrayListに入れたいのですが どのように書いたら良いでしょうか?
じゃあC#解説のおすすめのサイトと本教えてよ
VBってそういう言語面からきちんと解説してるサイトや書籍が少ないよな 変数,演算子,制御構造終わったらあとはコピペ用Tipsばっか
動けばいいから
>>569 すみません具体的にどう書いたら良いですか?
Arr = AddRange(〜〜〜)
ここがわかりません。
お前のコンパイラはエラーが発生すると爆発でもするのか?少しは試せよ。
色々試しすぎて爆発したから質問してみた
すこしはググれよ
578 :
デフォルトの名無しさん :2009/10/16(金) 22:02:27
もうググり杉って出た はやく教えて
ヘルプ嫁
もういい聞かない もったいぶりすぎ質問スレじゃなかったのかよ
>>574 × Arr = AddRange(〜〜〜)
○ Arr.AddRange(〜〜〜)
800*600のjpgを640*480にしてpngなどで保存するにはどんなコードを書けば
BitmapクラスとGraphics.FromImage
VBでChar.IsDigit("66t"),Char.IsDigit("3E5")がTrueになりますが、普通に10進数の数字だけで判断することはできませんか?
普通に10進数の数字だけで判断してるけどな、Char.IsDigit なぜそれでTrueを返すかはヘルプ見ろ Int32.TryParseとかで変換しちまえばいいんじゃね
それで実現できました。ありがとうございました。
テキストボックスを、選択・コピーできるテキスト表示領域として使おうとしています。 したいこと @キャレット非表示 A方向キーでのキャレット移動無効化 BSHIFTでの選択無効化 @はAPIのHideCaretで出来たのですが、他がさっぱりわかりません。 TextBoxBaseの該当メソッドをオーバーロードすればいいのでしょうか? そうだとして、そのメソッドはどれでしょうか?
キャレットを非表示にしてどうやって選択すんの?
>>589 表示されて無いだけで選択は出来ます。
つまり、マウスだけで選択できる状態にしたいのです。
Shift キーと方向キーを殺せばいいんじゃね?
おすすめの 有料追加コントロール 無料追加コントロール 紹介して
>>591 方向キーでスクロールをしているので、それが出来ないんですよね……
なーんかユーザビリティを毀損するとしか思えない妙な俺様仕様に こだわる人って時々いるけど、正直理解できんな。 明らかに便利で合理的な仕様であれば実現に向けて努力するのもわかりもするんだが。
>>593 殺した上でスクロールスりゃいいだろハゲ
そんな Windows の流儀にそわない動きしたいなら、少しは自分で工夫しろよ。
WebBlawserもどきを作りたいって言ったほうがよかったかな。
WebBlawser・・・
Browser....
Brassiere...
Brothers...
>>596 ブラウザは普通シフトキーは受け付けるでしょ。
だから単に→←キーだけ握りつぶせばいいだけじゃないの?
ま、別にカーソルキーで範囲選択ができても何も困らないと思うが・・・
ウソつかなくてok
604 :
493 :2009/10/18(日) 02:07:29
T型の変数どうしの演算を行うことは
>>514 の方法でできました。
次に内部メソッドとして「要素の平均」を実装しようと試みています。
作業用のT型の変数に 0 をそのまま代入したり特定の数値で割るとエラーになりますが、これも同様の方法で回避できるものでしょうか?
0の代わりにNothingを代入する。 特定の数値で割るのは当然Expression Treeで生成したコードを使えばいいだろ。
策士策に溺れる、っていうのはこういう人のことを言うんだろうなたぶん。
確かに手段が目的になっている気がする。
608 :
605 :2009/10/18(日) 13:03:30
あー最後に要素数で割るのが難しいな public static readonly Func<T, int, T> DivideByInt32; static Operator() { var left = Expression.Parameter(typeof(T), "left"); var right = Expression.Parameter(typeof(int), "right"); DivideByInt32 = Expression.Lambda<Func<T, int, T>>( Expression.Divide(left, Expression.Convert(right, typeof(T))), left, right).Compile(); } これ使えばいけるはず でも平均値だったらLINQ使ってitems.Average()でいいと思う(itemsがジェネリック型の場合は不可)
Timer_Tickイベント実行中はTimer1.EnabledをFalseにしますか? Falseにしない場合、Timer_Tickプロシージャ内の処理が多くて次のTickとダブってしまうこともありますか?
Falseにする必要はありません。 Timer.TickはUIスレッドで実行されるので次のTickとダブることはありえません。
ありがとうございます。了解です。
.NET 一般のことかもしれませんが、String.Format の逆、C の scanf のようなメソッドや関数はありますか? こんな感じで使えればいいなイメージ: Dim s As String ' フォーマットを表す文字列 Dim inputString As String = getInput() ' たとえば s のフォーマットでファイルに保存してあるものを読み込んだ結果 Dim i As Integer Dim l As Long Dim d As Double inputString.hoge(s, i, l, d) ' i, l, d に値が入る Dim o As String = String.Format(s, i, l, d) ' o = s となる
正規表現でキャプチャしてInt32.Parseとか使ってパース
614 :
デフォルトの名無しさん :2009/10/18(日) 16:47:54
■最近VBAを勉強し始めました、初心者です。よろしくお願いします。 VB.NETというのをしりました。 wiki等には、VBと違いNET関係の機能が追加された、とかいてありました。 いったいこの.NETではなにができるのですか? VBのことも詳しく知りませんが、 わかりやすく.NETのすごさを教えてください。 例えば、、、こんなことができるよ。、、、みたいな感じで。 そのすごさや有用性のようなものを簡単に教えてください。 すみませんが、よろしくお願いします。
こんなことができるよ、以前に、すでに VB はなくなりました。 あとは、.NET 上で動く VB (いわゆる、VB.NET) しかありません。
ぶっちゃけ似た構文を採用しただけで殆ど別物。 JavaScriptとJava位の違いはある。
何が出来るってまた難しいことを。 大抵のことは出来るw
618 :
デフォルトの名無しさん :2009/10/18(日) 18:18:06
>>615 ”すでに VB はなくなりました”
→ .NETでもVBみたいなことはできるんですよね??
>>617 ■例えば、自動で発動するようにして、
あるサイトに自動ログインして文章をコピーして
エクセルシートに貼り付ける。この作業を1時間おきにしたいんですけど可能?
つーかこのくらいはVBAでもできちゃうのかな??
わからんので教えてください。
できる。
620 :
デフォルトの名無しさん :2009/10/18(日) 18:24:12
自動ログイン〜〜〜はVBAでもできちゃう??
VBA だろうと、XmlHttpRequest() すればいいだけ。
自動ログインはちょっと難しい
623 :
デフォルトの名無しさん :2009/10/18(日) 19:20:47
>>622 ちょいむずい、、、はVBAだと?
.NETならできちゃう?かな?
TextBoxをMultiLineにしてあるのですが、AppendTextで100行に達したら上から消していきたいのですが どんな関数を使えばスマートにできるでしょうか?ヒントください。
>>610 Application.DoEventsとかやってると割り込まれるが。。。
>>624 正規表現でも使うか。
っていうか素直にListBox使えば?
特に何かした覚えが無いのに何故かデバッグの時にbinに作るのとbin\debugに 作るのがあるけどどこで設定するんでしたっけ
vb5で作ったソース(frmファイル)があって、 使えるとこは使いまわしていきたいと思ってます。 が、vb.netだと、frmファイル読めないですね。 何か変換するいい方法ありますか?
630 :
629 :2009/10/19(月) 23:28:18
vbpを開くと普通にアップグレードしてくれるね とりあえずやってみる。
動かないけどね VB.NETはVBと見た目が似てるだけと考えた方がいい
質問させてください Visual Studio2008を使っているのですが、動画をプログラム内で表示させたい場合はどうしたらよいのでしょうか? たとえばmpeg2形式の動画をVBで作ったプログラム内で再生させたいのです。
ありがとうございます 動画だとパソコン側でデコードしてくれるから上記の通りでいいと思うのですが LANや同軸などで繋ぐライブカメラなどの映像をVBで作ったソフトウェア内に埋め込みたい場合はどうしたらよいのでしょうか? LAN、同軸などの映像をデコードしてくれる専用のハードウェアがいるということなんでしょうか? そもそも基本的にぜんぜん分かっていないのですが、こういった関連を調べたい場合は何と調べたらよいのでしょうか?
「ソフトウェア内に埋め込む」って何?
VBで作ったソフト上に映像を表示したいということでした。
DirectShowを使うのが一般的だけど DirectShow自体の知識とDirectShowをVBで使うための知識と両方必要だし大変よ > そもそも基本的にぜんぜん分かっていないのですが、こういった関連を調べたい場合は何と調べたらよいのでしょうか? オレ用語を排除して一般的な単語で検索すりゃ大体引っかかるもんだ 「VB.NET WEBカメラ 再生」とか
抽象的過ぎて、考えるだけ時間の無駄だな。 とりあえず市販のライブカメラを片っ端から調べればいいんじゃね? VBでどうするかなんてずっと後の話だ。
OpenCVが一番簡単だよ
VB.NETというより.NETアプリのことなんですが ネットワーク上の他のPCの共有フォルダに置いた.NETアプリの実行ファイルを ローカルにコピーせずに、共有フォルダ上で直接実行しようとする場合 .NETの設定ツールでセキュリティの設定をしていないと Security.SecurityExceptionが発生して実行できませんが セキュリティの設定等の専門的な操作をせずにこれを回避してアプリを実行する方法は無いのでしょうか?
著名すればいいんじゃない?
署名www
3.5 SP1にしてしまえ。
644 :
629 :2009/10/20(火) 22:41:06
>>631 VB5から、vb.netへの移行企んでみましたが、
全然だめですね。VB6入れろだの、エラーでとまりすぎ。
フォーム生かす以外にアップグレードの使い道無いですね
フォームだけでも変換できる事が驚き
VB6から変えすぎたせいで、VB7が大コケしたからな…。
変えたっていうか一応バージョン番号が続いてるだけで全くの別物だから
別物のクセに名前だけは引き継いだから尚更悪いって話かね
ちゃんとVB.NETって別の名前にしてたよ!
まあ、VB厨の皆様が言うほど変っちゃいないんだけどね。 「大コケ」してるのはVB7以降じゃなくてVB厨の方だろ、っていうw また例のわんくまの人のブログの記事貼っといた方がいいのかな。
.NETの最新機能はC#に任せてVBはVB6互換でよかったのにな
>>640 Win32Apiとか使ってるからでしょ?
VB2008です 壁紙をレジストリいじって変更するプログラムを組んでいます。 それでWallpaperstyleキーを2にすれば拡大できるというのはわかったのですが これは縦横の比を無視して画面を埋めてしまいます。 エクスプローラの右クリのような、縦・横どちらかにあわせるようにするにはどうしたらいいのでしょうか。
エクスプローラで設定してみてどうなってるのか確認したら?
人に配布する時ってobjの中のファイル?それともbin?
セットアッププロジェクト使うがな
657 :
655 :2009/10/21(水) 18:30:39
セットアップは使わない予定です
objもbinの中も同じ気がするんだがwww どっちでもいいんじゃね?
うちの環境でみたら、objの方はTempPEとかいうフォルダが作られてた たぶん配布するのにこんなフォルダは不要だと思うので binフォルダに1票
そういうの除いて配布するもんじゃないの? binの方にもxmlとかpdbとかあるじゃん
発行使えよ。
662 :
デフォルトの名無しさん :2009/10/21(水) 21:03:23
Visual Studio 2008 Express Edition で次のソフトを作るにはどうしたらいいでしょうか。 Windows のエクスプローラーを開いて開いたフォルダ内に下記のようなファイルがあるとします。 1234★日本語の全て.doc 1235★韓国語の全て.doc 1236★英語の全て.doc 1237★フランス語の全て.doc ファイル名は頭に半角数字4桁の後に★がつくように付けてるのですがこれを 日本語の全て 1234★日本語の全て.doc 韓国語の全て 1235★韓国語の全て.doc 英語の全て 1236★英語の全て.doc フランス語の全て 1237★フランス語の全て.doc 左側は半角数字4桁と★と拡張子を抜いて、右側には取得したファイル名を、 その間は上は半角スペースで書きましたがタブ文字で区切ったファイルを作りソフト 自体には表示させなくてもいいので結果をクリップボードへ貼り付けるソフトを作れ ないかと思ってます。 今まではエディタを開いて dir でテキストを取得し編集してましたがこれができると かなり便利です。 なにか具体的な例やアドバイスがあればよろしくお願いします。
プログラミングの素養があれば簡単にできますがそうでなければ遠い道のりです 基礎から勉強する気がないなら作ってくれと丸投げした方がマシだと思います
664 :
デフォルトの名無しさん :2009/10/21(水) 21:29:05
>>663 ちなみにこの手のを格安で作ってくれるとこはどのようにして見つけるのでしょうか。
ソフトウェア屋さんのホームページとか見ると大がかりなのしか作ってないみたいで。
665 :
デフォルトの名無しさん :2009/10/21(水) 21:29:54
>>663 正直に言えば、このソフトに限ってはすぐに欲しいです。勉強はそれから
取り組みたいので。
作った アップするからちょっと待って
標準入出力経由のWSHで十分な気がしないでもない。
669 :
662 :2009/10/21(水) 22:54:59
>>666 >>668 ありがとうございます。結果を見てみたのですが
日本語の全て 1234 ★ 日本語の全て.doc
韓国語の全て 1235 ★ 韓国語の全て.doc
英語の全て 1236 ★ 英語の全て.doc
フランス語の全て 1237 ★ フランス語の全て.doc
(区切りはタブ)になってます。下記のように
日本語の全て 1234★日本語の全て.doc
韓国語の全て 1235★韓国語の全て.doc
英語の全て 1236★英語の全て.doc
フランス語の全て 1237★フランス語の全て.doc
みたいに(区切りはタブ)になれば嬉しいのですが。CS ファイルというのは VB ではなく
C 言語か何かのファイルでしょうか。
670 :
662 :2009/10/21(水) 22:57:47
>>667 WSH を検索してみたのですが Visual Studio 2008 Express Edition より
取っつきやすいのでしょうか。
>>669 それただの表示の問題
余計なスペース入れたりすると扱いづらくなる
>>670 WSHは回りくどい。VB(6)の経験がある人には分かりやすいだけ。
PythonとかRubyとかPerlとか有名な他のスクリプト言語の方がいいと思う。
672 :
662 :2009/10/21(水) 23:16:11
673 :
668 :2009/10/21(水) 23:34:03
674 :
662 :2009/10/21(水) 23:46:35
>>673 ダウンロードして確認しました。ありがとうございます。まさに求めていたプログラムです。
ちなみに数字の桁数が変わった場合とか数字の後の★が別の名前になった場合を
ソースプログラムを見て自分で修正したいのですが、cs ファイルはどのようにして実行
ファイルの exe にするのでしょうか。Windows Vista の HomeBasic を使ってます。
今回は Visual Studio 2008 Express Edition の中から VisualBasic を入れましたが
ホームページで説明ページを見たりしても見比べとか大変そうなのでやはり書籍を
購入する必要があると感じました。
675 :
662 :2009/10/21(水) 23:48:21
>>673 すみません、修正版にはソースファイルがないようなので合わせて頂けないでしょうか。
676 :
668 :2009/10/21(水) 23:59:37
677 :
662 :2009/10/22(木) 00:10:44
>>676 ありがとうございます。今は中を見てもほとんどわからないですが、このようなツールが作れると
とても便利だと思いました。楽しみになりました。
優しすぎだろ…
679 :
523 :2009/10/22(木) 02:35:37
プロセスのリターンコードの返却方法について教えてください。 プロセスで返却値を設定して終了する場合、メインスレッドから「Return 結果コード」、 「Environment.Exit(結果コード)」等で呼び元へのリターンコードを返却することができました。 しかし、プロセスのメインスレッド実行中、別に発生するイベント内で異常が起きた場合に、プロセスを 終了し、結果を呼び元に返却する機能が必要になりました。 異常が発生したイベント処理内で「Environment.Exit(結果コード)」としたところ、プロセスは終了したの ですが、プロセスの呼び元にはゼロが返却されてしまいました。 メインスレッド外からプロセスを終了して返却値を戻すためにはどうすればよいのでしょうか。
いったんメインスレッドに戻せばいいんじゃね?
681 :
デフォルトの名無しさん :2009/10/22(木) 10:27:48
2日考えてわからなかったので質問させてください。 フォーム上でツリーとグリッドを左右に並べて ツリーの展開などの動きとグリッドのデータを連動させたい のですが上手くいきません。。 グリッドのデータは ノードID,親ノードID,レベル,展開FLG,コード・・・ といった感じです。 よろしくお願いします。
スレッドのExit(結果コード)で終了してるな。 imports System.Threading module Program sub Main() dim th = new Thread(addressof Run) th.Start() Console.ReadLine() Environment.Exit(1) end sub sub Run() Thread.Sleep(5000) Console.WriteLine("Exit 9") Environment.Exit(9) end sub end module
>>681 何使ってるか知らないけど
DataGridViewなら
FirstDisplayedCell
FirstDisplayedScrollRowIndex
DisplayedRowCount
とか組み合わせたら出来ないかな?
スペルは間違ってる可能性あるけど こんな雰囲気のやつだっ気がする
684 :
683 :2009/10/22(木) 16:00:57
>>681 骨髄反射でレスして読み返して気づいた・・・
見当違いのことしゃべってるわ
というかノード作るところまでは出来ててその状態をグリッドに表示させたいだけ?
685 :
デフォルトの名無しさん :2009/10/22(木) 16:48:08
>>684 そうです!
開閉に合わせてグリッドも変わるみたいな
感じです。
>>685 それはクリックしたノードの情報使えばいけると思うけど・・・
自分でノード作ってるんなら最初にTAGにでも内容をカンマ区切りとかで入れとくとか
ちゃんとやるなら 選択ノードからParentとかその他のプロパティ使って辿ってくんじゃないかな?
具体的なコードをお求めで?
687 :
デフォルトの名無しさん :2009/10/22(木) 18:42:24
1ビットだけでいいのですが外部のハードウエアの出力を監視したいのですが、 何か簡単な方法(ハードウエア込みで)は有りませんでしょうか? まともにやるならUSB接続の拡張ポートとかを使うのだと思うのですが、 1ビットだけのために買うのもどうかなと思いまして、、、
キーボードのキーを一個外してその接点にでも繋げば?w
>>687 USBとかでいけるんじゃないかな?
どんな外部接点か知らないけどDIOとかでやるとか?
691 :
687 :2009/10/22(木) 22:23:53
おお〜、いろいろ即レスありがとうございます。
>>688 おもしろいっすね。
キーボードだと信号そのままじゃなくてリレーみたいなので繋げばいい?
ONしたままだとまずいかな。
>>689 基本はこれですね。
安いのが有ればいいのですが。
>>690 ああ、PCWatchとかで紹介されてましたね。
3000円位で買えそうですね。
これで行こうかと思います。
PICとかでもUSBドライバ付きで安いのって有るのかな?
マウス1個潰してclickdownイベントでやると\500程度 トラ技付録のTinyマイコンで、もう売ってないか 外には出てないけどマザーにはレガシなパラレルポートが自縛霊として生き残ってるハズこいつを叩け
>>691 そのHWの「外部のハードウエアの出力」がOC出力なら
232CのDTRとDSRのを使えば追加ハードなしで出来ると思うよ。
安物マザーじゃなきゃまだCOMポートって標準で付いてくるんじゃないのかな。
694 :
691 :2009/10/22(木) 23:04:05
皆さん、いろいろとご存知でw
>>692 USBマウスとかキーボードって複数繋いだらどうなるのでしょう。
>>693 なるほど。232C-USB変換ケーブルでも使えるってことですね。
えーとDTRとかDSRってどうやって読めばいいのしょうか。
>>694 >えーとDTRとかDSRってどうやって読めばいいのしょうか。
Data Terminal ReadyとData Set Readyだったかな?
まああんまり深い意味がある頭辞語じゃないと思うからそこにこだわってもね。
そのラインの操作法はMSDNのSerialPortクラスにも載ってるはず。
ただ、232Cを使う方法はお手軽だけど、既に書いたようにOC出力か12V出力でしか使えない。
VBでイーサネットを使った通信を行いたい場合、何を勉強したらよいのでしょうか? シリアル通信はコンポーネントが用意されているので分かりやすいのですがイーサについてはまったく・・・ TCP/IP??ソケット通信?
socket
OSI参照モデルとかの基礎をまずかじるぐらいはするべきじゃないか?
699 :
デフォルトの名無しさん :2009/10/24(土) 13:33:38
>ネットの変換のページ ってなんだ?そこの管理人に文句を言ったらいいんでない。
C#3.0に対応してないんだろ
703 :
デフォルトの名無しさん :2009/10/24(土) 22:08:59
フォームAを継承したフォームBを作ろうと思っています。 フォームAには引数付きのコンストラクタのみがあります。 フォームBのコンストラクタで,フォームAのコンストラクタを呼び出して初期化しています。 ここまでは大丈夫だと思うのですが,フォームBのデザイナ画面を出そうとすると 「データが失なわれる可能性を防ぐため、デザイナの読み込み前に以下のエラーを解決する必要があります。 型"フォームA"にコンストラクタが見つかりませんでした。」 となってしまいます。 引数付きのコンストラクタがあるフォームは継承できないのでしょうか?
フォームの継承自体やらない方がいい 共通部分があるならユーザーコントロール使えばいい
705 :
703 :2009/10/24(土) 22:12:43
>>704 了解しました
ユーザーコントロールはまだ知らないので
今から勉強したいと思います
フォルダ内のファイルを一つずつ調べるループなのですが どちらの方が速いでしょうか? Dim filename As String filename = Dir("c:\hogehoge\") Do While filename <> "" Console.WriteLine(filename) filename = Dir() Loop Dim filename2 As String() Dim str As String filename2 = IO.Directory.GetFiles("c:\hogehoge") For Each str In filename2 Console.WriteLine(str) Next
どう考えても後者の圧勝
やってみればいいじゃん。
試すまでもないだろ 結局DirもPathクラスを使って実装されてるわけで,前者の方が無駄な処理が多いだけ
>>703 継承できるけど、デザイナで表示できない(対応していない)だけ。
>>703 フォームAに引数付きと無しのコンストラクタを用意しとけば良いんでないか?
デザイナが引数無しのコンストラクタを使って画面を描画してるので無しは駄目なんでしょ。
あ、引数なしのがデザイナから呼ばれると引数を使って追加のロジックを 入れているところがエラーになるのでDesignMode プロパティ で回避する必要があるかも
VB2008の引数を三つ取るIf文なんですけど これは戻り値を受け取らないと使えないの?
副作用があるようなのを三項演算するな
>>713 そのIfは演算子。戻り値じゃないから無理だな
IIfは関数だから、戻り値は無視できる
というか、値がいらないならIf Then Else でいいと思うんだが
>>714 「副作用」が何を意味するかは関数型言語を知らないVB厨には理解できないと思う。
別に副作用は関数型言語に限った話じゃないけどな。
そんなことより、新型ウィルスワクチンの副作用が心配
>>718 死人が出るだろうね〜
ま、オレの所までには配給来ないだろうから関係ない。
Ifは括弧付けないといけないのが嫌だな ショートサーキットに見えない
Form1にBottan1を貼り付け Form2にtextbox1を貼り付け Form1のBottan1を押すと dim frm2 as Form2 frm2.textbox1.text="abc" が動作させたいのはなぜどうするばいいのや
Form2.Show() Form2.textbox1.Text = "abc" VB以外でこんなことやったら死刑だけどね
ふーん
bottantって猪料理か何かかね
>>722 そんなもんで死刑になるか〜
日本で死刑になるのは殺人罪か国家反逆罪だけだ。
>>724 古代ラテン語らしいよ。
日本語もかなり微妙だし、過去から飛ばされて来たのかね?
インターネット上のファイルをダウンロードする際にファイルがあるかないか分からない状態の場合 無いファイルをダウンロードしようとした時の処理がしやすいダウンロード手順はどんな方法でやれば良いでしょうか 無い場合はできるだけ手早くないことを認識して次の処理へ進みたいです。
なかったら 404 が出るだろ普通。 なので、どの方法を使っても大差ない。
ただのダウソ厨の誤爆かと思った。
確かに
>>728 はエスパー。
フォームを常に最前面に設定してあるのですが、他のアプリ(フルウインドウ) を起動すると裏にいってしまいます。 どのようにすれば常に最前面にくるようにできますか?
MCI命令で無圧縮waveファイルを開いても、音量調節が出来ないのですが出来るように出来ますか? また、一部のVBRなMP3ファイルが再生されません。
systemIOでtxtに書き出した"500"というデータが readしたときには先頭のみが文字コードとして認識されてしまいます。 500という数値として読み込みたいのですがどうすれば
735 :
733 :2009/10/27(火) 00:30:58
事故解決しました、
プログラムの中からBIOSに触ることは出来ないよね?
>>737 RTCAlarm触ってオンタイマーに出来ないかなと
昔ThinkPadでWindows上からBIOS設定出来るのがあったけど
あれは例外だよね
>>740 ありがとうございます
参考にしてみます!
↑こういう人は掛け声だけは威勢がいいが 参考にするとは言わない。みますと云って逃げに走る 決して最後まで完結させない。きっとそうだ。そうに違いない。
HAHAHA
Webカメラの映像を映すソフトをVBでプログラミングしたい場合はどうしたらよいのでしょうか?
USBカメラ プログラミング とかでググれば腐るほど出てくるだろ もちろんVBは見つからないかもしれないが,最低でもC++だろうとC#だろうと読める程度のレベルでないとどうせ無理だ
またお前か
.NET2008でEthanetを使った通信を行いたい場合 Winsock以外に方法はありますか?
はい。
それはなんですか?
あ、未完成なWinInetは除いてです。
普通に.NETの標準ライブラリでできるだろ
System.Net.Sockets.Socket クラスでいいじゃないの。 Rawソケットもサポートしてるから、大抵のことはできる。 あれも内部的には Winsock のスタック使ってるから嫌だ、っつー話なら そりゃー無茶だと答えるしかないが。
754 :
デフォルトの名無しさん :2009/10/28(水) 16:29:13
はじめまして 質問させてください。 Windows7でタッチパネル操作をハンドリングしたいのですが VB.netで実装する場合は マウスクリックやマウスオーバーで画面操作を取得できるのでしょうか? 現在、開発要件で確認を求められている状態です。 どこにも情報がない有識者の方助けてノдT
普通のはそれでいい。マルチタッチは知らん。
Visual Studio 2010を待て
757 :
デフォルトの名無しさん :2009/10/28(水) 16:34:22
>>755 マルチタッチはいらんので問題なすです。
ありがとうございます
非常にたすかりました。
758 :
デフォルトの名無しさん :2009/10/28(水) 16:37:07
む・・・まとめると以下でFA? 1、タッチパネル式マウスと同じ動きで乳首を攻めるエロゲ開発 通常のマウスと同じ 2、マルチタッチで乳首つかむエロゲ開発 Visual Studio 2010を待て
画面を指でタッチするとソフトが反応するプログラムはVB.NETでどう書けば。
まずタッチパネルを用意します
761 :
デフォルトの名無しさん :2009/10/28(水) 21:33:12
>>662 どなたか 662 を実現できるソフトを C# で頂きましたが VB2008 で中をいじれるように
ソースで頂けないでしょうか。
C#らしい固有の機能は全く使われてないのでVBでもほとんど変わらないぞ 弄れるレベルになればだいたいC#でもわかる
C# から VB に変換するツールとか Web サイトとかあるんだから、 少しは自分でやれよ。
他人にやらすなら金払えよ
作ってもらってから今までちゃんと勉強してたら C#わからなくてもなんとなく自分でVBに書き換えられるくらいのレベルには十分なってたはずだぞ
つーか PCで出来る事はCかアセンブラさえあれば全部書けるわけよ ActiveXもな
VB スレで何言ってんの? バカなの? 死ぬの?
>>767 開発もやったことない聞きかじりの知識だけのやつが言ってるんだ
あんま相手にしたら開発能力のレベルが下がるぞ
769 :
デフォルトの名無しさん :2009/10/29(木) 22:46:57
>>766 おおっさくらたんのエロ画像もCで書いてアプッてください
770 :
デフォルトの名無しさん :2009/11/02(月) 06:24:27
Visual Basic プログラマだと思い込んでいる、 ただの Visual Basic ユーザー、Visual Studio ユーザー って多いよね。 プログラマではなく、ただの統合環境(IDE)ユーザーでしかない人。 IDEをそれなりに使いこなして、アプリっぽいものを作れる人と、 IDEがあってもなくても、アプリをガツガツ組める人とは 雲泥の差がある。
で?
目的のものが作れればいいじゃない 手段に拘るな
「で?」←この返しは、ゆとりの反撃のような幼稚な煽り返しだと思っていたが こうまで同意する「で?」は初めてだ
774 :
デフォルトの名無しさん :2009/11/02(月) 13:16:11
>>728 httpはそうだけど、ftpはちゃうんじゃね(調べるのめんどい・・)
>>772 同じ目的(動作)のものが
同じ時間で
メンテしやすいもの
同じ目的(動作)のものが
同じ時間で
グッダグダで再利用もクソもなく、処理時間も無駄に長い
どっちがいい?
例えばIDEだけでも掲示板程度なら簡単に作れるだろうがそんなんで書かれたクソソースコードは万死に値すると思う
>>775 後者を経て前者になるだろ
いきなりいいプログラム書けるわけあるか
俺はクソコードよりソフトの出来だと思う 結果良ければどんなコードなんて関係ないね
>>776 へ?
どんだけ時間のないプロジェクトばっかやってるブラックだよ
プログラマは、こうじゃないと認めないっていうタイプ多いな。嫌われるタイプ。
無能はスレ違いだって事にも気付けない。
781 :
デフォルトの名無しさん :2009/11/02(月) 19:15:07
正しい意見に統一する必要があるからな
783 :
デフォルトの名無しさん :2009/11/03(火) 13:22:59
>>777 気持ちは分かるけど、くそコードのメンテやらされるのもたまらんぞ
#作るだけで、メンテしない立場ならそういうと思うけどね
俺は糞コードめんてするの楽しいぞ 工数も糞だからってことで水増し請求できるし
IDEだからクソってわけじゃないだろ普通は。
質問です。 ・同じ一連の処理を短いコードで呼び出せるようにしたいのですが、どうすればできますか? ・設定ファイルをLocal Settings内ではなく、exeフォルダに置くことはできませんか?
787 :
786 :2009/11/04(水) 07:35:59
すみません。・1は寝ぼけていたので撤回です。
>>786 >・設定ファイルをLocal Settings内ではなく、exeフォルダに
「アプリケーション構成ファイル」?
なら、設定の「スコープ」を「アプリケーション」にすればそっちを使うようになる。
設定ファイルって未だにiniファイル使ってるけど、 vista以降ってProgramFiles以下に書込みできないんだねぇ… ちょっとはまった
XPでも2kでも普通のユーザは書けねぇよ
そういや2008はマニフェスト書かなくてもデフォでUAC対応になってるんだっけ? それともその辺りは2005から変ってない?
2005は知らんが、2008はプロパティからマニフェストのテンプレートを表示できるようになってるな
あーデフォでリダイレクトをキャンセルするマニフェストがくっついてるんだね。 マニフェストファイルを直接変更する必要がある点は変らずか。
ウィンドウズフォームアプリケーション作ろうとしたら ツールボックスってのに大量のツール(ボタンとかテキストボックスとか) あれに自分で何かつくって追加したいんだけどExpress Editionだと自作不可能なの?
できるよ
新規作成にそれようのプロジェクトがあるでしょう。 無料版は知らんけど。
798 :
デフォルトの名無しさん :2009/11/05(木) 16:07:09
TreeView(@Windows.Form/VS2005)についての質問、 指定したTreeNodeを最適な位置にスクロールしたいのだが、良い方法が あったら知りたく。WindowsVistaのExplorerでのフォルダツリーのような 動作を希望。どうもメソッドやプロパティに該当しそうなものがなく。 ググってみたのですがわかりません。
800 :
デフォルトの名無しさん :2009/11/05(木) 16:19:25
>>799 どうもです。ただEnsureVisible()だと長い名前のときに
NodeのImageが左側に隠れてしまうのが不便で、
VistaのExplorerのフォルダツリーのようにインテリジェント風味な
動きをしてちょうどいい感じの見やすい位置に持って行ければベターと
いう思い。見ると適度にスクロールさせられればいいのだが、
どうもスクロール系のメソッドがなさそうに思われ・・・。
801 :
デフォルトの名無しさん :2009/11/05(木) 18:50:57
結局、TreeViewにはScroll系のメソッドはなさそうというのは間違いない ですかね?なんとか見やすい位置に制御したいのだが、やはり無理だろうか?
VB2008Express でD&Dされたテキストファイルの内容を処理するアプリを作成しているのですが、 エクスプローラーからファイルをD&Dすると、処理している間エクスプローラーが固まってしまいます。 この現象を回避する方法はないでしょうか?
>>802 いったん手元にコピーして編集終わってからコピーして返す
>>803 コピーしたファイルを処理するという発想はありませんでした、
試してみたいと思います。
もし他にも方法がありましたらよろしくお願いします。
Control.BeginInvokeしてその中で処理する。
>>805 Control.BeginInvokeについて調べてみました。
正直難しくてすぐには使いこなせそうではないのですが、
関連情報の載ったページが色々と見つかったので勉強してみたいと思います。
情報ありがとうございました。とても参考になりました。
VB.NETってはやってないの? VB.NETやってみたいんだけど、なにを ダウンロードすればいいの?
そんなこと言ってるようじゃ無理 プログラミングで一番大事なのは必要な情報を自分で調べられること
VBっていうと(笑)感が漂うんですがなんででしょうか? C系最強厨が多いのどうして?
VBScriptってVisualBasicScriptの略なんですか?、どこがビジュアルなんですか?
>>810 が勝手に妄想してるだけじゃね?
別に目的のものがつくれれば手段は何でもいいとおもうし普通みんなそうだと思うけど?
VBではC++とかみたいにローレベルな部分ができないとかはあるだろけど
VBも.netになったらC#と変わらんし
>>811 固有名詞だと思えば?
釣りにマジレスしてる俺暇人
つうか落ちた鯖復旧待ちorz
ADO.NETなんかどうなるんだよ。 どこがActiveXだ。
今のVBって製品名というより言語の名前なんだぜ
高校数学でBasicとかいうプログラミング言語をしった人が 初めて手にして違いに愕然とするVB
あのー、VBもC#も変わらんってのは本当ですか? 逆に一番の違いって何ですか? プログラム初心者ですが先輩に「今からならC#」って断言されたんですけど、、、
VB.NETとC#なら、 VB.NETのほうが、 すこしだけかんたんなの?
どっちも知らないなら同じ VBやってた人はVB.NETが簡単 Javaやってた人ならC#が簡単
VBは内部的にどう動いてるかわからなくていい人向け 型とかポインタとかの情報が隠蔽されてる。 ソースファイルも余計なもの見せてくれない。 c#はunsafeでもうポインタ使いまくり。ソースファイルも全部見せてくれる。
いやC#でもポインタはほぼ使わないが C/C++に比べて限定的だからそんなに旨みないし
最近FileSystemObjectを使わないのはなでぜしょう
824 :
デフォルトの名無しさん :2009/11/08(日) 09:36:23
Visual Studio 2008 Express Edition で下記のようなファイルがあり 1234★日本語の全て.doc 1235★韓国語の全て.doc 1236★英語の全て.doc 1237★フランス語の全て.doc ファイル名は頭に半角数字4桁の後に★がつくように付けてるのですがこれを 日本語の全て 1234★日本語の全て.doc 韓国語の全て 1235 ★韓国語の全て.doc 英語の全て 1236★英語の全て.doc フランス語の全て 1237★フランス語の全て.doc 左側は半角数字4桁と★と拡張子を抜いて、右側には取得したファイル名を、その間は上は半角スペースで書きましたが タブ文字で区切ったファイルを作りソフト自体には表示させなくてもいいので結果をクリップボードへ貼り付けるソフトを作れ ないかと思い下記のように書いてみたのですがうまくクリップボードへ貼り付けてくれません。チェックポイントをお教えください。
825 :
デフォルトの名無しさん :2009/11/08(日) 09:42:15
面倒だからソースは見てない。 あのね、切り分けって知ってる? ファイルを列挙するところ、ファイル名を取得するところ、タブを挿入するところ、 クリップボードに追加するところ、などなど・・・ プログラムはいくつかの部分に分けられるのよ。ブレイクポイントを貼って 動作を確認するなりして、どの部分が悪いのか自分で調べてみなよ。
できた Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(".\") for each objf in objfolder.files d = split(objf.name, "★") if ubound(d) > 0 then e = split(d(1), ".") if ubound(e) > 0 then s = s & d(0) & vbtab & e(0) & vbcrlf end if end if next set objIE = WScript.createObject("InternetExplorer.Application") objIE.navigate "about:blank" while objIE.busy wscript.sleep 10 wend objIE.document.parentWindow.clipboardData.setData "text", s objIE.quit
828 :
824 :2009/11/08(日) 10:30:13
>>826 ブレイクポイントを貼るという操作はどのようにしたらよいのでしょうか。
>>827 ありがとうございます。後で試してみます。
VB.netで演習問題見たいなサイトないですか。 1000行以下でかけるような。 仕事でVB.netやり始めて1か月だけど、 クラスが多数で行数も1万超えだし、理解するのに苦労している。 型がクラスとかわけわかめです。
> 型がクラスとかわけわかめです。 演習だのなんだのより先に基礎を解説した本なりサイトなり読むべきじゃないか
>>830 一応クラスやオブジェクトの意味と意義はよんだつもり。
実践でこなしていきたいと思ってるんだ。
そんなことより、まず構造化設計を学べよ。 カプリングとコヒージョン、きっちり身についてる?
VBにはフォームというのが用意されているのでクラスとか気にせずに良い
最近は、結合度・凝集度という言葉は使わないのか。 素で何のことかと思っちゃったよ。
もしかして VBって行の最後に ;セミコロンいらねーのか?
いらねーよ Basicだもん
VB expressみたいにして javascriptを書くソフトってあるの? ボタンをドラッグしてきて そのボタンをダブクリでコードを書く画面になる もしボタンをおしたら、、、 ってところまで勝手にコードが書かれていて、 実際に押されたらどうなるか、って 部分だけを自分で書く、っていう。
>>823 昔のVBからの変換を容易にするために用意されてるだけなので新規に使ってはいけない
そのうち消えても知らないよ
は?WSHのオブジェクトでしょそれ。 何を言ってるんだ。
Windowsのファイル名に使えない文字列は?
\ / : * ? " < > |
それは使えない文字で、使えない文字列じゃなかろう?
>>841 は?何を言ってるんだ。
VB6、VBAのオブジェクトでしょそれ。
>>816 N88とQuickBasic触ってたから大して違和感なかった。
rs.movenextというメソッドは消えてしまったん?
>>850 なんかこういう人ってマジで言ってそうでちょっと怖いw
さっすがVBty(以下略
マジで言ってるな
知ったかで出鱈目言うもんじゃないな
858 :
デフォルトの名無しさん :2009/11/10(火) 15:40:40
VB と VC# の違いについて Visual Studio の各機能を正しく使いこなす知識さえあれば、 VB と VC# の違いはほとんど意識する必要がない。 (それが、VS の売り。) VB プログラミングも VC# プログラミングも 要は Visual Studio をどう使いこなすかにかかっているので、 VB だろうと VC# だろうと覚えることは一緒。 片方覚えれば、もう片方もできるようになる。 別の言い方をすれば、VB プログラマも VC# プログラマも、 プログラマというより、Visual Studio ユーザー。 そこまで Microsoft は開発者をサポートする開発環境の開発に 注力してくれている、ということです。
>>858 >要は Visual Studio をどう使いこなすかにかかっているので、
その程度のアプリケーション開発者にとっては
そうなんでしょうね。
極限の効率化/高速化を求めていない趣味グラマーにとってはVBもVCもかわらん。
極限w そんなの求めるのは趣味グラマだけだよ
>>858 は一体何を言いたかったのか
エスパーしてみると
聞きかじりの知識をひけらかして偉そうにしてみたかった!
ですよね〜?
つうか、今頃顔真っ赤にしてるんだろうなぁ・・・
自作自演自滅ですか?
C++なのかC#なのか
IcoFxで作成したアイコンを読み込むとコンパイル時に”指定されたイメージ ファイルはリソース セクションを含んでいません。” というエラーを起こしてしまいます、サイズは32 x 32で色数はTrue Color + Alpha Channel (32bit) OSはXPSP3、バージョンは2005です
なるほど
同一のプロジェクトでForm1をUI的な表示あるいわ操作用のWindowsアプリケーション、Form2を主に計算処理等を行わせるコンソールアプリケーションで作りたいと思っています この場合この二つのフォームは、それぞれ自動でマルチスレッティングで働いてくれるのでしょうか? 要するにForm1でユーザーが操作しているときにForm2のよりが止まってしまわないかが心配ということです。 よろしくお願いします。
>あるいわ … >止まってしまわないかが心配 止まるに決まってるじゃないか。 プログラマがスレッド作らない限りシングルスレッドだ。
> Form2を主に計算処理等を行わせるコンソールアプリケーションで お前は何を言ってるんだ?
初心者です。質問させていただきます。 1つのテキストボックス内で、 yahoo検索のような、空白によるand、or検索ができる ものを作成したいと思います。 検索機能はできているのですが、1つのテキストボックスに複数語を入力して、 それを認識することができません。何かアイディアがあったらお願いします。 わかりにくくてすみません。
普通全角か半角でSplitしてない?
>>871 全角か半角のスペース
と書きたかったんだい!
>>867 計算がメインなら計算用のスレッドを自分で起動する
間違ってもイベントハンドラの中でやらないように
設定ファイルで、アプリケーションスコープで普通に読み書きできませんか? やりたいのは、ユーザーフォルダではなく.exe直下に設定ファイルを置く事です。
複数ユーザが同時にログオンして起動してたりしたらまずいだろ だから読み取り専用になってるんだろ
ん?
>>874 別に制限が多い「アプリケーション設定」なんか使わず、
自分で設定値の保存/取得をするコードを書けばいいだけ。
シリアル化を使えば手間は「アプリケーション設定」と大差ない。
(むしろこっちの方が手間が少ない場合の方が多い。)
ただ、そうしたところで
- プログラムがProgramFiles以下のディレクトリにインストールされている場合、
Vistaでは実行ファイルと同じ場所に設定ファイルの作成はできない。
- Vistaでなくても、デフォの設定では通常ユーザーで実行した場合は
設定ファイルを作成できない。
ってだけのこと。
アプリケーションスコープの設定はAll Usersに保存されるんだっけ
されないよ。 そもそも変更不可だ。
VBはビジュアルベーシック .NETは何の略?
あえていうならMicrosoft.NETの略
882 :
デフォルトの名無しさん :2009/11/12(木) 23:22:16
Visual Studio 2008 Express Editionでプログラムを作成しています。 開発しているPCではエラーも発生せず動作するのですが あまりメモリを積んでいないPC(512MB)ではSystem.OutOfMemoryExceptionが発生します。 エラーが発生する環境を開発環境で再現するためにApplication Verifierを導入し, Low Resource Simulationにチェックを入れて実行するとSystem.OutOfMemoryExceptionが発生しました。 メモリが足りないことがエラーの原因だと思いますが,FormにPictureBoxを数個置いているだけのプログラムでして それほどメモリを使用しているとも思えません。CloseやDisposeで解放するようにしましたが状況は変わりません。 こうした問題はどうやって解決すべきでしょうか?
>>882 そんなの知るかよ。
それほどメモリを使用しているとも思えません?
煽り抜きでいかにもダメな奴が言いそうな台詞だね可哀想。
884 :
882 :2009/11/13(金) 00:07:33
メモリの使用状況についてですが以下のような感じです。 Working Set - 20,684KB Peak Working Set 20,800KB 仮想メモリ Private Bytes - 18,912KB Peak Private Bytes - 19,088KB 正直メモリ使用量の定義がよく分からないのでそれっぽい値を書き出しただけなんですが コントロールの無いFormを表示させるだけのプログラムで以下のような感じなので それほどメモリを消費してるとは思えないのです。 Working Set - 13,228KB Peak Working Set 13,228KB 仮想メモリ Private Bytes - 14,052KB Peak Private Bytes - 14,052KB
メモリ増やせばいいじゃん
分からないなら分からないって言えよ
887 :
デフォルトの名無しさん :2009/11/13(金) 04:07:16
VB2010ベータ1をインスコして勉強がてら遊んでみた。 最近はマルチコアのCPUも多くなったし、重いループ処理は極力マルチコアで処理させようと考えて 次のようなコードで試してみたんだけど・・・ Private counter As Integer Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click counter = 0 System.Threading.Parallel.For(0, 10000, AddressOf proc) Console.WriteLine(counter) End Sub Private Sub proc(ByVal index As Integer) counter += 1 For i As Integer = 0 To 1000000 Next End Sub counterの値が10000になると思ったのに何故か9998とかになっちまうじゃねえか!この野郎! あと、System.Threading.Parallel.ForEachも試してみたが、これも同じ様に列挙が抜け落ちる! 言うまでもなく例外など出ない(笑) 俺がおかしいのか??それともベータだから未完成ってことなのか?
>>887 そもそも += はスレッドセーフじゃなかったと思う
>counter += 1 Interlocked.Increment(counter) VBってvolatileにあたるのってなかったっけ?
スレッドセーフってなんだよ!意味わからない専門用語つかうな!バーカ
>>887 当たり前であって馬鹿はお前だ。
どういう事か理解できないならパラレルとかマルチスレッド絡みには
手を出さない方がいいぜ。
>>890 MSDNのクラスのリファレンスに必ず「スレッドセーフ」があるんだが。
それでいて”意味がわからない専門用語”といってる時点で、あんたがココに来る資格ないよ
質問しといて分からない単語が出てきたら調べる努力もせずに逆ギレって・・・
0〜9、a〜vの32文字のうち1文字をランダムで表示したいのですが どんな方法があるでしょうか。 下を思いついたのですが、どうも力技な感じがして… s = "0123456789abcdefghijklmnopqrstuv" o = s.Chars(Int(32 * Rnd())
895 :
デフォルトの名無しさん :2009/11/13(金) 22:55:29
VB.NET(VS2005/2008)で画面に用いるコントロールを作ろうとしているのですが ・メモリリークなどのリソース解放漏れ ・同じくリソース使用量の推移 をチェック/トレースしてくれるおすすめツール(プロファイラって言うんでしょうか?) ありませんでしょうか? CLR Profilerなるものを調べてみたのですが何か取っつきずらそうでして もう少しリスト的な出力をしてくれると非常のありがたいです ・個人使用ですが2,3万まででしたら購入することも検討します その場合、トライアル版があるとうれしいです ・ざっと検索してみると日本語版よりは英語版の方が多いようです インターフェースが難しくなければ英語版でもOKです 抽象的質問で恐縮ですが、教えていただけると幸いです
昨日いきなり尋ねてきた知り合いに、「お前はVBの神が憑いてる。VBになれる」 って言われました。彼はそれだけ伝えて帰ったのですがk、VBの神とはなんでしょうか? 彼は、ある上流企業のプログラマーやってたはず。
>>896 神社でおはらいしてもらった方がいいよ。
>>896 ウィルスバスターの神に決まってるじゃないか。
900 :
デフォルトの名無しさん :2009/11/15(日) 10:21:14
>>892 今から VB.NET を趣味で使おうと思うのですが、趣味の人でも質問できる適当な
スレはどれになるのでしょうか。
プログラミング関係の人は排他的、初心者は一人で黙々とネットや本で勉強してるのがいいよ
>>900 ここで良いよ。
ここはVB.NET超初心者からVB.NET中の人まで幅広く居るスレ。
ClickOnceに対応した無料HPサービスっ何か無いかな? ジオシティーズはダメみたいで
別のファイルを自分のEXE内にくっつける方法があったら教えてください。 (ちなみにDLLファイルです。使う時は外に書き出して使います。)
リソースに取り込んどけば?
それはどうやってやりますか?
ヘルプ読めよ。
リソースにファイルとして取り込んで、Properties.Resouces.名前 として取得すれば OK だな。 BinaryWriter でバイト配列をファイルに書き出せばいいし。
>>909 出来そうです。
ありがとうございました
そういうことするとDLLのロードがめんどくさい インターフェイスだけまた別のDLLに定義するとか特殊な扱いが必要になる
入力用のテキストボックスと、出力用のリストボックスがある別の起動しているアプリケーションに、 テキストボックスに値を入れて、出力されたリストボックスの文字列を取得する事ってどうやったら出来るのでしょうか?
>>912 Win32APIのSendMessage等を使ったほうが楽かな。(つーかこの方法しか俺は思いつかない)
AssemblyResolveイベントで自動解決とかできんかな? まあNGENとか使ったら破綻するだろうけどまあ使わんだろうし。 ILMergeでできるものならそれが手っ取り早いけど。
俺も前似たような事やろうとしたわ
>>921 の言うSendMessageで値を送るのは出来るんだが、
特定のコントロールから値を読み込む事ができなくて挫折した覚えがある
πの計算結果をテキストファイルに出力させたいのですが、 計算結果の型をdoubleにすると16桁までしか表示されないと思うのですが、 もっと1000桁,10000桁と表示させたいです。 手法の概略を教えてもらえませんか?
1. 服を脱ぎます。 2. 「.net 多倍長演算」 でググります。
Active Accessibility が結構楽。
フラッシュなどのページを表示すると以降は勝手にデータが送られてきますが このページにWebRequestとWebResponseでアクセスしているのですが 送られて来た際にそれをイベントで受け取る方法を教えて頂きたいです。
WinCEベースの携帯端末(バーコードリーダー)のプログラムに挑戦中です。
AccessVBAなら触れる程度のレベルでは難しかったかも..Invokeがよく判りませぬ..
ソースを書いて良いのか判らないので概略で..
・フォーム(Form1)が1つとその上にテキストボックス(Textbox1)が配置してあります。
・フォームオープン時の処理にメーカーから提供されたAPIを利用してバーコード読み取りを開始しています。
・スキャンイベント(読取完了、エラー、タイムアウト等)発生をハンドラとするプロシージャを同クラス内に1つ作成しています。
・スキャンイベント正常終了時にTextbox1.Textに読み取り結果を入力しようとすると下記のエラーが発生します。
「System.NotSupportedException はハンドルされませんでした。別のスレッドで作成されたコントロールと対話するには、Control.Invoke を使用してくだ
さい。」
そこで
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/312ctrlinvoke/ctrlinvoke.html等を読んで Invokeを使ってみようと思ったのですが
スキャンイベントをハンドラとして動くプロシージャをこの中でどう記述したら良いのか見当が付きません。
もしかしてInvokeの概念を理解し損ねてるのかも..
アドバイスをお願いします。
> スキャンイベントをハンドラとして動くプロシージャ 意味が分からん イベントは動作のトリガーだろ? スキャンイベントのイベントハンドラでInvokeを実行する それともそのスキャンイベントとかいうのはなんか特別な意味でもあるのか
スキャンエンドみたいなイベントがあるのかな? どんなAPIなんかわからんが… 古いNECのCE端末についてたBRは普通にキーボードのイベントと同じで テキストボックスにフォーカスあてとけば勝手にいれてくれたけどな・・・ でCRLF辺り最後にくっつけてその辺で処理のトリガにするとかしてたけど・・
直接フォームのテキストに入れないで フォームのクラスにString変数を用意して スキャンイベント正常終了時はその変数に代入しておいて フォームのスレッドではタイマーでString変数に値が入ったら そのテキストボックスに入れるようにすればいい
なんだ 別スレッドで呼び出されるだけじゃないか
だったら InvokeRequired == true の時にBeginInvokeかInvoke噛ませて呼んでやればいいだけじゃないのか?
portected void イベントなんたら()
if (this.InvokeRequired == true)
{
this.BeginInvoke(なんかのイベント);
return;
}
}
もちろん
>>923 の方法でもいけるだろうけど本当に別スレッドなんだったら一応ロックかませるべきだろうし・・
vbスレにc#で書いちゃうオレカッコいーってかw
できたぜ Imports System.Threading Public Class Form1 Private s As String = "" Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Timer1.Interval = 1000 Timer1.Enabled = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim t As Thread = New Thread(AddressOf hoge) t.Start() End Sub Private Sub hoge() s = "hoge" End Sub Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick TextBox1.Text = s End Sub End Class
先生! 1秒間に2回読んでしまったらどうなるんですかっ!!
そんな早業は人間には無理です!
もしくは運用でカバー
931 :
920 :2009/11/17(火) 11:50:46
うわわ、早速たくさんのレスありがとうございます。 とりあえず頂いたコードでやってみます。 #アホな社員がいるのか会社PCが規制中..携帯からですorz
リストボックスの中の ある項目をひとつ上にずらす方法がわからん
removeしてinsertatで指定の位置に差し込むのはだめ?
VBやC#がリアルタイム処理に向いてないことは何となく分かるのですが、、 どちらかしか分からない初心者に急ぎの仕事でちょっとあせっています。 具体的には50ミリ秒間隔で測定データを読み取って機器を制御します。 処理自体は簡単なものなのですが、そもそも可能でしょうか。 しいて言えばVBとC#のどちらがマシでしょうか?
一緒 でも正確に50ミリ秒毎とかは、 OSとFrameworkとその機器のドライバの都合で遵守できない気がする
一応安定して30mSec程度で稼働させてるけど(つっても1日8時間程度を1年程) プログラムも計量化して止まらないようにしたうえでOSのサービスとかそのへんも全て切らないといけないかな… ちょっとHDDにアクセスされたりしただけで処理遅延起きるだろうし
VB.netでホームページ作成用補助具を作っております´` テキストボックスに入力した文字列でHTMLを吐き出して自動でリンク貼るようにしたのですが・・・。 <p>タグと<br>タグをボタンクリック時にテキストボックスに表示したいのです´` ・行末に一括して<br>タグを入力 ・改行して一行空けたところに<p>タグを一括して挿入とかできますですか?´` できるならヒントだけください´`
クラウドとかArezっていうのは.NETをマイクロソフトが捨てた代わりのもの?
>>938 つ[TextBox.Lines プロパティ]
>>940 Dim i As Integer
For i = 0 To txtWrite.Lines.Length - 1
txtWrite.Text = txtWrite.Lines(i) + "<br>"
Next
こんなんじゃダメですか?´`
ダメでした。
もうちょっと調べてみます。
Lines は読み取り専用なので StringBuilder を用意して、1行読んでは "<br>" つけて AppendLine していって、最後に Text プロパティに再設定すればいいんでは。
一番楽な方法だとこんな感じ? If txtWrite.TextLength > 0 Then txtWrite.Text = String.Join("<br>", txtWrite.Lines) & "<br>" End If 一文字も入っていない時の対応が微妙に格好悪いけどw Array.ConvertAll+ラムダ式とかなら正確にできるけど、そこまでするほどじゃないしなあ。
改行コードを"<br>"+vbCrLfに置換すればいいんじゃないか? 改行コードがCrLfじゃないときは適当に工夫してくれ
VS2005のプロパティで読み取り/書き込みをPublic/Privateみたいに分けたいんですが無理ですか? あと、定数宣言って一般的にはどういう風に皆さんは定義していますか モジュールは使わずにクラスで定義して試用する方がやっぱりよろしいのでしょうか
できる 相応しいクラスに記述する あとConstは普通使わない
定数はReadOnlyフィールドだな Constは余計なトラブルのもとになるので特に理由がなければ避ける
そんな俺様ルールが普通なんだろうか。 俺には合理性があるルールには思えんな。 むしろReadOnlyなんてプリミティブ型で使いたくない
アクセスレベルがアセンブリレベル以下なら問題ないが アセンブリ外から見える定数にConstを使ってはいけない。後で値を変更できなくなる。
>>951 俺が知らない問題についていってるのかもしれんが、意味不明に聞こえるなあ。
「後で値を変更できなくなる」の「後」って何?
コンパイル後のこと?
バージョンアップのことを「後」って言ってるのか?
前者なら、そもそもそれがConstの意義だから何の問題もない。
後者なら、全然そんなはずはない。
変更しなきゃOK
>>953 Constだとコンパイル時に即値に変換されちゃうって訳ね。
なるほど納得したすまん。
皆あまりConstは積極的に使ったりせんのか
Constって積極的につかっちゃ遺憾のか… ちょっと目鱗かなぁ… 不変な物ならつかってもいいですか? ┃゚д゚)チラッ
Friend/Privateならお好きに
そもそも、定数だろうと何だろうと フィールドを公開するなんて下策は普通とらない。
リッチテキストボックスに貼り付けた画像を ファイルに保存したいのですが、どうすればできるでしょうか?
int.MaxValue とかはどうなのよ?
値型や不変オブジェクトの読みとり専用や定数は公開することだってあるわな。
後で後悔するんだよな
【審議中】 ∧,,∧ ∧,,∧ ∧ (´・ω・) (・ω・`) ∧∧ ( ´・ω) U) ( つと ノ(ω・` ) | U ( ´・) (・` ) と ノ u-u (l ) ( ノu-u `u-u'. `u-u'
966 :
デフォルトの名無しさん :2009/11/18(水) 19:22:09
質問です <input type="submit" value="次へ"/> <input type="hidden" value="001" name="action"/> 上のような形のsubmitボタンが複数あり その中からhiddenが001のボタンを自動でclickするようにしたいのですが 方法はありませんか?
ASP.NET で聞けばいいんじゃないかな? つうかhiddenが001てボタンじゃ無くね?
VB2008Expressなのでここで聞こうと思ったのですがスレ違いですか 001ってのは仮です
970 :
デフォルトの名無しさん :2009/11/18(水) 21:12:44
VB2005のテキストボックスを質問させてください。 textboxでpaddingの効果を得るにはどうすればいいのでしょうか? 入力した後の表示で左側を大文字スペース1個分ぐらい開けたいのですがやり方がわかりません。 あとは下側に表示を行いたいのですが、 textalignもleft,center,rightで、 bottomleftがないですし・・・ bottomと同じ効果はpadding上設定で出来るとも思っていますが。 サイトへの誘導などでもよろしくお願いします。
Dim hdoc As HtmlDocument = Me.WebBrowser1.Document For Each frm As HtmlElement In hdoc.Forms For Each elm As HtmlElement In frm.GetElementsByTagName("hidden") If elm.GetAttribute("value") = "001" And elm.Name = "action" Then frm.InvokeMember("submit") End If Next Next こんなかんじでやるしかないんじゃない
>>970 フォーカスはずれたときにTextの頭に全角スペース突っ込んで、フォーカスが来たら頭のスペースを削除するとかw
最近PGやらされてて グローバル変数?でコメントもなくて aflgとかbflgとかわけわかんなくて いたるところで値が書き換えられててわけわかんないんだけど、 こういう分かりづらいソースを保守するコツみたいな物ありますか? まじでPG難しい
中を触らない ブラックボックスとして扱う
976 :
デフォルトの名無しさん :2009/11/18(水) 21:54:34
>>973 ありがとうございます。
その手もありましたね。
いくつか案を出して他者と検討しますので、案に上げさせてもらいます。
今現在は、ラベルのborderstyleで表示枠を作って、
textboxのmultilineで丁度いいサイズを作成し、
全角1マス分ラベルの左側から離して、bottomleftの位置になるように
内部に配置という方法も考えていたり・・・
なんでプロパティでpadding設定できないんでしょうね。。。
他に同じように表示できる方法をご存知の方よろしくお願いします。
977 :
デフォルトの名無しさん :2009/11/18(水) 21:57:29
C#でObject型の変数objに obj = (object)new byte[count]; と代入しているのをVBに変換する場合、 Dim bts As Byte() = New Byte() {} ReDim bts(cbPidl - 1) obj = bts こういう仕方で行なえばよいでしょうか?よろしければご指南ください。
978 :
デフォルトの名無しさん :2009/11/18(水) 21:59:28
>>977 訂正
Redimのところは ReDim bts(count - 1) でした、すみません。
たくさんあるTextBoxにFor Nextで全部に同じ文字を入れたいのですが どうやれば良いでしょうか? For I As Integer = 1 To 50 TextBoxI.Text="" Next こういうことなのですが・・・
>>977 C#と全く同じ
obj = New Byte(count) { }
981 :
デフォルトの名無しさん :2009/11/18(水) 23:04:55
>>979 Dim tbxs As TextBox() = New TextBox() {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5}
For Each tbx As TextBox In tbxs
tbx.Text = "ABC"
Next
>>980 配列のサイズの指定方法がVBとC#では違うよ。
>>981 ありがとうございます。
出来ました。
でもTextBox1, TextBox2, TextBox3, TextBox4, TextBox5。。。。。というのは必ず1度は書かないとだめでしょうか?
>>983 そのTextBoxが、たとえばフォームに配置されている場合
For Each ctl As Control in Me.Controls
If ctl.GetType().Name = "TextBox" Then
CType(ctl, TextBox).Text = ""
End If
Next
といった感じでできるが、Controlsコレクションに追加されているのが前提である(デザイナでフォームに配置した場合は追加される)
>>982 要素型() 変数名 = New 要素型(サイズ) { }
の形式で書けばほぼ同じ
最後の{}が格好悪いけど仕方ない
986 :
985 :2009/11/18(水) 23:11:21
変数名 As 要素型() = New 要素型(サイズ) { } すまんこうだった
988 :
デフォルトの名無しさん :2009/11/18(水) 23:13:45
>>980 どうもです!!countについては一応 count-1 ですよね?
>>985 だから違うよ。
C#(というかC系統の言語)は配列の要素数を指定する。
ところがVBは伝統的に配列の最後のインデックスを指定することになってる。
ヤバイんじゃないの?今までこれ知らずにコード書いてたとしたらw
遅レスだが
>>976 よく使うなら一個そういうカスタムコントロール作っとけば?
フォーカスがない場合はPaint時に自分で全角をくっつけて描画
フォーカスがある場合はコントロールのペイントに任せるとか
992 :
デフォルトの名無しさん :2009/11/18(水) 23:19:31
>>985 ありがとうございました!!同じ形式で書けるのですね!わかりました!
993 :
デフォルトの名無しさん :2009/11/18(水) 23:21:01
>>989 わかりました!!ありがとうございます!!
たしかに真央のジャンプはチートが多いけど、見た目奇麗だからいいのだ。気にしないよ。
すまん、誤爆した。
>>989 >VBは伝統的に配列の最後のインデックスを指定することになってる
つか、大昔のBASICの名残で、配列は1からだったんだよ
なんで指定するのは個数だともいえたわけだ。VBになって、配列は0からか
1からか指定できるようになったんだよ(3からとか10からとかでも指定できたがw)
そしてVB.NETになって0からのみになった
その間上限の指定方法はずっと変わってないんだ
数字の質問で申し訳ないのですが 1.234 と 50 という2つの数字から 1.250を得たいのですが、 1.290と10だった場合は1.310を得たいです。 また1.8と1だったら2.1だったり 桁数が変動するのですがどんな感じでやれば良いでしょうか?
法則がよく分からんが 第一引数の小数部の桁数をm、第二引数の桁数をnとしたとき 第一引数の小数点以下第n位を四捨五入して、それに 第二引数を10^mで割った数値を加えたい?
999
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。