誘導されました。 VB.NETのスレが無いのですみません。 Dim [source] As TreeNode = _ CType(e.Data.GetData(GetType(TreeNode)), TreeNode) 上記の[source]ってどういう意味でしょうか? なぜ[ ] がついているんでしょうか?
例だから 好きな変数に書き換えて使ってください
なるほど 予約語ですか。 ありがとうございました。
Sub Newの扱いは他のメソッドと比べると少し特殊です MyBaseのNew()を呼ぶことで、System.Object クラスの新しいインスタンスを初期化します この作業を行うことで、始めてコンパイラは基底クラスをインスタンス化できるようになります
呼ばなくても引数なしのコンストラクタが勝手に呼ばれるから
>>9 の場合は省略していい
というか普通は省略する
.net初心者です。 ライフゲームをつくっているのですが、For文と配列をつかって、PictureBoxを並べて表示させることはできました。 これでは決まりきった形(正方形や長方形)の背景しか表示できず、ライフゲームとして面白みがありません。 そこで、たとえば猫の写真をもってきて、猫の形の背景をつくりたい(つまり猫の形上でライフゲームが展開したい)とき、 どういう関数を使えばいいでしょうか?
四角や長方形を組み立ててドット絵風に猫の絵にする 猫の絵のjpgやbmp読み込んでDraw関数で書き込む PictureBoxの背景画像を猫にする
「ライフゲームとして面白みがない」というのがよくわからん。外観だけの話じゃないのか? もし猫の写真を認識してライフゲームの初期状態やフィールドの形状を生成するってことだったら 写真をBitmapオブジェクトに読み込む→画像を方眼状に仮想的に分割 →一つのセルに含まれるすべてのピクセルの色の平均を求める→明度かなんかを閾値として生か死か決める →これを全てのセルに対して繰り返す 一番シンプルな形としてはこんな感じだろうけど、いきなりこれだけ組み立てるのはたぶん君にはまだ難しい。
webbrowser1でリンクをクリックしたとき、それをwebbrowser2で開きたいと思っています。 BeforeNavigateという機能を使えばできそうな感じではあるのですが、初心者向けの解説がなく、さっぱり使い方がわかりません・・・ どういったプログラムを書けばいいのでしょうか・・・
VB.netとはあまり関係無いかもしれませんが、 ファイルの作成日時と更新日時の関係がどうも納得行かないので質問です。 Windows環境で特定のファイルのプロパティを見たところ 次の様なタイムスタンプになっていました。 作成日時 2010年9月18日、 12:57:11 更新日時 2010年9月18日、 1:33:45 ここで疑問なのはなぜ【更新日時】が【作成日時】よりも過去になっているのでしょうか? ファイルの 作成 > 更新 という流れなので【更新日付】が 一番直近の日時になっていなくてはならないと思うのですが。
自由にいじれるもんにそんな文句付けても仕方ないが 例えばファイルコピーしたら作成はされるが更新はされない
>>17 ありがとうございます。そーいえばコピーしましたw
別のフォームにあるテキストボックス(TextBox1)の内容を取得したいのですが、 (そのフォームも自作アプリなのですが) GetWindowTextで取得すると、TextBox1という文字列が取得されてしまいます。 起動後に手入力で内容を書き換えても、FormLoad時に書き換えても フォームデザイナに初期に定義されていたTextBox1という文字が返ってきてしまいます。 フォームデザイナであらかじめ変更しておくとその通り返ってくるのですが 実際のそのときのテキストボックスの内容を取得する方法を教えて頂きたいです
別のフォームって別のアプリケーション? WM_GETTEXT使う
ありがとうございます。 SendMessageを調べてみます。
>>19 そのアプリケーションは何で作ったのだろうか?
実はGetWindowTextに渡すウィンドウハンドルが間違っているだけの予感がする。
SendMessageで別のアプリケーションのコマンドボタンを押したくて
ボタンのハンドルにマウスの左ボタン押し、離し(&h201と&h202)を送っているのですが、
ボタンの画像が押されたようになるのですが、押した時のプロシージャが実行されないのですが、
押した時と同じように動かすにはどうしたら良いでしょうか?
キーコードのKeys.Spaceを送ると直接クリックした時と同じ動作をしました。
>>22 GetWindowTextでTextBox1という文字が返ってくるのでハンドルは間違って
いないのではないかと思います。
その後検索してみたのですがGetWindowTextは他のアプリケーションに対しては使用できないみたいでした。
コモンコントロールのボタンならBM_CLICK
BM_CLICKで出来ました。 どうもありがとー
APIに関連した質問ばかりですみません。 下のループでウィンドウテキストがConsoleに正常に出ないのですが どこに原因があるでしょうか? ループの上に一時停止を設定して、F10を押して一つずつ表示させると出るのですが・・・ 早すぎるのが原因のような感じですが、SendMessageは瞬時に次のものは使ってはダメでしょうか? EnumChildWindow()の使い方が不慣れで共有変数の扱いとかが分からないので このような方法で列挙してみました。 Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer Public Const WM_GETTEXT = &HD Dim OYA As IntPtr Dim ko As IntPtr Dim mago As IntPtr Dim WindowTitle As String = "テストフォーム" OYA = FindWindow(vbNullString, WindowTitle) ko = FindWindowEx(OYA, IntPtr.Zero, vbNullString, vbNullString) Console.WriteLine(ko.ToInt32) If ko.ToInt32 = 0 Then Exit Sub Dim a As String= New String(Chr(0), 255) Dim leng As Integer = Len(a) Do Until (ko.ToInt32 = 0) mago = FindWindowEx(OYA, ko, vbNullString, vbNullString) SendMessage(mago, WM_GETTEXT, leng, a) Console.WriteLine(a.ToString) Console.WriteLine(mago.ToInt32) ko = mago Loop
あらかじめフォーム上にある一つのボタンのクローンを50個ロード時に動的に増やすサンプルコード書いてくれませんか?
糞UI乙 それ余計に難しいから最初の一個のプロパティやイベントハンドラもコードから設定した方が早い
>>26 2バイト文字を扱うのなら---Aではなく---Wをつかうべきでは?
>>26 それと、両方の文字セットが使われる可能性があるのなら、DeclareじゃなくDllImport属性つけてCharSetをAutoにしたほうがいい。
DeclareでもAuto修飾子があるよ
32 :
デフォルトの名無しさん :2010/09/25(土) 21:23:52
ちょっと素朴な疑問なんだけど ClientRectangle.Locationプロパティでコントロールの原点を取得するのって何か意味あるの?常にx=0 y=0だから、もし座標変換や座標計算で使用する場合 いちいち取得しなくても直接 x=0 y=0 でやったらだめなんかなぁ? それとも何か特別な時に変化とかするの?わかる人教えてください 長文すんません
>>33 素朴に質問する前に、MSDNライブラリのControl.ClientRectangleの項は読んだの?
読んでないでしょ?
MSDNライブラリも読まずに質問するって面の皮厚過ぎないか
>>34 回答もできないやつに限ってOO読みましたかとか?いう
クソだねカスだねさらにうなら病院行った方がいいね
呼んだからしてんじゃねーの? このプロパティによって返される四角形の左上隅の座標は (0,0) となります。 クライアント領域の左上隅の座標は0,0だから当然そのコントロールの右下隅はコーンとロールの Sizeプロパティで取得できるし決め打ちで左上隅を0,0にしてもサイズ計算はできる ただし、クライアント領域を絶対領域に変換する計算をするにはClientRectangle使ったほうがスマート 両方参照するコードだと長くなるから
VB2005を使ってRS232C接続機器の制御用アプリを作っています。シリアルポートを直接制御している部分はDLLになっており、 別担当者が開発しています。 問題は、そのDLL内のあちこちでDoEventsを呼び出していること。シリアルがらみなので別スレッドで動いているにもかかわらず、 何かしらシリアルデータのやり取りが発生するとDoEventsを呼んでくれます。 非同期にDoEventsが呼び出されるおかげで、アプリの終了処理中などウィンドウの構成やら何やらが変化しているときにも、 非同期にイベント処理が走ってエラーが出ます。 そこで、対処療法ですが、フックするなどして、DoEventsを有効/無効と切り替える方法を教えて頂けないでしょうか。 DoEventsOff():DLL内ルーチン呼び出し:DoEventsOn()、みたいな感じでDoEventsの無効有効を切り替えるイメージです。 ここからは言い訳。 本来はDLL内でのDoEventsの呼び出しを止めるべきなのですが、残念ながら、DLLのメンテ担当者にその気が無いのです。 部署内での打ち合わせでDLLの改善を提案したりしたんですが、本人の作っているアプリでは個別に回避処理を入れるやり方で対応できている、 DoEventsを止めるとGUIの動きがぎこちなくなるからダメだ、という事でやはり拒否。上長も、このDLLは別部署でも使っていることもあり、既にリリースしているDLLを 差し替えることにはかなり否定的な立場をとってます。 ここは気合いで同機能のDLLを作って・・・ということができればカッコいいんですが、DLLを置き換えると、メンテ業務や部署内外への周知やサポートも一緒に 引き継ぐことになっちゃうので、二の足を踏んでます。 現時点ではそのDLL担当者がこういう雑務も引き受けてくれてるので、やはり強いことは言えません。 ということで、質問に戻りますが、DoEventsをフックし、有効/無効を切り替える方法を教えて頂けないでしょうか。 よろしくお願いします。
>>41 メソッド呼び出しのフックなんて危険なことがそう簡単にできると思えないなあ。
というか、DoEventsなんか使うあなたの同僚もおかしいけど、
こう言っちゃなんだけどDoEventsで動作がおかしくなるあなたの担当分のコードも
問題あると思うよ。
DoEvents呼んだって、非同期的にイベントが発生したりしないよ?
だってDoEventsの機能は「メッセージ キューに現在ある Windows メッセージをすべて処理します。」、
つまり、DoEventsを呼んだ結果発生するイベントは、Windowsメッセージに関連付けられた、
UIスレッドで発生するイベントだけだから。
何か勘違いがあるんじゃないの?
確かに、非同期といってもよっぽど頻繁にDoEventsが動いてないと 変な状況が目立って出るはずありませんね。 たしかに、まだまだ見直すところがありそうです。 ちと頭冷やして、ちゃんと構成しなおしてみます。 ありがとう!
どんなエラーなのか分からないけど、別スレッドでDoEventsを呼んだとしても、 UIスレッドには影響ないだろ。別スレッドでDoEventsを呼んで、状況が再現 するか試してごらん。多分影響ないから。 しかし通信中に迂闊にDoEvetnsなんて呼んだら、まともに通信できなくなるだろうに。
というか、DoEventsなんか使うあなたの同僚もおかしいけど、 その同僚の代弁をすると、 ポーリングしてるようなぐるぐる処理の場合 DoEventsやめたら非常に楽しいことになるけどいいのかね?
46 :
41 :2010/09/27(月) 12:30:07
結局、別スレッドとかは関係ありませんでした。そもそも、無限ループでリアルタイムモニタの通信を行い、DoEventsを定期的に呼んでGUIを動かし、ボタン押 下などへの応答は自前イベントで処理する、という思想で作っていたようです。 VB6の頃から試行錯誤してきたソースを使っているので、こういう構成になっているとの事。 役に立つことのある情報とは思えませんが、参考までに具体的な話を。 ・制御対象のリアルタイムモニタのため、単純な無限ループで繰り返しシリアル通信を行う。アップデート間隔をできるだけ短くする為の様です。 ・GUIが固まるので、シリアル通信のDLL内でDoEventsを呼んでいる。(シリアルにコマンドをライトし、リードで応答を待つ場合など、必要な応答データが揃 うまで繰り返しリードし、その都度DoEventsも呼び出している模様。) ・フォームに配置されたボタンを押すと、制御対象に設定を書き込んだり、リアルタイムモニタとは別のデータを読み出したりするシリアル通信を行う必要が ある。そこで、自前のイベントとイベントキューを作って、上記の無限ループでこれらの自前イベントを処理することで対応している。 ・その他のイベントについては、普通のスタイルでハンドルを定義しているので、たまにイベント処理が破綻するが、そういうのは見つかるごとに対応している。 (一時的に上記ループを停止するなど) 私がこのあたりちゃんと把握せずに、コントロールを追加したときにハンドラ内でシリアル通信を起動してたので、変な事になってたようです。 しかし、コントロールを追加するたびに、上記の自前イベントを拡張しないといけないのは面倒ですが。 もうちょっと頭を整理してから対策してみます。 お騒がせしました&ありがとうございました。
クラスライブラリ(プロジェクト名:xlsworks、クラス名:xlsjobs)を作成してm COMオブジェクトの「Microsoft Excel 11.0 Object Library」を参照しました。 で、そのクラスを別のWindowsApricationからプロジェクト参照で呼び出して使用してるんですが、 そのクラス内で所得できる、 Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter のような、列挙体で設定されてる数値は、 WindowsAprication側からは参照できないんでしょうか?
スレッドを立ち上げて待機状態にしてメイン側から必要な時だけ 動かしたいのだけどそういうスレッド間の同期とる場合もセマフォとか 使うのでしょうか
>>47 クラスライブラリのプロジェクトにIDEが自動作成したdll(ファイル名の一部に"interop"が
入ってるやつ。たしか3つぐらいあるはず)を、Windowsアプリのプロジェクトから参照すればOKなはず。
byval/byrefについて、stringの場合はbyvalで渡す方が一般的でしょうか?
引数全般ByValが基本だよ
ありがとうございます!
ttp://support.microsoft.com/kb/129931/en-us?fr=1#top VB4時代のこんなの見つけたけど、今は大丈夫だろうと思ったら
Sub Main(ByVal cmdargs() As String)
Dim sw As New Stopwatch
Dim a(50000000) As Integer
sw.Restart()
For Each i As Integer In a
a(i) = i
Next
sw.Stop()
p(sw.ElapsedMilliseconds)
sw.Restart()
For i As Integer = 0 To UBound(a)
a(i) = i
Next
sw.Stop()
p(sw.ElapsedMilliseconds)
Console.Read()
End Sub
何度試しても、キャッシュを気にして順番を変えてみても
for eachのほうが遅い
今でも配列にはforを使うべき?
C#だと最適化されて同じになるんだけどな ちゃんと型指定されてるからVBだから最適化できないってことはないはず コンパイラが馬鹿なんだろ
うちの環境だと差は出ないな。 VSのデバッグモードで動かしたりしてない? XPSP3, .NET4.0でコマンドラインからoptimizeコンパイル、実行。 最初のループだけ早くなる傾向があるから、 foreachとforを3セット繰り返して、後ろ2セットで測定した。
for eachのnextは列挙の次の要素の取得だけど、 普通のforのnextはintegerのインクリメントだからなぁ 列挙よりインクリメントが早いって話なんじゃないだろうか
csvの1行目を除外してA列で昇順で並び替えるには、どうしたらいいですか?
>>56 デバッグモードで試してた。それをきいて一安心
ところでコマンドラインでコンパイルするのには何か意味があるの?
2010expressで最適化はデフォルトでOnになってるけど
>>57 csvを1行目を除外して読み込んでorder byとかでやればいいんじゃない?
しかしVB.netよりもVBAのほうがいいように思うけど
もしその作業が単発ならExcelのオートフィルタ
どこまで出来て、どこが出来ないの
え?この部分を最初の行からじゃなくて最後の行から最初の行へ Do While Not tr.EndOfData oneLine = tr.ReadFields() If oneLine(0) = txtNumber.Text Then sw.WriteLine(oneLine(1)) End If Loop
無理 全部List(Of String)にでも読み込んでからReverseしてFor Each
複数列あるcsvをList(Of String)とか配列に読み込む方法がわからない。
古本屋に行って投売りされてる初心者本片手にMSDNとにらめっこ一ヶ月ぐらいした方がいいぞそのレベルは 一行ずつ読み込んでも、全部いっぺんに読み込んで改行コードで分割するんでもいいだろ。
>>57 やってることは一緒なんだからコンパイラが最適化できる。バカ正直にIEnumerator操作する必要はない。
むしろ、for eachの列挙の方が形が決まってる(自由度が低い)分最適化の余地が大きい。
日付を2001001から2001/10/01へ変換するにはFormatはどうすれば?
2001年0月1日?
固定長だったら Dim s As String = "20011001" Dim y As String = s.Substring(0, 4) Dim m As String = s.Substring(4, 2) Dim d As String = s.Substring(6, 2) でいいじゃん あとで結合するときは、直接やらないでいったんそれぞれInt32.ParseでIntegerに変換して DateTimeを作ってからToStringでフォーマット使って文字列にした方が応用が利く
>>61 Dim csvRecords As New ArrayList
While tr.EndOfData
oneLine = tr.ReadFields()
csvRecords.Add(oneLine)
End While
tr.Close()
'最後の行から最初の行へ その1
'csvRecords.Reverse() '要素の順序を反転
'最後の行から最初の行へ その2
For MyRow = csvRecords.Count - 1 To 1 Step -1
Next MyRow
そこもわかってないんだろうけど問題はそこじゃないだろ
結論から言うと
>>61 の方法は使えない
自分でTextReaderの派生クラス作ってうまく辻褄合わせしてやればできなくはないけど
>>61 には絶対無理
一行ごとにTextFieldParserを作るとか強引な方法は考えられるけど
ある程度フォーマットの決まったファイルを読むならTextFieldParserなんて使わずに自分で書くのも難しくない
76 :
74 :2010/09/30(木) 13:29:28
考えたら
>>73 はどうせメモリに全部読み込むの前提なんだから
全ての行を逆に結合して一つの文字列にしてしまえばTextFieldParser使えるね
サンプル・プログラムでTextFieldParser使ってるのに意味不明。
>>69 やってることは一緒じゃないんじゃね?
列挙は実際の要素(この場合配列に格納されてる実際のinteger値)取得する必要があるけど、
普通のループは要素関係ないぞ(取得/インクリメントするのはループ変数のinteger値)
integer値を取得するってとこだけ見れば同じかもしれんが
前者は配列中の要素を特定する必要があるが後者はその必要が無い
配列だからIEnumeratorすっとばす最適化するってなら差が出ない理由にはなるな
つか
>>54 の二つのループって同じ処理結果じゃないだろ、これ
C#ではfor (int i = 0; i < array.Length; i++) hoge(array[i]); のような典型的な形の配列アクセスは最適化されるよ 配列専用の特別なIL命令が使われるらしい VBはどうか知らないけどたぶん一緒
>>47 質問だけしてトンヅラって感じの悪い野郎だな
文字か数値か判別するのにChar.IsNumberとかInteger.TryParseだとうまくいかない。 「String "--" から型 'Double' への変換は無効です。」とエラーが出る 他に文字か数値か判別する方法はないのかな?
それ、IsNumberやTryParse以外の所でミスってないか? どの行でエラー出してるか確認してみろ
VB初心者が書いてみたがこんなんでどう Dim s As String Do Dim i As Integer s = Console.ReadLine() If s Is Nothing Then Exit Do End If Try i = CInt(s) Console.WriteLine(i + 10) Catch ex As Exception Console.WriteLine(s) End Try Loop
「正常系の処理に例外を使うな」
うっせーよ
>>78 だよな。
列挙の方は要素からの読み取りで間接的な参照が挟まるlことになる。
VB2008使用です。 チェックボックスを出しているDateTimePickerで、 Checkedの変更タイミングで行いたい処理があります。 ValueChangedで実装してみたのですが、 DateTimePicker.Value=Today DateTimePicker.Checked=True とした後にチェックボックスを画面上で外すと ValueChangedが行われません。 Checkedの変更タイミングはValueChangedではないのでしょうか?
88 :
デフォルトの名無しさん :2010/10/01(金) 13:21:13
恐れ入ります、分かる方がいらっしゃいましたらご教授ください。 ●VB.NETにて、配列の先頭アドレスを数値に変換するにはどうすればよいのでしょうか? やりたいことは、waveOutPrepareHeader()に渡すWAVEHDR構造体のlpDataメンバに 波形バッファの先頭アドレスを代入したいのです。 例) <StructLayout(LayoutKind.Sequential)> Structure WAVEHDR Dim lpData As Int32 Dim dwBufferLength As Int32 Dim dwBytesRecorded As Int32 Dim dwUser As Int32 Dim dwFlags As Int32 Dim dwLoops As Int32 Dim lpNext As Int32 Dim reserved As Int32 End Structure Declare Function waveOutPrepareHeader Lib "winmm.dll" Alias "waveOutPrepareHeader" (ByVal hWaveOut As Int32, ByRef lpWaveOutHdr As WAVEHDR, ByVal uSize As UInt32) As Int32 Dim waveBuffer As Byte(BUFFER_SIZE) Dim waveHdr As WAVEHDR waveHdr.lpData = waveBufferの先頭アドレス waveHdr.他のメンバ = 適当に設定 waveOutPrepareHeader(..., waveHdr, ...) C言語風に書けるなら waveHdr.lpData = (unsigned long)waveBuffer; とやりたいところですが・・・。 よろしくお願いいたします。
非同期なら GCHandle.AllocでGCHandleType.PinnedしておいてAddrOfPinnedObject その配列がアンマネージで使われなくなったらFreeを忘れずに あとポインタとかハンドルはInt32じゃなくてIntPtrな
書き戻しがないなら単純にコレでいけると思う。 <StructLayout(LayoutKind.Sequential)> Structure WAVEHDR Dim waveBuffer As Byte(BUFFER_SIZE) Dim dwBufferLength As Int32 : どうしてもリアルにアドレスを数値化したいなら 固定化なりマーシャリングを自前でやる必要がある。
下記のコードでnの中のresultに0.0000・・・の0の部分だけを取りたいのですが、 これだと0が代入されてしまいます。 n = 1.0000000015 だと result = "1.00000000" となるので正規表現は間違っていないよですが、 0だけの文字列を取る方法を教えて頂きたいです。 Dim n As Double n = 0.0000000015 Dim r As New Regex("(?<1>1\.?0*)\d+") Dim m As Match m = r.Match(n) If (m.Success) Then Dim result As String result = m.Groups(1).Value Console.WriteLine(result) End If
1.0000000015にたいして 00000000がとれれば良いの?
1.0000000015の場合は 1.00000000が取りたいです。 実際には1.・・・・という値が対象になることはないです。いつも0.・・・・・nn・・・ 0.00・・・・・nnnで0以外の数字が出るまでの0.000000の部分を取りたいです。
94 :
デフォルトの名無しさん :2010/10/02(土) 16:02:35
nをそのまま文字列にすると1.5E-09になるぞ。 nをはじめから文字列にしたらどうなる? Dim n As String = "0.0000000015"
[1-9]\.0+ あとそういうのに浮動小数点使うな Decimal使う
94みたいなことをしてないか気づけるので Option Strict Onおすすめ
誤解されそうな表現だった。別に94に何か言いたいことがあるわけじゃなくて 勝手に暗黙的な変換がなされるのを防ぐって意味ね
レスありがとうございます。 Decimalでできました!正規表現もありがとうございます。 String変数に入れると"9E+15"みたいになってしまいました。 Option Strict Onをやったら何箇所か〜〜〜が出ました; どうもありがと!
>Option Strict Onをやったら何箇所か〜〜〜が出ました それは同様のバグがある可能性が極めて高い場所だから修正することをお勧めする
そのままのコードを生かしてみた string.formatの部分はもっとましなやり方があるかもしれない Dim n As Double = 0.0000000015 Dim reg As New System.Text.RegularExpressions.Regex("(?<1>.\.0*)\d+") Dim s As String = String.Format("{0:0.################}", n) Dim m As System.Text.RegularExpressions.Match = reg.Match(s) If (m.Success) Then System.Console.WriteLine(m.Groups("1").Value) End If
>>98 誰の言うことが正しいのかの判断は君に任せるが、
Decimal使えっていうのは俺はちょっと論点ずれてると思うよ。
扱う値の範囲にもよるが、普通はDoubleで問題ないし、以下のようなコードを書くべき。
Private Function SomeFunc(ByVal value As Double) As String
Dim regex As New Regex("^(\d*[.]+0*)\d*$")
Dim m As Match = regex.Match(value.ToString("G"))
If m.Success Then
Return m.Groups(1).Value
Else
Return ""
End If
End Function
それ正規表現間違ってます 何も考えたくないならDecimalの方がいいよ 浮動小数点はちゃんと理解して使わないと結構普通に予期しない動作するよ
WindowsフォームにWebBrowserがあります。 WebBrowser上のActiveXのコントロール(テキストボックスなど)にアクセス できるでしょうか?
Document.DomDocumentでCOMのDOMのポインタが取れるから その中から探してIHTMLObjectを取得すればいいんじゃないの やったことないから細かいことは知らないしCOMはスレ違い
>>101 Dim m As Match = regex.Match(value.ToString("G"))
は
Dim m As Match = regex.Match(value.ToString("F20").TrimEnd("0"c))
とかにしないとダメだなw素で何か勘違いしてた。
>>102 >それ正規表現間違ってます
どこが?
>浮動小数点はちゃんと理解して使わないと
むしろちゃんと理解してない奴がやたらとDecimalなぞを使いたがる印象
[.]+はおかしい ?の間違い?
>>106 よくそんな知識で人にケチ付けられるな....
>>106 確かにその量指定子は不適切だったありがと
109 :
デフォルトの名無しさん :2010/10/02(土) 18:28:24
GUIアプリを適当に作るとソースコードとGUI部品が密着してしまって再利用しにくくなりますよね。 特にマルチスレッドアプリを作ってると、自分の知識が足りない事もあって、改良しようとすると全面作り直しなど泥沼にはまってきます。 こういうのを解決する手法があると思いますが、教えてもらえますか。
他の言語やってみたら見方が変わるよ VBできるならC#→Java→他がおすすめ
とにかくクラスを作るようにしてたらそのうち慣れるよ
やっぱ仕事単位でクラスにまとめるんですね。以前やってみたけどそれほど旨くいかなかったのはスキル不足のせいかあ。 オッサンなので他言語に移るのはつらいけど、C#はやってみる価値があるのかな・・・。
VBできるならC#は簡単 C#やればVBで「やるべきでないこと」がわかってくる
115 :
88 :2010/10/02(土) 21:10:29
vb.netの質問ではないのですが、どうかご教授ください。 vs2003で.net1.1を参照し作成したexe(以降、hoge.exe)を、.net1.1がインストールされていない、 .net2.0以上がインストールされているPCで実行したところ、正常に動作します。 ※「正常」と書いていますが、「ザックリと動く」と読み替えてもらってもかまいません。 そこで質問なのですが、hoge.exeはが参照している.netは1.1なのに、 gacに入っている2.0以降の.netライブラリ上で動作するのでしょうか? もしかして、.net2.0のmachine.configにsidebyside的なことがかいてあるのでしょうか?
.NET4でポリシーが変わったのは、100%の互換性は保証できないから必ずテストしろという意味 1.1→2.0時の問題を踏まえての変更だからその意味を考えて慎重に ほかの会社なら100%の互換性と言い切っちゃうところだけどそこはMSらしいというか
.NET4でコードセキュリティモデルから透過セキュリティモデルに変わったのがでかい。
CASがなくなったわけじゃないよ。軒並みObsoleteになっただけ。 どっかの公式ドキュメントで読んだけど、.NET Frameworkのコンポーネントの インストールパスが変わったら問題が出るアプリケーションが存在する可能性は0ではないとかそんなレベルの話らしい
質問させてください。 今情報表示するだけのアプリを作っているのですが、 いろんな機種で表示させたいと思っています。 そこで問題になるのが解像度の問題です。 常に最大化して使いたいのですが、小さな機種(800x480に)あわせて作っているので大きな画面だと右と下に大きな余白が出来てしまいます。 全てのラベルや画像を画面いっぱいに広げる方法はないでしょうか? anchorは使ったのですが、これはラベルの文字が大きくならないため使えませんでした。 何かよい対処がわかる方がおられましたら、アドバイスいただけると助かります。
>>121 WPFで作れば拡大縮小が自由自在なはず
知らないけど
折角でかい画面使ってるのにそれに合わせて文字が大きくなるとか超がっかり そんなのOSのDPI設定でするもんだろ
解像度取得して それにあわせて描画すればいいだけちゃうんけ?
常に最大で使うっていうのが そのPCでは、そのアプリしか動かさないってことなら PCの解像度のほうを変えろ
127 :
121 :2010/10/04(月) 12:51:19
>>124 そんなもんですか
どんな画面でも表示できるのを目指しているんですが
>>125 いろんな設定に対して行うのは結構作業工数がバカみたいになるので・・・
>>126 やっぱりそれがいいんですかね。
ワイド画面で設定しているから4:3の画面で少しおかしくなるのは目を瞑りますかね
Direct3Dで作るのもいいかも 解像度なんて関係なく作れるし
>>128 WPFとかDirect3Dとか根本的に修正しないと無理っぽいみたいですね
>>127 >>いろんな設定に対して行うのは結構作業工数がバカみたいになるので・・・
ん〜と・・・・、そんなに工数多くなるかな?、やろうとしてることがわからんので、ちょとイメージ沸きません
anchorで文字のサイズ以外がうまく言ってるなら
文字サイズだけ自力で変えてやれないの?、それなら工数いらなくない?
>>130 レスありがとうございます。
元が800x480でアプリ開発してて、それを最大化等で拡大したときに文字を含めた全てを均等に大きくしたいのです。
anchorで大きくできると言っても均等ではなく、とりあえず端からの距離を保ったまま大きくなってる状態で、やりたいこととは違うのです。
それにどんな解像度のマシンで使われるか不明なので、どのくらいのフォントサイズで、どの位置〜というのが明確に決めづらいです。
まあ比率で計算するしかないわな Direct3Dも座標は絶対値じゃなくて比率で指定するし
>>131 文字は自前でコントロールの大きさ調べてそれに対して何%
みたいな感じでやれば?
もちろん間歇的になるけど
それと両アンカーでやっても違うってこと?
どうしたいのか分かんね
>>132 まぁ自動計算はしてくれないと・・・
.Netと言えどもなんでもあるわけじゃないんですねw
macなら自由に拡大できるのにね
>>133 アンカーって余白の設定ですよね?
相対的に大きくしたいので、余白が絶対的に設定されるだけなので今回やりたいこととは違うんですよ。
要はフォームサイズが大きくなった分、全てのコントロールを相対的に大きくしたいのです。
エロいな
>>135 マックうらやましいれす(^q^)
.NETは透過もままならないですからねorz
>>136 だから両アンカーにすればいいと言ってるのだが…
アンカー勘違いしてないか?
余白はpaddingだぞ?
それとラベルのautosizeがtrueだったってオチじゃないよね?
>>139 いやいやいや、ちゃんと読めよ。どう見てもそれじゃ不足でしょうに
クライアント領域の幅をW、コントロールの幅をwとすると、136がやりたいのは W/w=const で、139だと W-w=const
で、答えはテーブルレイアウト。フォントは知らん
>>139 両アンカーにしても画像部分しか拡大されないんですが・・・もちろんラベルはautosizeをfalseにしてます
>>140 autosizeはfalseにしてもanchorで両端にくっつけるとラベルだけ大きくなって、フォントまでは大きくならないんです。
>>141 テーブルレイアウト・・・ググってみます!
>>141 アホか
両アンカーと何度も書いとろうが
>>142 だからラベルサイズは自動可変するから後はsizechangegedイベントで
フォントを変更すればいいという話
もちろんコントロールによってはアンカーだけではうまくサイズ変更
されないものもあるけど(CheckBoxとかRadioButtonとか)
SizeChangedね
anchorすげー 初めて知った
一枚絵を画面サイズにストレッチしたみたいな表示にしたいってことだよね 画面全部まとめて1枚絵にしちゃえば?w
>>147 要はそういうことです。
> 画面全部まとめて1枚絵にしちゃえば?w
それも考えたんですがちょっと無理やりすぎるのでw
他に自分の知らない方法があるのではと思って相談したまでです。
>>147 textboxどーすんの?って話になるw
前後逆になった
>>144 それならいけるかもしれませんね。
ちょっと試してみます
>>149 今回に関してもラベルとグラフコントロールとピクチャボックスくらいなんで大丈夫ですw
>>149 それも絵として描画するんだよ、縦横比も自由自在だぜ
>>152 あ、すまん、textboxは、たしかに面倒だw
154 :
デフォルトの名無しさん :2010/10/04(月) 17:59:32
いちいちコメントにレスつけて自分の意見を主張している様子から察するに、 手を動かして、実際に何かを学ぼうと思っていないだろう。 2chで適当な返答返しながら、どんぴしゃな答え、誰かがコード書いて貼ってくれるの待ってるんでしょ。 2chに来る割合をもう少し減らして、開発に時間割けば?
154は忘れて
また訳分からん因縁つける奴が 少なくとも言われたことは試してると思うが?
156も忘れて(^^;
既に誰か指摘してると思うけど、そもそもウィンドウの全ての要素の大きさを クライアント領域のサイズに比例させる必然性が何もないし、苦労してやっても 気持ちの悪いUIになるだけだよなあ。 昔のネオジオの格闘ゲームじゃないんだからさあ。 VS2010のエディタ部分なんかデバッグ時微妙にフォントサイズが変わるけど、 あれってちょっと気持ち悪いでしょ?
こんなコード書いて、 やるで おわったで と出力されるにもかかわらずディレクトリが出来ません どうやって調査すれば良いのでしょうか System.Console.WriteLine("やるで") Try System.IO.Directory.CreateDirectory("d:\temp\トップ") Catch ex As Exception System.Console.WriteLine(ex.ToString()) System.Console.WriteLine("いきなりディレクトリつくれんです") End Try System.Console.WriteLine("おわったで")
160 :
159 :2010/10/04(月) 21:45:33
自己解決。ウィンドウが更新されてなかっただけでした 別プロジェクトでコードを作り直しても同じ結果になり悩んでたんですが ウィンドウを閉じて再度表示させると治りました エクスプローラのwindowが更新されないとか、 今まで経験したことがなかったのでちょっと驚き ウィンドウを再表示後は、上の減少は再現しなくなりました・・
162 :
デフォルトの名無しさん :2010/10/05(火) 14:59:05
何を測りたいのかはっきりさせてくれ そのコードだと、ループ内で行ってる処理の中ではたぶん Console.WriteLineが一番重いので、Console.WriteLineの処理時間を計測してるだけ。 測りたい処理よりもコストのかかる処理をループ内に入れてしまうと何の意味もなくなる。 文字列連結や文字列比較の速度を調べたいのでなければ、 同じ理由で文字列の操作も避ける。GC.Collectも同様。 パフォーマンス計測にはStopwatchクラスを使う。 ループ開始前にStartして終了後にStop。最後に経過時間を出力。 一秒間にどれだけ処理できるか調べたいんだったら最後に一秒当たりに換算すればいい。
>>162 そのものズバリ Stopwatch クラスですかありがとうございます。
何を計りたいかですが…
1〜15桁の文字列(パス)の生成に掛かる時間を、
調べたいと思っています。
一文字づつ文字列を連結するのは典型的な非効率糞コード StringBuilderを使う
HttpWebRequestとHttpWebResponseで末尾が.のURLリクエストしてるのに 実際は末尾の.がないURLに代わってリクエストされるんだけど 対処法おしえてください
CrLf区切りのテキストファイルから 何行目と指定してテキストを取り出したり、 同じように指定してその部分を置き換えたりしたいのですが、 できるとしたらどんな方法で出来るでしょうか?
簡単なのはFile.ReadAllLines ファイルの行を置き換えたかったら全部消して書き直せばいい
レスありがとうございます。 行数が多くて一行あたりの処理が簡単なため一気に何千行の処理を行うことになるのですが そうなると1行ごとに全部を書き換えるというのは避けた方が良いですよね? 変数に読み込んで処理すれば良いのですが、メモリの占有が大きくなるのと プログラムが予期しない終了の仕方をした時にせっかく途中まで処理したものが どこにも記録が残っていないという状態になってしまうので、 ファイルをピンポイントで修正していきたいと思ったのですがそういうアクセスはあまり一般的ではないでしょうか?
>行数が多くて一行あたりの処理が簡単なため一気に何千行の処理を行うことになるのですが これ、他人が読んで意味が通じると思う?
高々何千行程度のテキスト読み込んでおくのにどんぐらいのメモリ食うと思ってんだ?
9Gくらい?
1 行につき 1 MB 使えば 1000 行で 1 GB だから、だいたいそのくらい・・・ ってばかあっー!
>>169 >ファイルをピンポイントで修正していきたいと思ったのですが
>そういうアクセスはあまり一般的ではないでしょうか?
一般的うんぬん以前に、ファイルの任意の位置にデータを挿入する事は出来ないので無理。
元々の一行の長さと、書き込もうとする一行の長さが同じなら、その場所だけ上書きすればよい。
一気に何千行も書きかえるなら、一行ずつランダムアクセスするとかえって遅くなるかもよ。
175 :
デフォルトの名無しさん :2010/10/07(木) 15:16:12
いったん別の一時ファイルに書き出せばいいんじゃね StreamReaderで一行ずつ読みながらStreamWriterで平行して書き出せばいい
176 :
デフォルトの名無しさん :2010/10/07(木) 15:53:02
本当に困っています。
OKWaveのほうにも質問していますが、TransparencyKeyでフォーム中身を透過させて、そのフォームを最大化、そしてまた元のサイズに戻すなど、
一定のサイズ変更操作をすると、フォームのタイトルバーなどがつかめなくなってしまいます。
サイズ変更もできなくなります。
本当に困っています。何か回避方法などをご存じの方がいましたら教えてください。お願いします。
http://okwave.jp/qa/q6233258.html (マルチみたいで申し訳ないです)
とりあえずそのソースうpして
みたいってマルチそのものでしょw
179 :
176 :2010/10/07(木) 18:24:20
>>177 ソースも何も、フォームデザイナで、BackColoerとTransparencyKeyを同一にしただけです。
他の設定は一切いじらずとも、百発百中でなります、
VS2008でも、VB2010 Expressでも。
180 :
176 :2010/10/07(木) 19:03:33
うちは問題ないなー
自分で使うわけじゃないので、環境依存ならいいんですけどね。。。 ちなみにWinXPじゃ問題は起きません。Vista以降で、aero有効時にのみ起きるようです。
うちはVistaSP2だけど問題ないなー
ディスプレイドライバの相性とか
自分のフォームだけaeroオフで起動とかできないですか? aeroがなければ上手くいくのになぁ。。。
>>185 プロジェクトのプロパティニXPの視覚効果の有効、無効の設定があったと思うけどそれじゃだめ?
うちはvista無いから試せん
>>186 そのチェック外しても、なんにも変わりませんでした。。。
うちでも再現したよ。 でも下記のコードにしたら固まらなくなったよ private void Form1_Load(object sender, EventArgs e) { //大きさを適当に変更 this.Size = new Size(300, 300); Bitmap bmp = new Bitmap(1, 1); Graphics g = Graphics.FromImage(bmp); g.FillRectangle(Brushes.WhiteSmoke, g.VisibleClipBounds); //透明にする色 Color transColor = bmp.GetPixel(0, 0); //画像を透明にする bmp.MakeTransparent(transColor); //背景画像を指定する this.BackgroundImage = bmp; //背景色を指定する this.BackColor = transColor; //透明を指定する this.TransparencyKey = transColor; this.TopMost = true; }
タイトルバーはつかめるがウィンドウ境界が透明扱いになってるな OnSizeChangedで前回のWindowStateと違ってればRecreateHandleとか乱暴なことでもする?
>>189 タイトルバーも境界もどっちも掴めません。。。
>>188 つまり画像を挟むってことですかね?
いまdsiから書き込んでるので、明日VB的文法に翻訳してみたいとおもいます。
得意気にC#でw
C#にコンプレックス持ってんのかw 仕事はVB.NETで趣味アプリはC#でやってて 今、家だからPCにはC#しか入ってないんだよw
バカ? ここは何スレだっつの
じゃあ、わざわざC#スレでレスしろってかw めんどいだろJK
質問です。 VB2010でVBの勉強をしているのですが、 ボタンを押すことによってテキストボックスに入力されている文字をテキストファイルに出力したいのですが 以下のコードではうまくいきません Dim Writer As New IO.StreamWriter("C:\vb.txt") Writer.WriteLine(TextBox1.Text) Writer.Close() デバッグしてもエラーは出ないし、ボタンを押しても何も起きない状況です どなたかご教示お願いします
>>188 だめです。
GUIデザイナのプロパティからTranceparecyなどの設定を削除して、フォームリロード時にお示しのコードを実行するようにしましたが、
やはりタイトルバーなどがつかめない状態になりました・・・。
>>198 >>189 をやると、正常になりますが、最大化したときだけじゃなく、
普通にサイズ変更しただけでもなる場合があるので、いくらかは問題は軽減しますが、全解決とはなりません・・・。
resizeendイベントでもやればいいんじゃないの?
なるほど。。。 瞬間にチカチカするのは代償と考えてあきらめるしかないですかね。
フォームが透明になるだけでもありがたく思わないと
でもまぁ、そうですけど、何も問題がない人との違いは何なのかと・・・。 まぁ、設定で、おかしくなる人ようの設定かなんかをもうけてもいいですし、その辺は臨機応変にやろうと思います。
問題ないって書いたのは全部俺だけど 全部うそだよw
>>195 ファイル名にコロンや垂直タブって無理じゃね?
>>196 さん
これでできました。ありがとうございました!
>>204 も嘘かもしれないので、信じないとしても、
何とか例の現象は解決(?)いたしました。
リサイズができなくなったときのために一応つけておいたステータスバーも取り払うことができ、
当初意図していたとおりのソフトができそうです。
皆様、アドバイス等ありがとうございました。
For i As Integer = 1 To 100 Next の中でiを1から100の間で戻したり進めたりするのは何も問題ないでしょうか?
気になるんだったら別の書き方すればいいのに
問題ないけどそういう使いかたするならあえてfor nextを 使わないのがいいと思う
宇宙語を話す皆さんに質問です プログラミング用語の『スロー』ってどういう意味?(”投げる”とか答える人はまだ地球人) なんか、こう、イメージの掴める解説ってないのかね
マルチ乙
214 :
デフォルトの名無しさん :2010/10/14(木) 13:07:36
異常系世界へgotoするってこと その際のスペースカプセルが例外
215 :
デフォルトの名無しさん :2010/10/14(木) 15:43:35
linux上でunixを使いCUIの環境で、日の丸の国旗の画像を作るプログラミング、教えてください
スレチ
217 :
デフォルトの名無しさん :2010/10/14(木) 22:36:51
プリンタドライバをインストールしたいのですが、「プリンタ名が無効です」と表示されて上手くいきません。 どこがまずいかご教授お願いします。 必要なファイルは事前に C:\Windows\system32\spool\DRIVERS\W32X86 にコピー済みで、 ファイルをフルパスで指定しても同じ結果になります。 Public Shared Function DriverInstall(ByVal strDriverName As String) As Boolean Dim di As New DRIVER_INFO_3 With di .cVersion = 3 .pConfigFile = "ps5ui.dll" .pDataFile = strDriverName & ".ppd" .pDependentFiles = "pscript.ntf" & vbNullChar _ & "pscript.hlp" & vbNullChar _ & "ps5ui.dll" & vbNullChar _ & strDriverName & ".ppd" & vbNullChar _ & "pscript5.dll" .pDriverPath = "pscript5.dll" .pEnvironment = "Windows NT x86" .pHelpFile = "pscript5.hlp" .pMonitorName = String.Empty .pName = strDriverName .pDefaultDataType = "RAW" End With If AddPrinterDriver(String.Empty, 3, di) = 0 Then Dim ExcptWin32 As New Win32Exception(Marshal.GetLastWin32Error()) MessageBox.Show(ExcptWin32.Message, "Win32Err", MessageBoxButtons.OK) Return False End If Return True End Function
一応、APIの宣言部分も貼っておきます。 AddPrinterDriverW を AddPrinterDriverA に変えると、エラーメッセージは「パラメータが間違っています」になります。 Private Declare Function AddPrinterDriver Lib "winspool.drv" Alias "AddPrinterDriverW" _ (ByVal pName As String, _ ByVal Level As Integer, _ ByRef pDriverInfo As DRIVER_INFO_3) As Integer Public Structure DRIVER_INFO_3 Public cVersion As Long Public pName As String Public pEnvironment As String Public pDriverPath As String Public pDataFile As String Public pConfigFile As String Public pHelpFile As String Public pDependentFiles As String Public pMonitorName As String Public pDefaultDataType As String End Structure
220 :
デフォルトの名無しさん :2010/10/17(日) 00:05:45
あげとく
じゃ、俺は下げとく。
C#だと拡張メソッドでenumを拡張できるけど、VBはできるん?
VBでは拡張メソッド専用の構文を準備していないため次のように属性を直接指定する。 Imports System.Runtime.CompilerServices Module StringExtensions <Extension()> _ Public Sub Print(ByVal aString As String) Console.WriteLine(aString) End Sub End Module 同じ要領でenumでも出来るはず、やってみて。
DLL改ざん出来ないように厳密名付けたんだけど、 この場合バージョン管理ももれなく付いてくるの? アセンブリバージョン上げたら呼び出し側でエラーが出るんだけど… 対処法としてはバージョン固定にするか、GACに登録してバージョンリダイレクトさせるかって事でOK?
基本的には厳密名つける=バージョン管理を行う。 >対処法としてはバージョン固定にするか、GACに登録してバージョンリダイレクトさせるかって事でOK? もしくはconfigファイルでバージョンリダイレクト。 もしくは全ビルド。
>DLL改ざん出来ないように厳密名付けたんだけど、 実はあんまり意味ないよね。
>もしくはconfigファイルでバージョンリダイレクト。 これは"呼び出し側exe.config"にバージョンポリシーを記述して配置するイメージですよね? >実はあんまり意味ないよね。 えw
すみません、初歩的で申し訳無いのですが 横2列のcsvを二次配列に入れるプログラムが作れません。 field()でテキストをReadlineして field-Aに二次配列で入れるループを書いてます。 untilのループ内に変数Xを利用すると下記のエラーが出ます 「Exception.InnerException を参照してください。エラー: オブジェクト参照がオブジェクト インスタンスに設定されていません。」 Dim field() As String Dim field-A(,) As String Dim reader As New System.IO.StreamReader("field.csv", System.Text.Encoding.Default) Dim X As Integer X = 0 Do Until reader.EndOfStream line = reader.ReadLine() field = line.Split(",") field-A = Nothing field-A(X, 0) = field(0) field-A(X, 1) = field(1) X = X + 1 Loop csvの中身 フィールドA-01,フィールドB-01 フィールドA-02,フィールドB-02 フィールドA-03,フィールドB-03
field-A(X,0)の行でどうもエラーが出るようです。 ・他にもっと簡単な方法があると思うが浮かばない ・変数Xのuntil内での使い方がおかしいorスコープがおかしいが、原因がわからない (UNTIL内でX=0とするとエラーが起きないんですがループでリセットするわけにはいかない) 上記2点、わかる方いらっしゃいますでしょうか? 宜しくお願いします。
>>230 >field-A(X,0)の行でどうもエラーが出るようです。
field-Aを使用する前(Do Loopの前)にあらかじめ2次元配列を作成する
field-A = New String(2, 1) {}
>他にもっと簡単な方法
2次元配列使わないでいいのならListとか使ったほうが楽
>変数Xのuntil内での使い方がおかしいorスコープがおかしい
どうおかしいのか分からない
>>231 オブジェクト参照がオブジェクト インスタンスに設定されていません。
というエラーが出てフォームも立ち上がらない状態です。
untilの外側で宣言したXがインスタンスオブジェクトと認識されてるとかなんとか
そこまでしか情報がわかりませんでした。
Nothingで解決かと思ったら解決せず。
配列っていうのは事前にメモリを確保してから使うんだよ? 確保するコードを追加しよう。 だけど、行数わかる?ファイル読み込まないと分からないよな? つまりこの処理に配列は合わない。 随時メモリを拡張してくれるListの方が適切
太古の時代では一行目にデータ数書いたりしてたな
>>実はあんまり意味ないよね。 >えw あんまり役に立つ場面てないよね、に言いかえよう。
>>233 ありがとうございます!
配列の最大数を宣言しないとだめなんですね。
Dim field-A(10,2) As String
と数値を入れて宣言したら思い通り動作しました。
それからListが良いということですので使ってみます。
全て解決です。皆さんありがとうございました。
>>233-234 配列が向かないのはまあ同意するが
たまには ReDim Preserve の事も...いや、思い出さなくてもいいか
一要素ずつ拡張してたら糞遅いわな List(Of T)は容量があふれるたびに内部の配列のサイズが2倍になる 同じことを自分でやってもいいけど時間の無駄
拡張と見せかけた再割り当てってのが嫌なんだよ。 VB6では桁違いに速い。
いや再割り当てはどっちみち必要だろ VB6は内部でListみたいなことをやってるだけ
そうなの? 実はその辺自信無くて試したんだけど、10倍ぐらい違ったからそうだろって…
>>239 は間違ってないよ
List(Of T)は再割り当て時には現在の倍の容量を確保して新しい領域に現在の要素をすべてコピーする
要素が追加されるたびに再割り当てというような馬鹿なことはしない
一般的なListの伝統ですな
246 :
242 :2010/10/28(木) 23:27:06
もう一度やってみたら、 確かに要素数の増加に伴って拡張に必要な時間が増えますね・・・ にしても.net遅すぎる気が・・・ .netはinteger、VBA(VBが手元に無い為)はlongの一次元配列で、 要素数を0から350000まで1づつ増やすコードをそれぞれで実行した結果、 書くのも恥ずかしいぐらいの差がついちゃいました。 コード間違えたかなぁ・・・
.NETでは確実に額面通りの動作をするから不自然なのはVBAの方だろう ループの中でRedim Preserveしたりするバカが多いから変な最適化してるんじゃないの
たまたま空きが後ろにあればそのまま拡張できる実装になってるんじゃない? .NETの場合はメモリ管理上確実に再確保とコピーが必要。
VB2010、.Net Framework4.0で、Byte型変数の値を、10進数に変換し、Integer型の 変数に代入したいと思っています Dim BBB As Byte Dim III As Integer という宣言で、BBBに「10」と入っている時に、IIIにどうにかして「16」と、10進数に 変換した結果を代入させたいと思っているのですが、どうしたらよいのでしょう? III = CInt(BBB)とかIII = ToInt16(BBB)とかやってみたのですが、うまくいかず… ToInt16とかを実行するために、2バイトのバイト列とかにしないとダメなのでしょうか?
>>250 それは何度も試しててムリぽ…と思ってもう一度やってみたら、できました…
ありがとうございました
何でできないって思ったんだろ?
もう寝ます…
>>251 できなくね?
何か勘違いしてると思われ
16進数というのは16進数表記の事で、中身の数値じゃないよ。
5という数値を表す場合、"5"、"X"、"五"、"○○○○○"、
といろいろあるが、そのひとつが16進数で、どれもStringで表現される。
III = Convert.ToInt32("10", 16)
が正解。
>III = CInt(BBB)とかIII = ToInt16(BBB)とかやってみたのですが、うまくいかず…
ToInt16の16は16bit整数型(Short)で16進数という意味は無いよ。
>>249 >10進数に変換し
人間が見えるように出力するときにやるもんだろ
>BBBに「10」と入っている時に
まずここは何進数で「10」のつもりなんだ?
BBBに値を代入したコードはどうなってるんだ
>>251 で解決したって言ってるんだから
単にバイト変数の中身を整数変数に代入したかっただけの話だろ?
どうして、VB.NET ってあまり流行らないんですか? どの案件みても、C++とかJavaとかC#とかPHPとか
C#でいいならVBをわざわざ選ぶ意味はないよ どっちかというとVB6上がりでC触れないとかネガティブな理由で使う言語だからね
VB.netも楽しいけど、C#の方が強力だし、VBの文法って汚いし… やたら融通の効く所はいいと思うんだけど。
>>255 Microsoft的には非IT系のGeekなプロフェッショナル向けの言語。
要は会計士とか医師でプログラミングもしちゃうぜ的な人向け。
いつの時代のVBのコンセプトだよそれ。
システム部門が独立してできたようなところだとVBが主戦力多いよ 往々に.net移行が遅れてたりする
非情報系の人にはC系は難しいからVBっていうのはもう古いよ。 実際JavaやC#ならVBと変わらん。MSの囲い込みイメージ戦略に騙されてるだけ。
ASP.NETを使うことになったのですが、おすすめの本などありましたら教えてください
264 :
デフォルトの名無しさん :2010/11/04(木) 03:23:01
マルチごめんなさい。 急にプログラマーに仕事が決まり、ASP.NETが必要になったのですが、 適当なスレがなかったようなのでマルチになってしまいました。 謝罪をさせていただいた上でまた質問させてください。 みなさんはASP.NETの勉強はどうしてるんですか? おしえてください。使ってない人もいるかもしれませんが・・
ASP.NETなんて勉強しなくても使えるからなぁ。
RequestオブジェクトとResponseオブジェクトがあれば なんでもできるし。
プログラムできない奴はプログラマとしての仕事をするな 時間と金の無駄だ
誰にでもできる簡単な仕事です。
文系理系関係ありません ただ学歴高い方が発注元に単金を高く請求できるので
高卒でプログラマやってます
その場合は資格をいっぱい取ればおk
オラクルマスターを取りなさい
テクデとテクネなら持ってます。
274 :
デフォルトの名無しさん :2010/11/04(木) 20:51:45
知恵袋でも質問したけど回答がつかなのでここでも聞かせてください 自分のサイトを読み込んでリンクさせるてリンクをクリックすると規定のブラウザで開く方法ってありますか? 要はリファラを残したい。。。
日本語でおk
276 :
デフォルトの名無しさん :2010/11/04(木) 21:04:49
リファラを残す方法はありますか?
リファラが何かわかっているのかい? HTTPヘッダだよ それがわかればどうとでもできることがわかるよ
278 :
デフォルトの名無しさん :2010/11/04(木) 21:32:25
リンク元のページのことじゃないの??
環境はVB.NET 2008 Express Edition + Windows XPです。 Visual Studioエディタ内で子ウインドウをキーボードで切り替えるとき、 Ctrl+Tabキーで一覧が表示されますが、ここで Enterキーまたはマウスでクリックしなくても切り替えられますか?
スペースキーでもOK(たぶん) 念力でもOK(エスパーなら) っていうか、何が聞きたいんだ
281 :
デフォルトの名無しさん :2010/11/05(金) 20:50:48
質問です。 VisualStudio2003proとSqlserver2005developerを持っているのですが、 この組み合わせではADO.NET2.0の機能を使うことはできませんか?
283 :
デフォルトの名無しさん :2010/11/05(金) 23:39:21
私はJAVAしかやったことなくて今度VBもやらないといけないことになったのですが、 今までは、オブジェクトというのは変数とメソッドが一緒になった固まりだと思ってました。 しかし、VBのサンプルコードを読むと、 Dim fm As Object fm = 2.73 という構文が出てきたんですが、どうやらこれはVBでは間違っていないようなんです fmをオブジェクト宣言したのなら、まずはそこからインスタンスを作って、さらに インスタンスの変数。つまりfm.hensuu =2.73 みたいな形ならわかるのですが、 いきなりオブジェクトとして数値が宣言されて、いきなり数字が代入されるなんて・・ VBではオブジェクトの意味がJAVAと違うんでしょうか・・おしえてください
ほんとにJavaやってんの? それJavaでもできるよ(Java5以降)。オートボクシングという。 .NETではボクシングは実行エンジン自体に組み込まれてて、Javaのオートボクシングよりももっと柔軟。
>>284 JAVAにもあるん・・・なんだかわからない・・
まずはインスタンス化しないと変数は代入できないんじゃなかったけ?
ましてオブジェクトは固有だから、変数がいくつあるかわからないし・・
>>283 VB(というか.net)にはobject型という型があるんだよもん
つーか入門書ぐらいけちらず買えよ
それかMSDN読むか
Javaと違ってMSDNの日本語化はわりと深い所までちゃんとされてるからいいぞ
Javaでもこう書ける Object fm; fm = 2.73; 2行目は省略形で書かれていて、省略せずに書けば次のようになる。 fm = Double.valueOf(2.73); Double.valueOf(2.73)の処理はボクシングと呼ばれる。 .NETでもこれと同じような処理が自動的に行われている。 これでわかんないならVBと比べる以前にJavaを入門書からやり直すべき。
何が言いたいのかよーわからんけど、 Object型のインスタンスなんて、スレッドの同期オブジェクトが欲しいときぐらいしか作らないよw
普通は、intやdoubleなどの単一の値も、 全てオブジェクトとして扱うのがオブジェクト指向的には自然なんだよ Javaは設計が古いのでそうなってないが.NETは実際に全部オブジェクトとして扱えるということ
javaもまともにできてたとは思えんな。
.net前のMSDNとかは、変な翻訳とかも混ざって非常に分かり難かったが 最近のは割とまともにローカライズされて見やすくなったよな 新しく使うクラスとかはとりあえずF1押して概要とかメンバーとか見るのが癖になってる
・注文テーブル 注文番号(PK) 都道府県コード 市区町村コード 以下、注文日時とか商品IDとか諸々 ・都道府県マスター 都道府県コード(PK) 都道府県名 ・市区町村マスター 都道府県コード(PK1) 市区町村コード(PK2) 市区町村名 とこんなテーブルがあったとして、DataGridViewにBindingSourceを設定して、都道府県を 表示させるまでは良いのですが、市区町村に複合キーを投げる方法が分からず。 仕方がないのでテーブルアダプタにWHERE 都道府県コード=@都道府県コードみたいなメソッドを用意して、 データテーブルを取得するようにコードを書いたのですが、もっとスマートなやり方ってないもんですか?
またドボン!か・・・。 いい加減、ドボンはもういいよ。 俺なんか、7年前に買ったものを大事に使うあまり、 流行から取り残されていってるんだぞ? 7年以上も続けているドボンを見てるとイライラしてくる。 そろそろ身を引いたらどうなのよ、って。 ドボンはアーカイブ(過去ログ)だけ残して、 後は若い奴らに譲ろうぜ? 若い奴らに新しいVBサイトを構築させていこうぜ。
そうは言っても若い奴らが好き好んでVBなんか使うと思うか?
297 :
デフォルトの名無しさん :2010/11/09(火) 09:04:25
こんにちは。スレチでこちらに飛んできました。 ディスプレイが省電力モードに移行をしたかを知るために、下記のように作ってみました。 <System.Runtime.InteropServices.DllImport("user32.dll")> Shared Function MonitorFromPoint(ByVal x As Integer, ByVal y As Integer, ByVal dwFlags As Integer) As IntPtr End Function <System.Runtime.InteropServices.DllImport("kernel32.dll")> Shared Function GetDevicePowerState(ByVal hDevice As IntPtr, ByVal pfOn As Integer) As Integer End Function Public Shared Sub PowerState() Dim hWnd As IntPtr Dim Ret As Integer Dim Pw As Integer hWnd = MonitorFromPoint(&H0, &H0, &H2) Ret = GetDevicePowerState(hWnd, Pw) MsgBox(Pw) End Sub こんな感じにやりましたが、ダメでした。 そもそも、ハンドルが取得できない。 何かよい方法はないでしょうか??
>>294 javascriptのdocument.writeなどで書き出すhtmlを展開したいと言ってるの?
WebBrowserコントロールにいったん読み込んで、
それのdomから取得すればできるかもしれないな。
データベース接続で質問です。 こんなやり方と SqlConnection conn = new SqlConnection(); conn.ConnectionString = "接続文字列"; SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandText = sqlStr; こっちのやりかた 何が違うのでしょうか。 SqlConnection conn = new SqlConnection("接続文字列"); SqlCommand cmd = conn.CreateCommand(); cmd.CommandText =sqlStr;
302 :
301 :2010/11/11(木) 10:31:21
>>301 なぜこんな質問したかというと、
efreedom.com/Question/1-442465/InvalidOperationException-Executing-SqlCommand-Transaction
にスレッド処理でエラーが発生したんだよって報告があったので。
同じです。
しょぼいPCで開発してる奴は死ね
LabelのBorderColorを変更出来るようにする 初歩的なことですみません。 Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) Dim aPen As New Pen(m_BorderColor, 1) Dim aRect As Rectangle() = {New Rectangle(0, 0, Width - 1, Height - 1)} e.Graphics.DrawRectangles(m_Pen, m_Rect) MyBase.OnPaint(e) End Sub 見た目には実装されているのですが、BorderStyleとは無関係に四角を描いてるだけです。 本来のBorderStyleを拡張するにはどうしたら良いのでしょうか?
BorderStyleをNoneにする
NoneにしてPaddingを全部1とかにするのがやっぱり簡単ですかね
「本来のBorderStyleを拡張」ってどういう意味なんだ。 小学生じゃないんだから相手にエスパー能力を期待しているとしか思えないような 質問するなよと。
>>305 ControlPaint.DrawBorder/DrawBorder3D
Part20にあった質問なんだけど、この答えを知りたいです。 BindingSourceとTextBoxをバインドしています。 BindingSourceのカレントレコードが変更される際に入力をチェックして、 入力のキャンセルや、レコード移動のキャンセルを行いたいのですが、 どうしたらいいでしょうか。 PositionChangedやCurrentChangedイベントで出来るかと思ったのですが、 これらは移動後に発生するみたいですし。 よろしくお願いします。
ハゲ以外で。
>入力のキャンセルや、レコード移動のキャンセル 意味が分からん
Gridのセル編集を開始したら保存ボタンを押すまで他の行の編集が出来ないようにしたいって話なんだけど…
ユーザコントロールをコンボボックス風にドロップダウンで表示させたいんですが、やり方が全く分かりません。 どなたか参考になりそうな日本語サイトをご存じないですか?
そういうのはWPFだろ WPFで作ったコンボをVBに読み込むとか。 正攻法は大変だと思う
もうどうでもいいからリストボックスでも表示してやれよ
初心者スレに行くべきか悩んだんですが、型変換に関して とあるAPIの関数を呼び出しているんですが Public Declare Function ADC_SetConfig Lib "AIOUSB" Alias "VBADC_SetConfig" (ByVal DeviceIndex As UInteger, ByRef pConfigBuf As Byte, ByRef ConfigBufSize As UInteger ) As UInteger これの第2引数、pConfigBuf。ヘルプには以下のような構造体が書かれていました。 ' Config 構造体 <SerializableAttribute()> <ComVisibleAttribute(True)> _ Public Structure TUSBAI1616Config Dim ChannelRange() As Byte Public Sub Initialize() ReDim ChannelRange(0 To &HF) End Sub Dim CalibMode As Byte Dim TrigMode As Byte Dim StartStopCH As Byte Dim Oversample As Byte End Structure この構造体を第2引数のとおり、Byteとして渡したいんですがどう変換したらいいんでしょうか? AllocHGlobal→StructureToPtrで取得したポインタを渡したら0除算云々と怒られました 3日3晩悩んで試行して解決できず、エロい人知識を貸してください
そのDeclare宣言は変えられんの? ByRef As TUSBAI1616Config って定義するだけなんだけど
>>319 Declareの宣言は勝手に変えるな馬鹿と言われて来たせいもあってか、その発想には至りませんでした。
明日試してみます。
オンラインマニュアル無いと思ってたらありましたので一応
ttp://accesio.com/MANUALS/AIOUSB_API_Reference.html#ADC_SetConfig ※サンプルプログラム(VB6)で使用されていた例
Private Type TUSBAI1616Config
ChannelRange(0 To &HF) As Byte
CalibMode As Byte
TrigMode As Byte
StartStopCH As Byte
Oversample As Byte
End Type
ADC_SetConfig DeviceIndex, Config, ConfigBufSize
これを、.net向けに
>>318 のように私が構造体を定義しなおしました。
VB6サンプルじゃなぁ…
テーブルの数だけテーブルアダプタが作成されてコーディングが非常に面倒なんですけど、 テーブルアダプタの共通化についてサンプルがあるWebサイトかなんかありますか?
323 :
デフォルトの名無しさん :2010/11/19(金) 20:41:50
俺はデザイナーからコードを引っこ抜いて、簡易的な汎用テーブルアダプタを作った どうせUpdateメソッドしか使わないからねぇ
324 :
デフォルトの名無しさん :2010/11/21(日) 21:31:09
VB.netでコマンドライン引数を扱いたいのですが 取得する方法がいまいち分りません どのようにすれば良いのでしょうか?
Environment.GetCommandLineArgsとか、My.Application.Startupイベントの引数とか
自己解決しました 以下の方法で取得できました お騒がせしました Dim returnValue As String() returnValue = Environment.GetCommandLineArgs
もう解決してるのに嬉しそうに貼らなくていいです
なにそれひどい。
vb.net コマンドライン でぐぐれば出てくるのにマジでぐぐる前にここで 質問してるのか いい加減にしとけよ
加減は見たつもり
Form1の起動時に(チェック処理に引っ掛かった場合には) Form2を起動するコードを次の様に記述したのですが なぜか、Form1が消えません。 ※*_Loadイベントだけでは無く*_Shownイベントでも 試したのですが駄目でした。 どうすればForm1を非表示にした状態で、 Form2を起動する事が出来ますでしょうか? Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ' 〜 チェック処理 〜 Dim ins As New Form2 Me.Hide() ins.Show() Me.Show() End Sub
ins.ShowDialog(Me)
ハライテw
RitchTextboxの内容を印刷したいんだけど VB2010でもまだそのまま印刷ってのは実装されてないんだっけ? サンプル探してもシルバーライトの物しか出てこないから なにか良いサンプル有ったら教えて欲しい
開発環境のバージョンとは何の関係もない話だと思うが WinFormの話ならEM_FORMATRANGEとか使えば
>>333 ありがとうございます!!解決しました!!
>>339 ありがとう
まるまるコピペしてつかってみます
341 :
デフォルトの名無しさん :2010/11/25(木) 12:43:06
VB2010expressでTextboxを配列化して順に配列の文字を入れたいが どうやってもできない。 NULL扱いされる。 誰か助けて。
エスパーすると、配列をNewした後、TextBoxをNewしてないから。
Controls.OfType(Of TextBox)().ToArray() とかでいいよ
344 :
デフォルトの名無しさん :2010/11/25(木) 15:06:27
341です。 すみません。補足説明します。 たとえば Dim A as New Arraylist For i As integer = 0 To 4 a.Add(i * 10) TextBox(i).Text = R.ToString ←ここがNull(Nothing)らしい Next 簡単に配列にできないものでしょうか? ネットで色々見ましたが、なぜかうまくできません。 初心者だから・・・?
345 :
デフォルトの名無しさん :2010/11/25(木) 15:15:02
テキストボックスの名前をTextBox1, TextBox2, …と連番にしておいて Controls("TextBox" & i).Text = R.ToString() のようにすれば配列にしなくても同じことができる 配列にするには一つずつ配列の要素に自分で代入する必要がある あとArrayListなんか捨ててList(Of T)使いましょう
どうせ R が Nothing なんだろ
>>345 それやるくらいなら
Dim TextBoxes() As TextBox = {TextBox1, TextBox2, TextBox3 ...} だろ
348 :
デフォルトの名無しさん :2010/11/25(木) 15:28:37
どうでもいいよ パフォーマンス的にはTextプロパティの設定に比べれば誤差だしVBでコードの良し悪し議論しても仕方ない
おいおい、職業プログラマで
>>345 を許しちゃダメだろ
パフォーマンスの問題じゃなくてバグの出やすさ
>>345 は「"TextBox" & i)」が実在するかどうか実行時にしか評価されない最悪なコーディングだ。
なあに、その行が 「"TextBox" & i)」が実在するかどうか チェックするIfブロックの中に入っていれば問題ない
>>349 そんなこと言い出したらArrayList使うのも間違いだし4決め打ちもまずいし
ToStringの()省略も気になる
>>350 「チェックするIfブロック」も実行時にしか通らないだろ
この手のものは、コーディングミスってもコンパイルで引っかけるように考えてコーディングしないと
くだらない所に拘って生産性下げるのが一番最悪
後でTextBox5を追加したときに配列に追加するのを忘れても
コンパイル時には分からないし実行時のエラーすら出ないよ
>>345 が良いとは全く思わないが
>>347 も万全とはいえない
R が何か分からないが Dim A As New Arraylist (個人的には Collection.Genelic 〜 を使いたいが) Dim TextBoxes() As TextBox = {TextBox1, TextBox2, TextBox3, TextBox4, TextBox5} For i As integer = TextBoxes.Lbound To TextBoxes.Ubound a.Add(i * 10) TextBoxes(i).Text = R.ToString Next くらいが最低限だろ
>>354 の問題が解決できてないじゃん
多重管理するなというのは基本でしょ
コントロール名に依存するコーディングというのもなぁ
358 :
デフォルトの名無しさん :2010/11/25(木) 16:08:04
341=344です。 ご教授ありがとうございます。 配列化、できました。 実は配列化したいTextBoxが200個×3種あって 200ずつをTabで切り替えて見られるようにしようとしています。 TextBoxがTab内にあると、この処理がうまくいかないのですが どういう理由なのでしょうか・・・
ちょフォームに TextBox 600個ってさ 新手の拷問かよ
さすがに200はありえない。コードから自動でTextBoxを作るようにするべき。
>>345 を使ってるんだろうが、Tab内でうまくいかない理由は、テキストボックスは
フォームではなくてタブコントロールのControlsの中に含まれてるから。
とりあえずは コンテナ(フォーム).Controls.Find 〜 で子や孫階層まで Find できるが そもそも Grid 系を検討すべきじゃないのか?
ここの人たちは文句言いつつもなんだかんだで優しいな 昔と変わってなくて安心した
だってVB.netってだけで他のスレじゃ風当たり強いんだもの
364 :
デフォルトの名無しさん :2010/11/25(木) 18:51:31
>360,361 358です。 やはりTextBox多すぎですよね・・・ 200個の測定データを1画面(Form内)で見られるようにしたくて その表示する場所としててTextBoxを用意しようとしました。 TextBoxよりも良い方法があればよいのですが・・・ たしかにここの住人の方々は皆さんいい方です。
TextBox200個置くぐらいなら、DataGridViewのセル200個を使うかなぁ。
あははは、今日ちょうどテキストボックスの自動生成をやったよ 改行判定するためにmodなんて演算子を初めて使ったぐらいだ
そもそも表示だけなのにテキストボックスって… 普通ラベルだろ で多くなったらListbox(マルチカラム) もっと増えたらListView 最後はDataGridView だな、俺なら
同じようなことを得意満面に指摘して悦に入る半可通
保守は不要ですよ
コンボボックスのドロップダウンリストってどんな仕組み? 下に配置されたコントロールを隠すようにサイズ拡張されるでしょ もしかしてFormだったりするのかな? 何となく気になっちゃって
371 :
デフォルトの名無しさん :2010/11/29(月) 15:42:36
DataGridViewを使って、配列を1行10列で折り返して表示していく方法は どうやったら良いですか?
バインディング使わずにDataGridViewにデータを表示する方法がわかってるなら 行 = 配列のインデックス / 10 列 = 配列のインデックス Mod 10 で配列のインデックスから行と列を計算するだけ。 バインディングを使いたいならその妙なデータ構造を改めるのが一番簡単だと思います。
373 :
デフォルトの名無しさん :2010/11/29(月) 17:08:45
たとえば、これだと縦にAの数値が並んでしまいます。 Dim A As New ArrayList Dim Table As New DataTable Dim Row As DataRow For i As Integer = 0 To 50 A.Add(i) '仮値を入力 Table.Columns.Add(i, GetType(Single)) Table.Rows.Add(A(i)) Row = Table.NewRow Row(i) = A(i) Next DataGridView1.DataSource = Table 何か間違ってるのでしょうか? もうワケがわかりません。
374 :
デフォルトの名無しさん :2010/11/29(月) 17:37:12
突然ですが、Focus()の事で教えてください。 フォームにコンボボックス・ラジオボタンなどを貼り付けて、 Enterキーを押した時フォーカスの移動をするように KeyPressイベントにコードを書きました。 実行時、フォーカスを示す点線の□枠が出てきません。 Tabによる移動は□枠が出ます。 どなたか対処方法を教えてください。
Select()だったらどう?
AMDのACMLのライブラリを.NETで使う方法無いですかね? C++では使えるようなのですがDLLをインポートしようとしても無理でした
普通のC++でラッパーを書いてC向けの関数としてエクスポートしてネイティブdllとしてコンパイルして.NETからdllimport もしくはC++/CLIでラッパーを書く 前者の方がお勧め
>>377 ありがとうございます
C++の勉強がてらチャレンジしてみようと思います
379 :
374 :2010/12/01(水) 06:35:33
すみません。自己解決しました。 vista , 7 の仕様だったようです。 >375 返答すみませんでした。
>>345 の方法を始めて知った
コントロール名を変数使って指定できないかと前から思ってたんだ
で、プロパティーはそれで変更できるけど
イベントでそういう記述はなんとか出来ないかな?
イメージとしては
Private Sub Control("Label" & i )_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Control("Label" & i ).Click
こんな感じの何かない?
あ、前半はどうでもいいか Handles Control("Label" & i ).Click の部分です
AddHandler
普通にデザイナからそのメソッド選択すれば?
AddHandlerだな AddHandler使うならHandles以下はいらん
IMEが変わった
KB436842
ちょっと前にVB.NETの開発に参加して思ったんだけど、1ソースファイル(*.vb)に 複数のクラスを記述するのって、可読性が極度に下がって俺は嫌なんだけど、 これって他の開発現場では当たり前? インターフェース定義クラスみたいな使い方なら納得も出来るんだけど、、、
セットで使うクラスなら 同一ソースの中に書くかな
このようなエラーが出るのですがどのような原因が考えられますでしょうか? System.Configuration.ConfigurationException: 構成セクション system.data を認識できません。 (c:\windows\microsoft.net\framework\v1.1.4322\Config\machine.config line 4047) 出るPCと出ないPCがあってどうしたものかと。
.net framework 1.1を再インスコしたら出なくなりました。
393 :
デフォルトの名無しさん :2010/12/11(土) 17:42:28
小数点第一位を二捨三入・七捨八入して整数と0.5単位の数値にしたいのですが、関数がわかりません
ありません 自分で作りましょう
395 :
デフォルトの名無しさん :2010/12/11(土) 18:06:43
必要なもの全部用意されてたら君の仕事無くなるよ?
そんな使いようのない関数がわざわざ用意してあっても無駄なだけだしな。 互換性のために残してあるとかなら仕方ねーなと思うが
Int(n * 2.0 + 0.5) / 2.0 で計算できるか。
Boolean型の二次元配列をtrueで初期化したいんですがどうすればできますか?
すべての要素にtrueを代入します
配列の変数名を逆転させてもいいけどね。
>>402 もう少し詳しく教えてくれると助かります
縦方向にリサイズ出来ないように Me.MinimumSize = New System.Drawing.Size(200, 28) Me.MaximumSize = New System.Drawing.Size(2000, 28)とやっても 何故か縦方向にリサイズ出来るんだけどどうすれば縦方向にリサイズさせないように出来るの
イメージを256色PNGで保存するにはどうすればいいんでしょうか
>>403 Dim IsFirst() As Boolean
をやめて
Dim IsNotFirst() As Boolean
にする
DisabledとかUnlockedとか、たまに使っててイラっとするときがある。 オレだけか?
>>405 簡単にやるならたとえば以下
Dim img1 As Bitmap = New Bitmap("in.jpg")
Dim st As IO.Stream = New IO.MemoryStream()
img1.Save(st, Imaging.ImageFormat.Gif)
st.Seek(0, IO.SeekOrigin.Begin)
Dim img2 As Bitmap = New Bitmap(st)
img2.Save("out.png", Imaging.ImageFormat.Png)
ただし、この例はハーフトーンパレットのディザ描画になるため、あまりきれいではない
きれいに減色処理するためには色の量子化などの特殊なテクニックを使って頑張る必要があるが、
これに対する .NET の便利なクラスはない
減色、量子化などのキーワードで検索して、参考になりそうなサンプルを探すしかないと思う
また、減色だけでなく、そもそも256色のパレット付き画像の処理自体、.NETではまともなサポートが
ないので、細かなピクセル処理を行うには LockBits/UnlockBits などを使ってピクセルをバッファとして
読みだして処理する必要があるが、これも簡単には説明できないので、いろいろ検索して調べてみて欲しい
409 :
408 :2010/12/14(火) 00:48:59
きれいな減色に対する.NETのサポートはないと思いこんでたけど、 .NET3.0以降だと、 System.Windows.Media.Imaging.GifBitmapEncoder というクラスが追加されてて、簡単にそれなりの減色結果が得られるようです 一応修正版 Dim src As New System.IO.MemoryStream(System.IO.File.ReadAllBytes("in.jpg")) Dim enc As New System.Windows.Media.Imaging.GifBitmapEncoder() enc.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(src)) Dim mem As IO.Stream = New IO.MemoryStream() enc.Save(mem) mem.Seek(0, IO.SeekOrigin.Begin) Dim img As System.Drawing.Bitmap = New System.Drawing.Bitmap(mem) img.Save("out.png", System.Drawing.Imaging.ImageFormat.Png)
WPF/WICありならわざわざGifBitmapEncoder使わなくてもFormatConvertedBitmap挟むだけで良いよ
411 :
デフォルトの名無しさん :2010/12/15(水) 12:58:43
起動中のブラウザの取得がうまくいきません。 IEの取得はできたのですが、Firefoxのウインドウがうまくいかず、原因がわかりません。 Dim ObjShell As Object Dim ObjFF As Object Dim n As Integer Set ObjShell = CreateObject("Shell.Application") Set ObjFF = Nothing Set ObjFF = ObjShell.Windows(0) Set ObjShell = Nothing IEをひとつだけ起動させると、Set ObjFF = ObjShell.Windows(0)がうまくいくのですが、 Firefoxの場合、ObjFFがNothingのままになってしまいます。 解決方法等、わかる方がいたら教えて下さい。 宜しくお願い致します。
Set ObjShell = CreateObject("Firefox.Application")
そもそもFirefoxはCOM用の口なんか用意してないっしょ
414 :
デフォルトの名無しさん :2010/12/15(水) 21:36:40
ビルドはつかわずにいつもリビルドしかつかわないけどこれでいいの?
小規模のプログラムならどっちも一緒だろ
修正されたソース、アセンブリのみ対象とするのがビルドだっけ
418 :
デフォルトの名無しさん :2010/12/18(土) 01:19:39
Color.ToArgbメソッドを使ってcolor型のデータを数値化 しているのですが法則がわかりません。 RGB値で(0.0.255)の場合16776961と変換され≒256^3に なってしまいます。AARRGGBBと並べるのであれば 青の変換値は255になると思うのですが違うのですか?
16776961じゃないだろよく見ろ 16進で表示すればもっとわかりやすい
420 :
デフォルトの名無しさん :2010/12/18(土) 09:36:15
>>419 256^3だと16777216になるのかな?
16進ならFF0000FFなので4278190335になってしまうんでしょうか?
配列が0からはじまるように RGBも0からはじまるので (0.0.255)も実は 0〜254なので 254を変化すればよろしい
>>418 16776961じゃなくて-16776961だろ?
アルファ値が255なら符号ビットが1で負になる
直感的にわかりやすい値が欲しければConvert.ToUInt32で直接変換してみればいい
vb.netを勉強しとけと言われたのですが おすすめのマニュアルをご存知ないでしょうか?
.net tipsでググる
VB6のコードが一緒に載せてあるサイトは絶対に見ない
一緒にのってるとなにか問題あるの?
VB6と同じように書く=.NET的には悪い書き方
なんちって
Form1に Public i as integer と書いても Form2でiを使えないんだけど
Form1はNewしたのか Sharedはいらないのか どんなエラーが出てんのか
Form2は Form1からForm2.Show したもの
Form2にForm1インスタンスの参照でも渡してなきゃ無理
むずかしす
>>429 Form1.iで参照できる かもしれない
>>432 バージョンとかにもよるが、VBには既定のインスタンスってのがあってな
ユーザがインスタンス作成しなくても、勝手に作成されて参照できるインスタンスがあるんだ
本来なら
>>432 の言うようにForm1のインスタンスへの参照もってないとダメなんだが
Form1だけでForm1の既定のインスタンスを参照できたりするんだ
まあ、既定のインスタンス使うようなコードは書くべきではないと思う
VBで使うべきではないとか良くない機能とか言い出したらVBの存在意義って… VBにあってC#に無い機能のほとんど全部じゃん
>>435 規定のインスタンスはVB6時代から悪者扱いされてたと思うけど。
>>436 >>429 が何をどうして使えないっていってるかわからんからな
だからForm1.iで参照って書いてある
>>437 .netで1回廃止しようとしたんだけどな
いきなり廃止するんじゃなくて、使うか使わないか選べるようにしといて
その次ぐらいで廃止すればよかったのにな
>>438 ルールを逐次変更するなんて最悪のやり方。
2005以降の方針転換は間違ってないと思うよ オブジェクト指向的に良くないというような考えを持ち込むんだったらそもそもVBなんかいらん
買わなくてもフリーのがある。
ありがとう、いろいろあるんだね
vb5 vb6 2002 2003 2005 2008 2010 と何回も買わなければならないのでそろそろ考えねば
QuickBasic 世代から買ってるんだが・・・
VB6→2005→2010(予定)
N-BASICから
448 :
デフォルトの名無しさん :2010/12/24(金) 11:44:45
>>429 > Form1に
> Public i as integer
> と書いても
> Form2でiを使えないんだけど
手抜きしとらんでプロパティでやりとりしろよ
そんなことVBで言ってもしょうがないでしょ それを言い出すと、フォームのインスタンスをそのまま子フォームに渡すのも、結合が強くなるので悪い手抜きだし フォームに貼ってあるテキストボックスをむやみに他のクラスに渡したりプロパティで公開したりするのも フォームの実装をさらけ出してて良くないよ
>>448 手抜きはいいとしても・・・
インスタンス化してない可能性のが高くないか?
451 :
デフォルトの名無しさん :2010/12/24(金) 14:26:38
VB も C# も基本的には一緒だが ここでクダ巻いてるのは VC++ 使いか?
プログラミングごときにあんまり真剣になるなよ 気楽に行こうぜ
VBだからとか関係なく
>>429 で悩んでるような段階で善いとか悪いとか気にしてもな
どうせ今練習で書いてるものなんて慣れた後で必ず全部捨てて書き直すことになるんだから
me.rry=ch(r is math)
LINQって便利だな ちょっとしたCSVのデータを加工する案件があったんだけど まさにうってつけの機能だと感じたよ
mathのほうがソースコードに出てきそうな感じだから。それだけ
460 :
デフォルトの名無しさん :2010/12/25(土) 19:46:17
SetWindowPosを使用して、Form1を最前面に表示したいんですが、 以下のコードを実行して、Button1をクリックすると、 画面の左上にタイトルバーの未表示されるんですが、 何か間違ってるんでしょうか? user32.dllはデフォルトで用意されているんですよね? OSはWindowsXP、 開発環境はMicrosoft Visual Basic 2008 Express Edition SP1 です。 詳しい方よろしくお願いします。 Public Class Form1 Public Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _ ByVal X As Long, ByVal Y As Long, _ ByVal cx As Long, ByVal cy As Long, _ ByVal wFlags As Long) As Long Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click SetWindowPos(Me.Handle, -1, 100, 100, 500, 500, &H40) End Sub End Class
「タイトルバーの未表示」意味不明
Form.TopMost=Trureじゃダメなん?
>>461 タイトルバーのみ表示の間違いです。
>>462 最終的には、別exeで表示されているウィンドウを常に最前面に表示させたいんです。
こんな感じで
Dim hWnd As IntPtr = FindWindow(Nothing, "別ウインドウのタイトル")
If Not hWnd.Equals(IntPtr.Zero) Then
SetWindowPos(hWnd , -1, 100, 100, 500, 500, &H40)
End If
それで、まず自分自身のフォームで試したら、
TopMostにもならずタイトルバーしか表示されない状態で左上に描画されてしまうんです。
どなたか助言お願いします
情報の小出しする奴に助言しても、また条件を追加されるからめんどくさい
PC98用BasicでPC98ゲーム作るのはどうすれば
スレチ
SetWindowPos使わなくてもAppActivate使えばいいんじゃないの 別の実行ファイルを常に最前面にしたいなら、そっちに制御任せりゃいいんだよ
これで動いたよ Public Class Form1 Public Declare Function SetWindowPos Lib "user32" _ (ByVal hwnd As Integer, ByVal hWndInsertAfter As Integer, _ ByVal X As Integer, ByVal Y As Integer, _ ByVal cx As Integer, ByVal cy As Integer, _ ByVal wFlags As UInteger) As Boolean Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click SetWindowPos(Me.Handle, -1, 100, 100, 500, 500, &H40) End Sub End Class
VB2010EEで、インスタンス変数のインテリセンスでSharedメソッドを表示しなくする方法と フォームデザイナが生成するコントロールのアクセス修飾子デフォルトでPrivateにする方法を教えて欲しいです ウザ過ぎて死にそう
Modifiresは駄目そうだなあ 全部選択してPrivate指定するしかないと3年前のこのスレの質問が出てきた 誰に合わせた仕様なんだよこれ まぁ分かってるけど
>>467 >>469 ありがとうございます!
VB6の構文を使っていたんですね、引数の型を直したらうまく動きました。
>>468 AppActivateの存在を知りませんでした。
調べてみます。
>>471 気持ちは分かるけど、Formで外から呼ぶパブリックメンバなんてせいぜいShowかShowModalぐらいなんだから
インテリセンスに余計なものが表示されても普通は事実上そう困らないはずだと思うけど。>Modifierの件
>>472 469の場合、HandleはIntPtr型を返すから変換するか宣言のhwndをIntPtr型にした方がいい
それとOption StrictはOnにするクセ付けたほうがいい
For i = 0 to 100 intSum = intSum + i i = i +1 Next 0〜100までの足し算の結果がバグってるけどなぜ
>>475 i = i +1がいらないんじゃ。
それかintSumの初期値が0以外とか。
intSumの初期値が合っててもi = i + 1の行があったらだめだろ
0〜100の偶数を足すにしてもそんな摩訶不思議なコードは書かない
すごくC言語っぽいコードだなあ、と思ったのでした
Dim i As Integer, intSum As Integer intSum = 0 For i = 0 To 100 intSum += i Next
intSum = Enumerable.Range(0, 101).Sum()
482 :
デフォルトの名無しさん :2010/12/28(火) 18:08:04
右クリックや左クリックをしても、奥にあるウィンドウの操作をできるようにする方法ってありますか? クリックした瞬間に最小化や移動→マウスの位置を取得→その位置のウィンドウを左(右)クリック→またウィンドウを元に戻す ということはAPIというものでできるようなのですが、他に簡単な方法は無いでしょうか 具体的にやりたい事は、デスクトップに時計や画像を少し透過で表示させるけど、 作業の邪魔にはならない・・そんな物を考えています よろしくお願いします。
簡単なやり方はありません C++でWin32API使ってやってるサンプルを見つけたのなら それを移植しましょう
>>482 マウスが乗った時点で裏に回るとか移動して逃げるってのならどう?
マウスが乗ったらポインタの周り10ドット位完全透明の穴を開ければ?
>>486 これで実現できるんじゃない?
ttp://msdn.microsoft.com/ja-jp/library/ms997507.aspx >ヒット テスト
>レイヤード ウィンドウのヒット テストは、ウィンドウの形状と透明度に基づいています。これは、色分けされているウィンドウの領域やアルファ値がゼロの領域は、マウス メッセージが透過することを意味します。
>レイヤード ウィンドウが WS_EX_TRANSPARENT 拡張ウィンドウ スタイルを持つ場合、レイヤード ウィンドウの形状は無視され、マウス イベントはレイヤード ウィンドウの下の他のウィンドウに渡されます。
それをAPIと言ってるんだろ
あーでもあれか。透明にしちゃうとポインタの位置分からなくなるから グローバルフックせんといかんのか
グローバルフックでポインタ位置を取得 ポインタがフォームの範囲内ならその座標を中心に 適当な色でFillEllipse その色をMakeTransparent そのビットマップを表示 で出来たよ あ、ただそれを抑制する手段作っておかないと一切操作 出来なくなるからねw
グローバルフックはググれば適当なdllがあるから
言葉でなく ソースコードください
ソースコードくださいじゃなくて 調べて試せよ
495 :
デフォルトの名無しさん :2011/01/01(土) 12:47:46
>>429 今更だけど、下記で参照できる。
My.Forms.form1.i (iがpublic宣言)
もちろん、iはコントロールのオブジェクト名でも参照できる。
たとえば、
My.Forms.Form1.TextBox1.Text というような感じです。
Select Case って If があれば存在いぎっがないの?
そうです。
列挙体を使った振り分けとかはselect caseの方がずっと便利。caseを自動生成してくれる。 そんなに気にすることじゃないが、select caseの方が一般に処理が速くなる(可能性がある)
else if 〜を何度も書くのが面倒じゃなければね
>>498 >select caseの方が一般に処理が速くなる(可能性がある)
どういう意味?
IfもSelect Caseも全く同じパフォーマンスになると思うけど
VB6ならまだしも、VB.NETからは短絡評価できるようになったわけだし
全く変わらなくなったと思うけど、ILだと結果が異なってたりするの?
具体的な例を挙げて欲しいんだけど
select caseの場合、テーブルで評価してたりするのかな? だとしたら分岐が多い場合は単純ifより速くなると思うけど
最適化されないなら、Ifの方が微妙に遅いだろうな
ILにswitch命令(ジャンプテーブル)は存在するよ
select caseのほうが可読性高いだろ。
do loop do loop exit do loop A loop B はAとBのどこえジャンプかしら
Elseif function()= xx Else if function()=yy と羅列していくとpgm上は分岐の数だけ演算を行うのでしょうか?
function()が何度も呼ばれるかどうかということかな? ILにコンパイルする段階では何度も呼ばれる状態のまま。 ILからJITされる段階で関数にI/Oやその他の作用がないかどうか、 毎回同じ値を単純に返すだけの関数かどうかを検査して、 まとめても問題ないようなら最適化される。
509 :
507 :2011/01/02(日) 15:42:23
>>508 thx
関数が毎回演算されるか不確定ならelseif文に羅列すべきではないね。
ありがとう。
>>509 いや、当たり前だがElseまたはElseIf以降の式は対応するIfで評価された値が
Falseの時しか実行されないって。
そうでなきゃ怖くて使えるか。
512 :
507 :2011/01/03(月) 15:28:15
分かり難い文章でしたか?本当に知りたかった事は、 If a=100 else if functionA(a,b,c)=100 else if functionA(a,b,c)=50 Else Endif (functionは値渡しで他の変数の数値を変える事はないものとする) という文をかいて、functionA()が1回につき計算が10秒かかった時に 最後のelseに到達するまで10+a秒かかるのか20+a秒かかるのか知りたかったのですが、 回答はJITcompilerで決定されるとのことでした。 最適化されるならどの様に書いても問題はないのでしょうが、 Functionが1回実行か2回実行されるかをプログラマが制御できない様な文章は 書くべきではないなと思っただけです。 直前にif文だけの為に dim a as integer, a=functionA(a,b,c)としてaをif文で評価するのって あまり美しくない気がしていまして、、、。
>>512 なんでやってみないんだ。
Visual Basic 2010 Express もインストール出来ないのか?
>直前にif文だけの為に dim a as integer, a=functionA(a,b,c)としてaをif文で評価するのって >あまり美しくない気がしていまして、、、。 >else if functionA(a,b,c)=100 >else if functionA(a,b,c)=50 俺から見りゃ、こんな書き方する方がよっぽど美しくないし無駄にしか思えないわ。
If a=100 Else Dim aa as integer = functionA(a,b,c) if aa=100 else if aa=50 EndIf Endif これじゃダメなのか
同じメソッドの戻り値を複数評価するなんて気持ち悪すぎだろ SelectCaseならまだしも、ElseIfで逐次実行して連続評価とか センスなさすぎ
それよりもJITの段階で最適化されるってのはホントなのか?
その段階で最適化されるなら、最適化オンオフ制御できない気がするんだが
もし最適化されることによる弊害がでたらどうするんだ?コード修正しかないのか
最適化するかどうかはコンパイルオプションとかで制御できるのが普通だと思うんだが
>>508 のあたり詳しく説明してるところとかあったら教えてくれ
ILDASM使って解析(確認)してみればいいんじゃない
基本的に最適化はJITだよ インライン展開なんかもJIT JITの最適化のONOFFは実行時のオプションや属性などで決まる
>>520 >可能かどうか
出来る
>可能なら誰か作ってくれませんか?
スレ違い つうかベンチャーやる気か知らんが甘えるな
ページのリンク抽出して拡張子を条件にしてファイルダウンロードするようなやついくらでもあるだろ
それくらい探してみれば?
>>521 > ページのリンク抽出して拡張子を条件にしてファイルダウンロードするようなやついくらでもあるだろ
> それくらい探してみれば?
それでは無理なので、相談させて頂いています。
尚、ベンチャーやる気はありません。
今後の様々な応用の為のプログラミングの勉強にもなるとも思っての相談です。
だいぶ前にwshで単純なwebページダウンロードを行うプログラムを組んだ事があったのですが、それもどこかに失ってしまいました。
>>523 1つずつ質問したり調べたりするよりも合理的に、最も勉強にもなると私は思っていますが。
へー
>>520 何の会社かしらんけど、減価償却費シュミレーションとか恥ずかしすぎるw
プログラムに限らず、1つずつ調べてコツコツ作ったほうが勉強になるに決まってんだろ いきなり参考書の答えみて勉強になるとでも重ってんのかよ
>>526 あまり程度は良く無いという事でしょうか?
>>527 教師有り学習ではそうなりますが、私の様な教師無し学習ではそうとは限りません。
学生時代から他の人のソースで勉強してきましたので。
> いきなり参考書の答えみて勉強になるとでも重ってんのかよ
なりますよ。
15秒わからなければ答えを見ろという和田秀樹さんの数学の学習法の書籍なんかも参考にどうぞ。
教師無し学習で仮説実験的思考回路を養うとすごい勢いで学習できる脳になります。。。という話はスレチなのでおいときますが、
自分の思っている事が全てだと思わないことです。
答えがない問題のほうが世の中には多いよ。 そうした場合どうするんだろね。この手の人は? 「くれ!!!」って大声で叫ぶエネルギーがあったら、自分で調べたらいいのに。。。
>>529 > 答えがない問題のほうが世の中には多いよ。
本題と無関係の仮定を出して逃げる、、、どこぞのガイドラインのまんまだな
能力のない人間の逃げだろ 調べる能力にしろ、作る能力にしろ
>>532 間にユーザ名とパスを入力するフォームがある
535 :
デフォルトの名無しさん :2011/01/05(水) 16:12:44
回答できないとgoogleにリンク張るっていうのお決まりパターンだな
536 :
デフォルトの名無しさん :2011/01/05(水) 16:48:25
質問です。 開発環境:VB2008 Express OS:XP pro SP3 フォームアプリで他のWindowにフォーカスを移さない、という制御は可能でしょうか。 FormイベントのLostFocusの中で、Me.Activate() しても上手く行きません。 MSではあまりLostFocus使うなみたいな記述もあり、 別な方法があるのかと思いましたが見つかりませんでした。 何かヒントだけでも教えて頂けるとありがたいです。 よろしくお願いします。
>>535 まんま答えがあるじゃねぇかwww
わざわざ答えるようなもんでもない
ログインして
WEBページのリンク抽出して
ダウンロードする
たったこれだけだろ?
ほっとけよ。煽って回答得るって性格の方なんだから。
VB.NETでASP.NETを書いてサーバーにaspxファイル置いとけばボーダフォンとかドコモ用のページに自動でなるの?
ASP.NETでA、Bという機能があって双方の*.aspxはほとんど同じなので画面だけ共用して処理を書く*.vbは別にする事ってできるの?
できるよ
>>539 無理じゃないか?
ユーザーエージェントとかその辺使うんだと思うけど
543 :
デフォルトの名無しさん :2011/01/06(木) 10:22:05
イベントハンドラと処理の解決タイミング?について質問です。 @Form1.Load の後に Form1.Shown が発生するように 同一フォーム内の特定の関数が終了したことを条件として関数を起動させる方法は存在するのでしょうか? 現在 Hide で隠したフォームを AddHandler 【別フォームが閉じた時】, AddressOf 【フォーム表示関数】 という記述で表記し、【フォーム表示関数】内でフォームの更新と表示を行っています。 この更新が非常に遅いので、先にフォーム表示のみを行い、その後更新が出来ないものかと考えています。 Aまた、更新に際してループ処理を行っているのですが、 「X件完了しました」 というアナウンスを 【Xを示すテキストボックス】.Text = 【現在処理した項目数(=ループカウンタ)】(処理Xとする) という形で行おうとした所、処理が完了するまでフォームが表示されないため、途中経過が見れずに アナウンスの体を成しませんでした。 フォームの先表示とともに、処理Xに関しては更新処理中も即表示させることで 『フォームはすぐ表示され、更新中も現在の更新件数が随時表示される』 という機能が実現できるのかなぁ、と考えています。 そもそも発想が間違っている、もっと良い手段があるなどアドバイス頂けると嬉しいです。
非常に遅い処理なんぞはBackgroundWorkerでも使ってろ
マルチスレッドがいいよ
質問から察するに
純粋なマルチスレッドよりも
>>544 がウヌヌメ
547 :
sage :2011/01/06(木) 11:18:54
アドバイスありがとうございます。 >544 さん 早速ぐぐってみましたが、非常にそれっぽい文章が見つかり大喜びです。 現在、必死に内容を解読中です。 最後に DataGridView の表示を更新しようとすると有効でないスレッド間操作って怒られる・・・。 >555 さん 544さんのように、表の処理と BackgroundWorker の裏処理でマルチって事ですかね? 理解に誤りがあったらごめんなさい。 多分Aの進捗アナウンスも検索時に出てきた ProgressChanged あたり調べれば対応できそうなので、 DataGridView の更新手段と BackgroundWorker の理解に取り組んでいます。 取り急ぎお礼のみ
>>546 さん
入れ違いですがアドバイスありがとうございます。
やりたい事はこれっぽいので、苦戦中です。
・・・sageさんとか>とかなにこれはずかしい。
>DataGridView の更新手段 これはどういうこっちゃ? 察するに 1.データを取得 2.データをDataGridViewに表示 3.編集させる 4.なんか登録ボタンみたいなものを押すとデータを保存 (この処理が重くて時間がかかるので、画面が固まらないように バックグラウンド処理で行い、進捗だけプログレスバーかなんかで表示したい) こんな感じ? 釣りじゃないとすれば・・・ 2ch sage 2ch アンカー で調べれば幸せになれると思う
バックグラウンド処理の最後や途中でDataGridViewにアクセスしたらエラーになったんだろ ProgressChangedやCompletedイベントハンドラはUIスレッドで呼び出されるのでそっちでやる
551 :
543 :2011/01/06(木) 16:15:29
やっていること
【処理X】
1.メインフォームを隠し、別フォームを開く。
2.別フォームでCSVを指定し、別フォームを閉じる。
3.別フォームが閉じた事にハンドルして、メインフォームを表示し、処理Xを起動。
【処理Y】
1.処理Xで指定したCSVを開き、データを DataTable に取得
2.DataTable のデータを一行ずつ編集し、内容を修正(結合や計算など)
3.2で修正したDataTable の行を DataSet.【テーブル名】DataTable に代入
(2と3をFor文で行数回ループ)
4.DataGridView.DataSource = 4のテーブル と指定してDataGridView を表示(大量データ)
@の目的は、処理Yを行う前に処理Xを完了させ画面を表示。その後で処理Yを走らせること
だったので、
>>544 さんの指摘通り処理Yを BackgroundWorker で行うことで解決しました。
552 :
543 :2011/01/06(木) 16:16:27
>>549 >>550 さんアドバイスありがとうございます!
参考資料:下記URLのVB版コード
http://www.atmarkit.co.jp/fdotnet/dotnettips/436bgworker/bgworker.html DataGridView については、
>>550 さんの指摘通り手順4に対し発生しました。
これについては
’Invoke を利用するためのおまじない?程度の理解です
Delegate Sub SetDelegate()
’関数をフォーム側で実行させる
Invoke(New SetDelegate(AddressOf 【関数名】))
’処理内容を関数として作成
Sub 【関数名】()
処理内容
End Sub
このような関数を作成し
Invoke(New SetDelegate(AddressOf 【DataGridViewへの書き込み(手順4)】))
という形で対応できました。(この行には下記の致命的な問題あり)
また、プログラムの開始時に
Invoke(New SetDelegate(AddressOf 【Formのロック/プログレスバーなどの表示】))
終了時に
Invoke(New SetDelegate(AddressOf 【Formの開放/プログレスバーなどの非表示】))
を加え『フォームはすぐ表示され、処理は裏で行われる』部分については対応できました。
(・・・Formをロックすると処理中のメッセージもロックされ見えにくくなってしまいますし、
【処理中表示ラベル.Enabled = True】 では駄目なようなので、 Form はロックせず、ボタン
などを個別ロックするしかないのかな?と考えています)
553 :
543 :2011/01/06(木) 16:17:16
A進捗表示については、サンプルページの方法で動いたことは動きました。 ただ、問題が数点あり、現在それに取り組んでいる所です。 A:参考資料の System.Threading.Thread.Sleep(100) 部分に処理Yを全て入れると 参考資料のFor i As Integer = 1 To bgWorkerArg の部分で bgWorkerArg = 0 となり抜けてしまう。 B:そもそも資料の方法では、処理Yの手順3はFor文の『連続した細かい作業』なので対応できるが、 手順4のような『一つの大きな作業』の進捗を表示できない。(と、私が思っているだけかも) C:二度目以降 Invoke(New SetDelegate(AddressOf 【DataGridViewへの書き込み(手順4)】)) を通る際に、フリーズすることが頻繁にあります。 特徴として ・該当行にブレークポイントを挟むと発生しなくなる。 ・進捗表示部分をコメントアウトすると、発生しなくなる。 (現在は手順2・3のFor文部分のみ参考資料の方法で進捗を表示している) ・データ量が小さいCSV読み込み時は、発生しない。 このような症状と見受けられるので、現在はこれの原因を探っています。 凄まじい長さになってしまいましたが、ご意見などいただけるとありがたいです。 なお、未熟なもので内容に誤りがあったらごめんなさい。
554 :
543 :2011/01/06(木) 16:22:00
あああ誤記が・・・。 処理Xの手順3は『処理Yを起動』です。 AddHandler 【別フォーム】, AddressOf Me.Show AddHandler 【別フォーム】, AddressOf 【処理Y】 この形だと処理Yが走っている間はフォームが表示されなかったので・・・。
1セルごとにデータをセットしていけばいい
556 :
543 :2011/01/06(木) 20:03:47
>>555 さんアドバイスありがとうございます
DataGridView.DataSource = DataSet1.TblAddrListDataTable
を
DataGridView.DataSource = DataSet1.【テーブル名】DataTable
という形にし、Dataset側を毎回初期化することで1行ずつ渡す事は成功しました。
しかし、DataSorce 側に行を追加する機能が見つからず、現状では最後に渡した
行だけが表示されてしまいます。
DataGridView.DataSource『.Rows.Add』
のような機能を探しましたが見つからず、ここで引っかかっています。
もしかして、そもそも方向性が間違っていますか?
以前、VB2008でアプリを作ったんですが、その時はDPI設定が100%だったんですけど 今のPCはDPI設定が115%で、文字や画像の表示がずれてしまいます。 自動スケーリングの機能があるみたいなんですが、どこを操作すればよいのでしょうか?
>>556 もしそうしたいのならDataGridView.DataSource をDataTableにキャストしてやらにゃぁ…
'データソースがテーブルと決め打ちされているんであれば
dim temp as datatable = directcast(DataGridView.DataSource)
こんな感じだった気がするけど・・・ 今IDEないから構文忘れたが
環境 OS:XP SP2 VB:2010express(無料ver) SQLServer2008 PC1 にDBのmdfファイルがある。 PC1とPC2は同じLAN内にあり、PC1の共有ファイルに、VBで発行した windowsアプリケーションがある。 質問 PC2から PC1で発行したアプリケーションを実行すると DBのデータを参照できませんでした。 コードで c:\programfile\〜〜 と書いた場合、 PC1の cドライブを参照するのか PC2のcドライブを参照するのか どちらでしょうか?
そりゃローカルだろ・・・・・ \\pc名〜 で書かないといけないと思うんだけど・・・ それ以前にSQLSERVER使うんだったらそういう使い方よりは普通にDBにつないだ方が早いんじゃ?
562 :
543 :2011/01/07(金) 15:19:45
返信遅れすいません、
>>555 さん、
>>558 さんの手段を調べつつ、別の作業に追われていました。
>>558 さん
>>561 さん アドバイスありがとうございます。
1:DataSet 内に テーブルA を作成
2:DataGridView のプロパティ DataSource として テーブルA を指定
(DataGridView の列構造は、テーブルAと完全一致)
3:CSVの値を DataTable テーブルBに取り、様々な編集を加える
4:テーブルB を テーブル?C(宣言した型:DataSet1.【テーブルAの名前】DataTable)に代入
5:DataGridView.DataSource = テーブルC
このような手段で現在は処理を行っています。いっそソース全文載せた方がいいですかね・・・長いですが。
テーブルCを一行取得するごとに手順5を行い、その後テーブルCを初期化する事で、手順5の
段階で常に最新行を取得することができました。
ただ、この場合手順5を行うたびに最新行で上書きされてしまい、最終的な表示が1行のみとなってしまいます。
(初期化を行わないと 1行⇒2行⇒3行・・・・⇒全行)となり、全行最後に代入するならそれ以外の工程が完全に
無駄ですし、そもそもの目的である『全行コピーのような単体(非ループ)の進捗を現す』ことになりません。
現在詰まっているのは、この部分です。
563 :
543 :2011/01/07(金) 15:21:58
>> 558 さん
directcast は型の強制変換と認識しているのですが、この場合ですとテーブルCを DataTable に変換するという
解釈で間違っていませんか?
Dim テーブルD As DataTable = directcast(テーブルC , DataTable)
DataGridView.DataSource = テーブルD
この形では上手くいかなかったので、他にも色々調べましたが上手い手段が見つかりませんでした。
>> 561 さん
参考URLを見ましたが、パスワードがかかっているようで落とせませんでした。すいません。
(追記)
>>553 の最も致命的な問題Cについて
相変わらず意味不明で未解決ですが
http://www.pctec.2chmatome.info/?p=767 ここの 393 さんと似た症状だったのでビルドしてみたら、完成品では全く発生しませんでした。
原因不明なのが非常に気がかりですが、一応表面上は解決です。
>>543 むしろこちらがすみません。
ごめんパス書き忘れてた
PASS:vb
565 :
543 :2011/01/07(金) 15:46:48
>>561 なにこれすごい・・・。
ありがとうございます!読解する作業に勤しみます!!
566 :
559 :2011/01/07(金) 20:19:16
>>560 自宅からすいません
ありがとうございます。
普通のつなぎかたがわかりませんが、複数台でアプリを使いたかったので、
PC1以外での動作確認をするために、行いました。
567 :
デフォルトの名無しさん :2011/01/08(土) 18:56:59
皆様!たすけてください。 DataGridView関連なのですが、 起動時にDataGridViewをアクティブにしているのですが、 Form.Load イベントでImeModeをonにしているのですが、、 Windows Vista では日本語入力になり、 Windows7 ではなりません。 くぐっても解決方法が見つかりませんでした。 どなたかアドバイスを宜しくお願いします。
568 :
567 :2011/01/08(土) 18:59:01
すみません。 Visual Basic 2008 Pro です。
>>566 普通てのはDBサーバとしてSQLSERVERを使うことじゃないかな?
ファイルを共有して使うようなやり方ではないて事。
ただ、複数でやる場合クライアントOのライセンスの問題もあるので注意が必要
それはムとは関係ない別件か
570 :
デフォルトの名無しさん :2011/01/09(日) 17:22:04
TextBoxを右クリックした時に表示されるコンテキストメニューに 右から左に読むやUnicode制御文字の表示というメニューがありますが、 これらを選択できないようにする方法はあるでしょうか? TextBoxのContextMenuプロパティを見てもNothingとなっており、 どこを修正していいか分かりません。 やはり自作するしかないのでしょうか?
>>571 ありがとうございます。
コンテキストメニュー自体を表示しないようにする方法は見つかったのですが、
コンテキストメニュー内の一部を選択できないようにする方法は見つかりませんでした。
よろしければ詳しい場所を教えていただけませんか?
環境 OS:XP SP2 VB:2010express(無料ver) SQLServer2008 PC1 にDBのmdfファイルがある。 PC1でデバッグしていますが、 接続文字列が、 c:\programfile〜 だと接続できるのですが \\pc1\c$\programfile〜 とすると接続できません。 TCP/IPは有効 SQLサーバーのリモート接続は許可 ファイヤーウォールはポート開放済み(現在無効にしてます) 書き方がまずいのか、サーバーになってるPC1からは接続できないのか 設定が何かたりないのか、誰かエスパーお願いします インスタンス名も .\インスタンス名 だといけますが \\PC1\インスタンス名,ポート番号 にすると、接続できなくなります。 こちらについても誰かエスパーお願いします。
575 :
543 :2011/01/11(火) 11:08:44
休日を挟んだため遅くなりましたが、お陰様で問題が解決したのでお礼を。
>>561 サンプルを組んで下さるとか感激しました。
現在参考にしているコードは巨大すぎ、私のスキルでは必要な情報を探すことが非常に困難でしたが
561さんの洗練されたコードを見て、とても理解の助けとなりました。
質問部分以外でも『Useing』等の使い方など参考になる点が多く、ぜひ味わいつくそうと思います。
動け!動けよ!!と半ギレ状態でキーボードを叩く作業から開放されました。
結局
・CSVの取り込みとDataGridViewへの書き込みは BackgroundWorker にお願いする
・元フォームの全コントロールへのEnable設定により、ロックとロック解除を行う
・更新状況は ProgressBar 及び 進捗状況を表すラベル.Update() による表記で現す
・DataTable 上に CSV データを書き込む際は、Castをループさせると便利。
以上により
『フォームを先に表示し、裏で重い作業を行う。かつ、その進捗状況を随時表示する。』
という目的が達成されました。
>>544 >>545 >>546 >>549 >>550 >>555 >>558 >>561 アドバイスくださった方ありがとうございます。
聞ける相手がおらず困っていたため、とても助かりました。
>>575 PGはどうかしらんが、少なくともスポークスマンの才能はあると思う
環境はOSはXPのsp3、VB2008EEです 正規表現を使い、二行以上の文章から検索し、抽出したいと思いました 一度変数に入れて改行を置換したらできたのですが、こういう時は他にやり方はありますか?
>改行を置換したら この辺が意味不明 二行以上の文章からどの部分を抽出すればいいの?
>>572 メモ帳にさえついてるんだから消す必要ないだろ
>>578 返事が遅くなってすいません
Sub Main()
Dim hoge As String = "abc" & vbNewLine & "de"
hoge = System.Text.RegularExpressions.Regex.Replace(hoge, "b.*d", "ghj")
Dim moga As String = "abcde"
moga = System.Text.RegularExpressions.Regex.Replace(moga, "b.*d", "qwert")
End Sub
このような感じです。hogeだとうまく行くのですが、mogaだとうまくいきません。
作っているプログラムは、ブラウザのNGワードなんです(練習用に作っています)。
"氏ね"をNGにしたいとき、"氏"と"ね"の行がまたがってるとうまく置換出来ませんでした。
RegexOptions.SingleLine
いくら考えても上のif文でtrueにならない理由がわかりません、助けてください・・・ Substringは一文字ずつ取り出すといくつかのサイトに書いて会ったのですが、 このコードだと1バイトずつ見てる感じがします。私が何を間違えてるんでしょうか それとも第一引数は文字数、第二引数はバイト数ということなんでしょうか? Sub Main() Dim khonbun As String = vbNewLine If khonbun.Substring(0, 1) = vbNewLine Then '偽 MsgBox("vbNewLine") End If If khonbun.Substring(0, 1) = vbCr Then '真 MsgBox("vbCr") End If If khonbun.Substring(0) = vbNewLine Then '真 MsgBox("vbNewLine") End If End Sub
vbNewLine = vbCrLf = Chr(13)+Chr(10) = キャリッジリターンとラインフィードの二文字
【困っていること】
@某DLLファイルが参照する辞書ファイル(.DEC)の指定方法
もしくは参考URLを理解する上で有効な書籍など。
参考URL
http://codezine.jp/article/detail/444?p=1 ADataGridViewへの『追記』方法
【詳細&経緯】
@某DLLファイル内の関数α(値Xを代入すると、辞書ファイルβからXに対応する値Yを返す)
を使う際に「新辞書と旧辞書を同時に使いたい」という指定がありました。
DLLファイルの中身をいじることは不可能そうなので、フォルダを辞書別に用意して
プログラムで呼び出すDLLのパスを指定することはできないかと考えています。
(DLLが操作できないなら、参照する辞書ファイル名βもいじれないと予想。フォルダを辞書
ごとに作成し、フォルダにDLLと辞書を一対ずつ用意、参照する予定。)
(作成元メーカー曰く、新辞書は旧辞書と同名で更新の際には上書きする仕様らしい。)
一応参考URLは発見したのですが、ちょっと私のレベルでは意味不明なので、理解するうえで
必要な知識などアドバイスいただければうれしいです。
A現在は 1:CSVなりDBの中身を『空の』 DataTable に保存。 2:上記 DataTable を 『空の』 DataSet.TblAddrListDataTable に1行ずつ保存。 3:DataGridView.DataSource = 上記 DataSet.TblAddrListDataTable で表示を変更する。 という手法によって DataGridView の中身を表示してています。 ただ、この方法だと手順2を行うたびに表示内容が更新されてしまうので、手順2を 『現在の DataGridView の中身をコピーした DataSet に対して、追加で』 一行ずつ保存。 とできないものかと考えています。 (扱うデータ量が多大なので、なるべく処理が早いほうが望ましい。) そもそも発想が間違っている、もっと良い手段があるなどアドバイス頂けると嬉しいです。 よろしくおねがいします。
>>586 こないだの人?
@むしろメーカーにといあわせたほうがいいんじゃない?
そう言う使い方を想定していない場合、ライセンス違反になる可能性もあるだろうから
Aはわけわかめ
DataGridViewは捨てて自前で描画すればいいのでは? いくらでも早くできるよ
590 :
585 :2011/01/13(木) 19:37:29
>>587 ものすごく早いレスありがとうございます。
度々お世話になります、こないだの人です。
@については問い合わせてみたところ、技術の方が調べてくれました。結果
『参照する辞書ファイルのパスを指定する』
という素晴らしい関数が存在することを知り、解決です。
・・・さっさとサポートに電話しろって話でした、ありがとうございます。
Aについても
Dim DataSet As New DataSet1.TableName
If DataGridView1.RowCount > 0 Then
DataSet = DataGridView1.DataSource
Else
'なにもしない
End If
以下、DataSet.AddTableName = (追加したい行) を行数回繰り返し
DataGridView1.DataSource = DataSet
これでOKでした、お騒がせしてすみません。
591 :
585 :2011/01/13(木) 19:39:07
>>588 >>589 アドバイスありがとうございます。
>>588 解決はしましたが、後学のためにキーワードだけでも落としていってもらえると
とても嬉しいです。
DataGridView 以外に描画方法を知らないだけなので・・・。
>>589 実はそこも調査中に見つけて途中で良く判らなくなって困ってたURLの一つでした・・・。
でも、これが知識として基本になっているようですし、まずはそのURLから理解できるよう
読み進めていこうと思います。
使用されてないローカル変数です ってのを言ってこないようにするには
使うか初期値入れれば? 宣言して初期値が入ってないものを条件分岐などで使うとそう言われるね dim i as integer if i== 0 then dim i as integer = 0 なら怒られないんじゃね?
>宣言して初期値が入ってないものを条件分岐などで使うとそう言われるね それは元々言われないだろ
>>594 ごめん、C#でしかも未割当の変数で怒られる
疲れてるな俺
警告を抑止する方法があったはずだけど、詳しくはわすれた Visual Studioのスレで聞け
>宣言して初期値が入ってないものを条件分岐などで使うとそう言われるね 俺もあったと記憶してたが…違ったかな?
型によっては割り当て前変数使用の警告が出るな
>>592 プロジェクトのプロパティの「コンパイル」タブで「未使用のローカル変数」の
通知を「なし」にすればいいだけじゃないの?
次の数式は、いずれも "a Mod b" と同じ意味になります。 a - (b * (a \ b)) a - (b * Fix(a / b)) ↑がなぜ おなじ なのかわけわかめ
>>600 a \ b と Fix(a / b) が同じなのがわからないのか?
a Mod b が下の二つの式で計算できるのがわからないのか?
どっちにしても演算子と関数の意味を理解できればあとは算数の世界なんだが
負の数についても同じなんだっけ? Intってやつもあるよね
そもそも余りってのはなんなのか
余り=ぼっち
余り=やればできる子
やってできないから余ってんだよ
まだチャンスはある
そんなものはない
二つ手に負えない問題が出てきたので、ヒントをいただけると嬉しいです。 【困ってること】 ○「種類 'System.OutOfMemoryException' の例外がスローされました。」というエラーの発生。 ○Try & Catch を用いた場合にファイルが閉じられない。 【やりたいこと】 ○DataGridView に表示された一覧表のうち 『選択した行』の『特定の列(予め指定)』のみをCSVに書き出す。 【やっていること】 長すぎるため次レスで投稿 【詳細】 下記プログラムで、一応動きはしました。 ただ、データが10万件とかあると凄く心許ないです。20万件とかあるとほぼ確実にエラー吐きます。 20万件だと進捗チェックαの95%完了前後でエラー、10万件でもβの98%前後で稀にエラー。 安定性を高めるため、メモリに優しい改善案を募集しています。(原因をメモリが溢れているためと想定) また、手順1〜11は全て Try 内で行われており、エラー時は Catch に飛ぶのですが 手順11前に Catch に飛んだ場合、CSVが開きっぱなしになってしまいます。 (Dim sr As New System.IO.StreamWriter(csvPath, False, enc)で宣言、sr.close() で閉じていますが Catch 内に sr.close() と書いても無効でした・・・。) エラー時でもきちんと閉じる方法を教えていただきたいです。 宜しくお願いします。
【やっていること】 (変数の中身については、10行の DataGridView の奇数行を選択した場合として例示) 0:書き込み先CSVを指定 (以下 bgWorker) 1:指定されたCSVを開く。 2:全行をループさせ、選択されていた場合行番号を変数 X に確保、","を繋げる( X = ,1,3,5,7,9) 3:X の最初の一文字目(不要な "," )を削除し、文字列配列である XX に代入する。(XX() = 1/3/5/7/9) ★進捗チェックα (大ループ(列ごと)) 4:For Each Y In XX() によって、XX(選択行の個数)分ループさせる。(選択行) 5:DataGridView の DataSorce に対し、 DataSorce.Rows(Y) で書き込むべき列を取得 6:取得行に対し、さらに列数Z回ループを行う。(カウンタは i とする) (小ループ(セルごと)) 7:DataSorce.Columns(i).Caption にて、列ヘッダ HeaderName を取得。 8:HeaderName を条件に Select 文で分岐、『書き出すべき列か』を判定。 9:書き込む場合、 "," & row(i).ToString を変数 XXX に追記。列項目に編集が必要な場合は、適宜行う。 (小ループ完了) 10:XXX の最初の一文字目(不要な "," )を削除し、CSVに XXX の内容および改行を書き込む。 ★進捗チェックβ (大ループ完了) 11:CSVを閉じる。
つうか、また君かwwww 先に書き出す列をどっかに保持ってから行ごとに処理していけばループの回数は減るんじゃない? 晒せるならソースとデータ(データを差し支えないように置換するなんかして)晒した方が早いんじゃないか?
処理2と3は不要だろ 処理4で全行ループさせて、該当行かどうかチェックすればいいだけ 最後にまとめてファイルに書くんじゃなくて、行単位で書き出せ 書きだす内容を変数にためると、サイズチェックしないといずれ入りきらなくなる
もうコテハンな乗れよww
コテハン名付けてやろうぜ
615 :
609 :2011/01/21(金) 19:14:43
三度目ですねお世話になります。
>>611 >>612 早速アドバイスありがとうございます。
A:DataGridView のデータを取捨選択して書き込み用 DataTable に取る
⇒DataTable の中身をCSVに直接書き出す
B:ループカウンタあたりを作成し、DataGridView.Rows(カウンタ).Selected で判別
⇒True のみ手順5以下を行う
こう解釈してただいまソースと格闘中です。
>>613 >>614 うーん・・・。スレ人口?的にその方が判りやすいですかねいっそ。
自分なら「人恋し」とか付けそうですw
StreamReaderやStreamWriterをUsingで使やいいんでね?
617 :
609 :2011/01/21(金) 20:55:52
>>616 アドバイスありがとうございます。
・・・そういえばそんな便利なものありましたね、忘れてました。
折角以前
>>561 で素晴らしいサンプルを貰ったのに。OTZ
・・・以前ついでに
>>576 コミュ障の気があるので、実は物凄く嬉しかったです。
雑談でレス数を延ばすのが申し訳なかったから自重しただけなんですよ!
618 :
609 :2011/01/21(金) 21:06:24
お陰様で問題が解決しました、ありがとうございます。
困りごと@
今回は
>>612 の手法を使いました。
>>611 を試していて「DataTable.newrow = DataGridView.rows(行番号)」と書いたところ
型が違うと怒られてシフトしましたごめんなさい。
結局
・手順4の行ループの直後にカウンタ(cnt)を設置
・『if DataGridView.Rows(cnt).Selected = true のみ処理を行う』指定(手順5の位置)
・Else までの間に手順6〜10を行う
・End if の後ろでカウントアップと進捗チェックを行う。
この手順で動かしたところ、CPU/メモリ共に使用率は50%前後をキープ。
安心して動かせる(放置できる)ようになりました。
困りごとA
Dim sr As New System.IO.StreamWriter(csvPath, False, enc) の行を
Using sr As New System.IO.StreamWriter(csvPath, False, enc) で宣言
手順11の位置に End Using を入れると、エラー時にもきちんとファイルを閉じてくれました。
こっちも明らかに11飛ばして Catch に直行してるのに何故・・・。
>>611 >>612 >>613 >>614 >>616 お世話になりました、ありがとうございます。
聞く相手の居ない環境なので、真面目な話このスレの人が師匠です。
帳票を作成したいんだけど、コードで少しずつ調整するんじゃなくて、 視覚的にリストを配置したり、ラベルを置いたりすることって無理? 検索すると 有料ソフトばっかヒットするしやたら高いし・・・
>>619 バージョンは?
Crystal Reportsじゃだめなの?
621 :
619 :2011/01/23(日) 15:26:05
>>620 サンクス ちょっと頑張ってみる
ちなみにVB2010express(新しくて無料の奴)
日本語版が最近でたみたいだけど、導入方法載ってるページがないっす
最近登場したUsingとは?
最近でもないだろ・・・
C#はpublic static classとできますが VBはpublic shared classとするとエラーが出ます VBの対応物はないんですか?
> 有効期間 > Visual Basic は静的クラスをサポートしません。 > 静的クラスと同等の機能はモジュールで実現されます。 > 詳細については、「Module ステートメント」を参照してください。
なるほど、モジュールなのか、ありがとうございますた
>>626 モジュールは旧VBから引き継いだレガシーだから使わない方がいいよ。
VBでは静的クラスはコンストラクタをprivateにして実装するのが普通。
MustInherit+Abstract(無理だけど)にしないとC#から正しく認識できる静的クラスにはならないよ
拡張メソッド涙目
間違えた MustInherit+NonInheritable
>>630 を実際試してみるとエラーでした
moduleをコンパイルしてReflectorすると
internal sealed class Aや
.class private auto ansi sealed A
って出ますね
>>627 普通のクラス+shared sub newで動きました、ありがとう
バインドしていないDataGridViewで、列を作って DefaultCellStyle.Format を指定しても反映されないのは仕様なんでしょうか。 対応方法ってないでしょうか。
バインドしてないんだったら値を設定する前にString.Formatしてやればいいだけのことなんじゃないでしょうか
>>632 Me.DataGridView1.Columns(0).DefaultCellStyle.Format = "#,0"
Me.DataGridView1.Rows(0).Cells(0).Value = 12345D
でできる。
書式にあわないデータを設定しているとかじゃないの?
Me.DataGridView1.Columns(0).DefaultCellStyle.Format = "#,0"
Me.DataGridView1.Rows(0).Cells(0).Value = "12345" ' ←数値用の書式設定なのに文字列を設定してる
とかだとダメ。
TableAdapterって 正規化されていないDBを受け取って 正規化されたDataSetやDataTableを返すような用途に使えますか?
636 :
デフォルトの名無しさん :2011/02/01(火) 11:10:13
ExcelシートのユーザーインターフェースをVBのフォーム上にロード する方法ってどうやればいいんでしょうか? SPREDやGridを使わずにExcelの機能をロードして使えないのかな? って事です。 単純にコントロールとして追加できらと Dim xlSheets As Microsoft.Office.Interop.New Excel.Sheets Controls.Add(xlSheets) みたいな感じやりましたが当然のように例外でます。 VSTOソリューションで近い事ができそうなんだけど、あれだとEcxel ブックに実装って感じですよね。 あくまでWindowsフォームアプリにExcelのユーザインターフェース だけ引っ張ってくるのを望んでいます。 情報持ってる方お願いします。
まあ無理だろね
WebBrowserでNavigateする手は一応ある Excelの設定によっちゃダウンロードしちゃうとかいろいろ問題はあるが
おれもExcelと同等のスプレッドシート製品かExcelを取り込む方法知りたい
前調べた感じだと無理そうだったけど
>>638 の方法だとExcel固まっちゃうんだよね
むかしはOLEオブジェクトってのがあったんだが、なくなったか?
AxSOActiveXってどうやって使うん?
dim cn as NpgsqlConnection = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=test;Password=test;Database=a") cn.Open() cn.Close() これだけのプログラムを実行して、postgresqlのログに could not receive data from client: No connection could be made because the target machine actively refused it. unexpected EOF on client connection というエラーが出るんですが何ででしょうか このエラーを無視してDataTableにAdapter経由で値をFillすると何故かDBの中身は表示出来ます ただ、もう一つ接続を用意してNpgsqlCommandBuilderを使って値を書き換えるコードを書いても データは更新されませんでした
データソースにデータテーブルを指定しているDataGridView上で データテーブル内のデータを直接書き換えた直後、DataGridViewの 表示が書き換えた内容にならない場合があります。 表示が出来てないだけで、スクロールなどして対象セルを表示しなおさせると きちんと書き換えた内容になっているのですが、 ちょっとなんとかしたいです。 指定セルの表示を更新させるとか、そういった対処法は 何かないでしょうか?
645 :
人恋し :2011/02/02(水) 00:42:47
【やりたい事】 テーブルA:No,固有値,値1,値2 テーブルB:No,固有値,値B テーブルC:No,固有値,値C テーブルD:No,固有値,値D このような4つのテーブルを結合して テーブルX:No,固有値,値1,値2,テーブルB.固有値,テーブルC.固有値,テーブルD.固有値 という項目数6のテーブルXを DataTable で作成、DataSet にセットしようとしています。 なお、DataSet 上では No はキーとして設定されており、重複はNGです。 また、固有値は全テーブルで共有しており、固有値に対して値1,値2,値BCDが存在します。 (ある固有値は、テーブルAのみに存在。別の固有値は、全テーブルに存在など。) データベースは Oracle を使用しています。
646 :
人恋し :2011/02/02(水) 00:46:29
【困っていること】 SELECT A全部とB/C/Dの固有値 FROM テーブルA LEFT JOIN テーブルB ON テーブルA.固有値 = テーブルB.固有値 LEFT JOIN テーブルB ON テーブルA.固有値 = テーブルC.固有値 LEFT JOIN テーブルB ON テーブルA.固有値 = テーブルD.固有値 WHERE あれこれ という文を書いた時、取得できるテーブルは テーブルX: No1,固有値X,値1,値2,テーブルB.固有値X,DBNull,DBNull No2,固有値Y,値1,値2,テーブルB.固有値Y,テーブルC.固有値Y,DBNull No2,固有値Y,値1,値2,テーブルB.固有値Y,テーブルC.固有値Y,DBNull No3,固有値Z,値1,値2,テーブルB.固有値Z,テーブルC.固有値Z,テーブルD.固有値Z No3,固有値Z,値1,値2,テーブルB.固有値Z,テーブルC.固有値Z,テーブルD.固有値Z No3,固有値Z,値1,値2,テーブルB.固有値Z,テーブルC.固有値Z,テーブルD.固有値Z と、複数テーブルに存在するデータが分裂してしまいます。 このまま書き込むと3行目で「キーが重複していますよ」と怒られるのですが、 DataTable の行を『重複したものは、一つ残して削除する』といった便利な SQLの命令文は存在しないものかと困っています。 命令文、対処法などアドバイスいただけると嬉しいです。
>>644 UpdateとかRefreshとかでできないかな?
とか想像で言ってみる
>>645 A・B・C・Dがどういうのかよくわかんない
キーはNo?固有値?
固有値で結合してるなら固有値がキーな気もするけど、DataSetはNoがキーなんだよね
そもそも固有値がキーなら、結合しても分裂しないか
キーが同じテーブルを結合するなら分裂しないだろうから、
そもそもテーブル構成自体がおかしいんじゃないかなー
結果セットの重複を消したいだけなら、SQLのSELECT句ににdistinctを書けばいいけど
でもやっぱり問題はそこじゃない気がする
>>646 VB.NETまったく関係ない質問だな
そのSQLの3行目と4行目のテーブルBはCとDの間違いだよな?
その結果が本当なら、テーブルAに No2,固有値Y や No3,固有値Z の行が複数あるんだが
出力でNoをキーにしたいなら、複数行をどうまとめる気なんだ?
データセットのキーをNoにするのが理解できん
固有値に対して値1,値2,値BCDが存在 なんだから、固有値をキーにするべきじゃないのか?
固有値をキーにするならまず重複のない固有値の一覧つくって、それにテーブルA-Dをouter joinすればいい
まあどっちにしろテーブル設計とSQLの問題だから、これ以上はDB関係の板できけ
ねぇねぇみんな、どうしてC#やらないんですか? VB.NETとか終わコンでしょww
PrintDocumentを使った印刷で 全ページに総ページ数を印字したい場合って、 PrintPageを発生させる前に 事前に総ページ数を数えておくしかやり方はないでしょうか? PrintPageで印字時に総ページを示すタグの様な物を 印字しておいて、最後に全ページのタグを置き換え みたいな事を妄想してましたが、そんな方法は可能ですか?
最後まで印刷終わった後でPagesつかっていじれへんの?
すみません、Pagesというのが判らないです。 どうやって呼び出すんでしょうか?
SP3とかインストールの問題と同じ可能性があるからそっち調べてみたら幸せになれるかも
ごめん、誤爆した
657 :
人恋し :2011/02/03(木) 22:41:03
返信が遅れてすいません、体調(精神?)不良で倒れてました。
お陰さまで解決です、DISTINCT が私の探していた魔法の言葉でした。
そして皆さまスレ違い失礼しました。
>>647 テーブルAとDataSetのキーはNo テーブルBCDのキーは固有値ですね。
固有値はBCD各テーブル間ではユニークですが、複数テーブルに同じ固有値が存在する
可能性があり得る、という状況です。
説明下手ですいません、問題はそこでした。
>>648 SQLは誤字ですごめんなさい。
まさにその「複数行をどうやって纏めるんだ?」という部分で詰んでました。
>>650 適切なスレの紹介ありがとうございます。
>>651 それが答えでしたありがとうございます。
>>647 >>648 >>650 >>651 毎回迅速かつ完璧なアドバイスありがとうございます。
>>657 スレ違いなんであんまりあれなんだが
テーブルAの主キーがNoで結合結果に同じNoが2行でるには、
結合条件でテーブルAの1行に対して相手のテーブルが2行必要
結合条件が相手テーブルの主キーならこれはあり得ない
Distinctなんてする必要ない。説明のどこかに間違いがある
659 :
人恋し :2011/02/05(土) 17:30:59
>>658 ありがとうございます。
まずキー設定が間違ってました、Aは固有値(Noはユニーク)、BCDはNoがキーですごめんなさい。
色々と残念すぎる質問でごめんなさい。
フォーム上でクリックした点の座標を配列に格納するために、MouseClickのイベントプロシージャで x(n)=e.Xと書いたのですが、NullReferenceExceptionエラーが出てしまいます。 eクラスの使い方自体よく分からない上に VB2002の本を読みながらVB2010を使っているので…アドバイスお願いします。
根拠もなくeを疑う前に、デバッガでブレークポイント張って何がNothingなのか確認すれ
このスレに質問で妥当かどうか迷っていますが、間違っていたらご指摘の程 以前VB(DOS版〜)を使っていました。確かVB5前後まで 現在見るとVB.NETとなっていますが、違いを説明しているページ・書籍等ありますか? またVBナンバーを辞めた理由をご存知の方は理由を教えてください。 プログラムと言うより言語の歴史で恐縮ですが、1つよろしくお願いします
ちょっとステートメントの書き方が似てるだけの別言語だから 違いとか言われても困る と言いつつ言語バージョンは引き継いでるんだけどな。今VB10。開発環境の名前にはなってないけど
名前が変わったのは .net frameworkというC#,VB,J#,F#他多数の言語で共通のライブラリが使える基盤に移行したから そのため文法は似ているもののVB6以前とは互換性も無い
>>663 ,664
なるほど、ありがとう
ちょっと凝った事遣り出すと「おろ?」って感じなのね
イベントドリブンな構造は窓の仕組み上変えようがないだろうが
ライブラリまわりやコンポーネント関係流用は要検討か…
逆にC#やJ#との親和性は良くなったのかな?
>>661 学びはじめたばかりでブレークポイントも知りませんでした。雑な質問かもしれませんがお付き合いお願いします。
1行目がx(n)=e.Xで、この行を実行するとe.Xに赤二重下線が引かれて「オブジェクト参照がオブジェクトインスタンスに
設定されていません」と出ます。
だからe.XがNullなのかなと思って質問したのですが、試しにx(n)=2に書き換えて実行しても2の下に下線が出て
同じ文章が出ます。x(n)はIntegerで定義していますし、2がNull扱いになる理由もまったく想像できず困っています。
>>666 じゃあ、e.XがNothingかどうか調べてみようよ
それがNothingじゃなかったら、x(n)の方があやしい
668 :
667 :2011/02/06(日) 10:33:50
>>666 >
>>661 > 設定されていません」と出ます。
> だからe.XがNullなのかなと思って質問したのですが、試しにx(n)=2に書き換えて実行しても2の下に下線が出て
> 同じ文章が出ます。x(n)はIntegerで定義していますし、2がNull扱いになる理由もまったく想像できず困っています。
ちゃんと見てませんでしたすみません
それなら、x(n)が何も参照してないんじゃないだろうか
デバッグ中は自動変数とかそういうウィンドウ出てるから (出てなかったらメニューのデバッグ>ウィンドウで) それでそれぞれの変数の状態を確認する
>>668 おっしゃるとおり配列の宣言をよく理解していなかっただけの単純なミスでした。恥ずかしい。
それよりブレークポイントや、おかしい値のチェックを知れたことのほうがずっと有益でした。
デバッグって大事ですね。どうにか初めてのプログラムが完成しそうです。
重ねて回答くださってありがとうございます。
VBの関数辞典みたいな本でおススメ教えてくだぱい
MSDN with Google
>>672 MSDNライブラリ。
.NETライブラリのリファレンスは書籍化されてたはずだけど、
アホみたいに高いし東京都全部の電話帳ぐらいのボリュームがある。
なるほど本は必要ないんですね。サンクス!
ヘルプにヘルプが必要だったりするけどな
>>676 おまえMSDNは10年ぶりか、力抜けよ
あれって全部機械翻訳なんでしょ
よほど評判が悪かったのか、最近のは人間が翻訳してないところは英語のまま
昔からMSDNライブラリに機械翻訳なんかないってw KBと勘違いしてるんじゃないの
ニッチなライブラリだと機械翻訳まんまなのはあるぞ
人間がやってるのか。 機械翻訳の割には普通の文書だなって思ってた。
VB中学校は俺解釈と俺用語が多すぎ 書いてる人はそれなりにきちんと理解してはいるんだろうけど いかにもVBしかわからないの丸出しな感じ
ボタンにフォーカスがある状態でリターンキーを押しても ボタンが押されるアニメーション が起こらないんだけど
>>685 それに気付けば「卒業」する場なんじゃないかな。「中学校」だし。
俺はdobonがまだ理解不能な頃にけっこうお世話になったんで悪く言いたくなかったり。
そんなに俺用語多かったっけあそこ。 あまり真面目に読んだことないけど、そこそこちゃんと分かってる人が書いてる印象だったが
オブジェクト指向が絡んでくると怪しくなる クラスが消滅するまで とか意味不明な言葉が出てくる
690 :
デフォルトの名無しさん :2011/02/08(火) 21:27:38
vb.net2010expressです form_main(スタートアップフォーム)にボタンが3つ有り 1つめはデータ入力フォームを、他の2つは検索用フォームを開く ようにしてあります。form_a,form_b,form_c ここで、入力フォームが開いているときは他のフォームは閉じておきたい また、検索用フォームが開いているときは他のフォームを閉じておきたいですが、どうすればいいのでしょう? Form_a_Loadプロシージャで If Form_b.Visible=true then Form_b.Close() End if としてみたんですが駄目でした
691 :
デフォルトの名無しさん :2011/02/08(火) 22:49:42
フォームはShowかShowDialogで制御するのが基本だからな
ShowDialogとHideな
しかしこたえるきになれないしつもんだな
と言っても、小難しい質問だと答えられないのが、このスレのクオリチー
単純にメインフォームから閉じるんじゃダメなの? 子フォームから閉じなきゃダメなの?
696 :
690 :2011/02/08(火) 23:41:57
>>695 メインフォームの検索ボタンを押したときにでも勿論構いません。
検索フォームと入力フォームが同時に開いているのが嫌なだけですから。
開いたフォームはメインフォームのフィールドに入れとけ
>>690 インスタンスとかイベントとか、基本的な概念が分かってなさそうだから
手を動かす前に勉強した方がいい段階かもしれんね。
どうやればできるのかは知ってるけど、そんな糞設計をするようじゃ 迷惑でしかないから教えない
>>699 じゃぁこんな時はどんな風な遷移設計がいいのですか?せんせい!!
メールの送信時に 送信済みトレイに送信メールを残しておくために、 SmtpClientを使用せず MAPIを利用してメール送信プログラムを作成しています。 メーラーはOutlookExpressを使用しており、 複数メールアドレスがアカウントとして設定されています。 @yahoomail(既定) Ahotmail Aのアドレスからメールを送信したい時に MAPIにて AのログインID,パスワードにてログインを行い、 メールの送信を行うと 送信元アドレスが@の既定のアドレスのほうに なってしまいます。 既定のアカウントが@の状態でAでログインした場合に 送信元アドレスをAのアドレスををすることは できないのでしょうか?
OutlookExpress ってMAPIはサポートしてないような。 OutlookはMAPI対応だけど。
expressでも簡易MAPIクライアントにはなれるみたい。
>>702 は忘れてね。
関数に静的クラスを渡すことってできないでしょうか? sub hoge(kurasu as class) end sub call hoge(kurasu) みたいに。
渡してどうすんのさ 静的メンバで多態したいとか言うの?
やめときます。
707 :
デフォルトの名無しさん :2011/02/09(水) 20:33:32
いいかげん、なんの行動もしてないくせにやたら高飛車な
キチガイでドボンだのの解説サイトに粘着してるカス(
>>295 )
を何とかしてほしいわ
なんだ唐突に。
これがアスペ脳か。
まあ、
>>295 みたいな奴がカスなのだけは同意するけどね。
MSDNのチュートリアル入門やった後は何がおススメですか?
いちいち人に指示されなきゃならんのか?
指示されるつもりはないが、効率よく進みたいので、参考までに聞いてみただけだよ
じゃあ指示しない
答える気ないカスは黙っとけ
そのカスとやらに見下される気分ってさぞかし快感なんだろうね 理解できないけど
理解できないけどね
進みたい方向もゴールもわからん 必要なのは占い師か?だったらスレ違いだな
TAB区切りのTSVデータをTABで分割し配列に格納したところ 配列には3要素のみが格納されると思っていたらなぜか 4要素が格納されてしまうのですがどこに見落としがあるのでしょうか? (TABでsplitしているのだから行末の改行文字は無視されると思っているのですが) 1 武田1 営業部1(改行) 2 武田2 営業部2(改行) 3 武田3 営業部3(改行) line には、 1 武田1 営業部1(改行) という読取ったデータの1行分が入っているとします。 vec_tab = Split(line, vbTab) 'TABで分割 を実行すると vec_tab の要素数は3では無く 4となり vec_tab(4)の中身は "" (空文字)となっています。
ソースを見せろ
readData ← TSVを丸ごとメモリに読取ったデータが入ってます。 vec_line = Split(readData, vbCrLf) '1行分のデータで分割 For Each line As String In vec_line vec_tab = Split(line, vbTab) 'TABで分割 Next
問題ない じゃあtsvファイルをバイナリエディタで見せろ
えー
DataGridView 内の特定のセルがクリックされた場合に その列定義がTextBoxか否かという判定を行いたいのですが どういうコードを書けばよいでしょうか? Private Sub dgv_test_CellClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgv_test_list.CellClick If e.ColumnIndex >= 0 Then If dgv_test.Columns(e.ColumnIndex).CellType Is DataGridViewTextBoxCell Then End If End If End Sub このコードを書くと DataGridViewTextBoxCellは型です。有効な式ではありません。 というエラーが出てしまいます。
>>721 まさかケツにタブが付いてたとか言わないよな
頼むからそう言ってくれ
>>723 if typeof hoge is fuga then
end if
>>725 試してみましたがエラーが出てしまいます。
どうすれば正常に判定することが出来ますか?
If TypeOf dgv_test.Columns(e.ColumnIndex).CellType Is System.Windows.Forms.DataGridViewTextBoxCell Then
'ここで色々やりたい
End If
○エラー
'System.Type' の式を型 'System.Windows.Forms.DataGridViewTextBoxCell' にすることはできません。
If TypeOf dgv_test.Columns(e.ColumnIndex) Is System.Windows.Forms.DataGridViewTextBoxCell Then
Typeオブジェクト関連のMSDNの説明は相変わらず不正確でわかりにくいな。
>>727 >>728 >>727 の記載の様に修正したところやはり下記のエラーが出てしまいます。
なぜ!?
型 'System.Windows.Forms.DataGridViewColumn' の式を型 'System.Windows.Forms.DataGridViewTextBoxCell' にすることはできません。
本当に頭の悪いやつだなw
If TypeOf dgv_test.CurrentCell Is System.Windows.Forms.DataGridViewTextBoxCell Then でどうだ
型付きデータセットの中のテーブルアダプタを配列にする方法を教えてください Object型に入れても、メソッド使うときに遅延バインディングになってしまいます
Componentから派生したクラスを作成して TableAdapterのBaseClassプロパティをそれに変更 後は野となれ山となれ
734 :
デフォルトの名無しさん :2011/02/12(土) 23:58:36
のんびり開発してたらなんか冒険の書?とかで書けないし
>>683 罠サイトか?気をつけるわ
>>684 のページ見ておく
ある文字列からCrやLfやCrLfを排除する関数わ?
Replace
楽○の懸賞用のプログラムをWebBrowser作ってるのですが、 どうも画像認証の所で詰まってしまいます。 これはどうしたら処理できるのかご存知の方おられますか? できれば、教えていただけませんか?
処理させないための画像認証だからなぁ
画像認証は大変アルヨ とりあえずOCRとかで検索すればいいんじゃない
>>731 遅くなったけどうまくいきました。ありがとう!
742 :
738 :2011/02/15(火) 23:58:36
>>740 教えていただきありがとうございます。
OCRっていうやつを使えばできるのか。
なんとかやってみますww
仮に出来たら相当だけどな
>>739 であり、
>>740 が何故中国かを考えた方が良いアル
つかあんまりやらんで欲しい
画像がどんどん難解にひん曲がっていって普通に視認できねーよ
テンプレート文字を作って、認証文字の輪郭を抽出して、そのテンプレートと どれぐらい一致(=テンプレート内に収まるドットの数)を見るかって、 そういう感じらしいよ テンプレート多ければ多いほど信頼性が上がるってやつ
折れと曲がりさえ区別できれば難しくない気がする
まずノイズ除去からかな? 走査線みたいなのだったり色のついた水玉だったりとかの その辺除去して白黒の変な文字だけにすれば少しなんか見えてきそうな気がする。
実はOpenCV使えば簡単だけどな。
748 :
デフォルトの名無しさん :2011/02/21(月) 16:36:54.08
DataGridViewの一番左の行に行番号入れたいんだけど 簡単にできる方法ないですか?
datagridview 行番号でそっこう出てくる 好きなの選べば?
現在実行しているファイル hoge.exe のビルドした日付をhoge.exe内から取得する方法はありますか? ビルドしたバージョンを取得する方法は分かったのですが
そもそも「ビルドした日付」なんて持ってるのか?
更新日時で茶を濁すぐらいしかなかろう。
753 :
デフォルトの名無しさん :2011/02/24(木) 13:21:26.03
PEヘッダ解析で
754 :
750 :2011/02/25(金) 00:37:41.25
簡単には取得できないようですね なんか別の方法を考えてみます (もしくはあきらめる)
755 :
デフォルトの名無しさん :2011/02/25(金) 13:27:03.86
ボタンを押すとマウスカーソルが移動する単純なプログラムを作っているのですが、 縦方向には移動するものの、横方向に移動することができません。 対処方法がよく分からないのですが、ご教示頂きたいと思います。 宜しくお願いします。 ------------宣言--------------- Private Declare Sub mouse_event Lib "user32" _ (ByVal dwFlags As Long, ByVal dx As Long, _ ByVal dy As Long, ByVal cButtons As Long, _ ByVal dwExtraInfo As Long) Private Const MOUSE_MOVED = &H1 'マウスを移動する(相対座標) ------------実行--------------- Call mouse_event(MOUSE_MOVED, 300, 0, 0, 0) ←縦方向に正常に動きます。 Call mouse_event(MOUSE_MOVED, 0, 300, 0, 0) ←横方向に全く動きません。
Long => Integer
Dim Dt As New DataTable("Creature") Newはいったいどんな効果が?
Dim Dt As DataTable = New DataTable("Creature") の略 Newはコンストラクタを呼び出している ちゃんと理解するならオブジェクト指向勉強してこい
むむ
11/02/26(土)00:42:12 これをWindowsフォルダ名に使える文字列に書きかえるプログラムかいて ↓
宿題は自分でやれ
762 :
760 :2011/02/26(土) 11:24:00.06
URLエンコードとHTMLエンコードとSQLエンコードはあるのに なんでWindowsエンコードはないんだよ
知ってるがお前の態度が気に入らない
764 :
デフォルトの名無しさん :2011/02/26(土) 15:35:58.73
>>760 md "\\?\c:\temp\11/02/26(土)00:42:12"
いまどきVS2005で開発してる俺ってどう? 古いか?
まあ唐突にスレ違いな雑談を始めるセンスはかなりおかしいと思うよ。 Win2kに対応可能なセットアップを作れるのは2005までだから、 そういう事情で2005を使ってるところはまああるでしょ。 それに、某川俣氏みたいにMSマンセーな人は最新版の優位性をやたら煽るけど、 C#にろしVBにしろ、2005より後に追加された機能なんてなけりゃなくてもなんとかなるし。
確かにな。 WPFやSilverlightアプリ作りたいなら別だが WinFormなら最新版である必要ないな。
DataGridViewで指定した行をアクティブにするにはどうすれば良いのでしょうか? 例えば、10行のデータが存在しているとして 3行目をアクティブにしたいのですがやりかたがわかりません。
「某川俣氏」みたいな表現する奴ってなんなの? 特定してるのにあえて某ってつけるのが面白いと思ってるの?
まあ少なくとも「奴ってなんなの?」とか書いてる奴が言えた義理じゃない。 っていうか、ガイジンじゃないなら婉曲表現ぐらい分かれよ。
>>770 ですが誘導されたので質問しました。
エスパーの方お教え下さい。
DataGridViewで指定した行をアクティブにするにはどうすれば良いのでしょうか?
例えば、10行のデータが存在しているとして
C#スレ見たけど誘導なんてされてなくね? 甘えんなよカス
774 自己解決
oracleのDB8iと10gへ、9i(9.2.0.1)のクライアントを使用して接続したいんですが、 ODACだと9iクライアントに対応するものがなくて困ってます。 どのミドルウェアを使えば出来るでしょうか?
JDBC
そもそも9iクライアントで繋ごうとしてる時点で無理 JDBCってJava以外から使えるの?
780 :
人恋し :2011/02/28(月) 02:02:50.00
【困っていること】 Private Sub UpdataMaintLoad(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles _DataGridView.CellDoubleClick If 『ダブルクリックされたセル(場所)がヘッダである』 Then 'イベントは起こさない Else'(=ヘッダではなく、表の中のセルがダブルクリックされている。) イベント(sender, e) End If End Sub この『』に入れるべき条件式が判らない。 【背景】 ・セルの詳細を表示する関数が、ヘッダのクリック時に暴発してしまうことを防ぎたいです。 ・ヘッダをクリック禁止にする対策法は、ソート機能が使えなくなるためNGです。 度々お世話になりますが、宜しくお願いします。
EventArgsじゃなくてちゃんとDataGridViewCellEventArgsで受けるか、 eをDataGridViewCellEventArgsにキャストして if e.ColumnIndex<0 or e.RowIndex<0 then で行けるかと
782 :
人恋し :2011/02/28(月) 22:50:06.79
レスが遅れすみません。
朝一で確認したのですが、会社が掲示板書き込み禁止だったので・・・。
>>781 ありがとうございます、ご指摘の方法でばっちり解決しました。
いつも素早く素晴らしいアドバイスをいただきとても助かっています。
783 :
デフォルトの名無しさん :2011/03/03(木) 01:23:55.93
DataGridViewの使いにくさは異常
使いやすすぎだろ
別になれればどうということはない
DataGridView で質問があるんだけど セルをエクセルに見立てて質問する。 A〜Dまで列があって、C1の次はB2に移動させたい。 「次」とはタブキーもしくはエンターキーを押したときの動作 KeyDown イベントで書くと正しく動作するように見えるけど セルを編集してて編集終了の意味でエンター押すと KeyDown イベントが起きなくて D1 に行ってしまう。 仕方なく CellEditEnd にも KeyDown と同じように CurrentCell を変更するコードを書いてみるが 一瞬B2に移動する挙動を示しつつも、D1へ移る内部処理が生きてて、C1→B2→D1 となってしまう。 最終的に、CellEditEnd の中で SendKeys "{Right}{Right}" として所望の動作にはなったんだが セル列の増減に自然対応できない強引すぎるコードで嫌いだ。 なにか良い手はないのか
古いシステム入れ替えの場合だいたいいつもEnterで横と言われるんだが Excelだってデフォルトで下に移動するでしょ といって左右使わせることにしている フォーカスも同じ Tabでいどうしてくれ WEBフォームなんかでもどこでもTABでいどうでしょ? て見せて無理やり納得させてる 古い産物いつまで引きずるつもりなんだよカス
CellLeaveイベントじゃだめ?
>>788 論点はエンターをタブ化する部分ではないんだが。
編集中の内容を確定するときはエンター押すだろ?
C1の編集が終わって、そのエンターでB2にしたいだけよ
MSDNにはこう書いてあるけど、関係あるだろうか? Control.KeyDown イベント Tab キー、Enter キー、Esc キー、方向キーなどは、コントロールによって自動処理されます。 これらのキーで KeyDown イベントを発生させるには、フォーム上の各コントロールで IsInputKey メソッドをオーバーライドする必要があります。
datagridviewってソートすると選択していたレコードがどっかいっちゃうけど、 Excelみたいに選択レコードそのままにソートってできないの?
>>793 お前の家ぐらい覚えとけ。
とっとと家に帰れ。
>>794 のせいですっかり場が寒くなってしまいました
Excelと同じ事したいなら最初からExcelでいいじゃん。 わざわざVB.NetでExcel紛い作る意味あるの?
何言ってんだお前
799 :
デフォルトの名無しさん :2011/03/06(日) 18:05:02.27
.txtで2011-03-04と2011/3/4が混在してるデータで20110304(数値)に変換して読み込む場合 Dim MyDate1 As DateTime = DateTime.Parse("2011/3/4") Dim MyDate2 As Integer = Integer.Parse(MyDate1.ToString("yyyyMMdd")) これでいいの?もっとスマートな方法ある?
Dim MyDate1 As Integer = Integer.Parse(DateTime.Parse("2011/3/4").ToString("yyyyMMdd"))
正規表現で "-" と "/" をブランクに置換する
802 :
801 :2011/03/06(日) 18:49:02.72
"/"の方は頭0無しだったか、忘れてくれ
>>799 のコードを見ると、なんか「スマート」の定義が俺と違う気がするんだよね。
何故に日付を数値にしたいんだ? その後何したいのか気になるんだけど
DBに格納するとか? 文字型でやってる所もあれば数値型でやってる所もあるだろう
Dim dt = DateTime.Parse("2011/3/4")
Dim idt = dt.Year * 10000 + dt.Month * 100 + dt.Day
スピードはこっちのほうが速そうだけど、コードのスッキリさでは
>>799 >>800 かな。
スッキリも糞もParseの例外を考えていない糞コードだろ
単にParseをTryParseに変えればええだけやん
例外が出てくれた方が良い場合もあるよね
来る文字列が DateTime.ToString("yyyyMMdd")なりでやってればその例外は無視するほうがきれいだろ それ失敗するとかあくまでもホントの例外になるんだから やり方次第だから反射レスで 例外考えない糞コードてのは言いすぎじゃないか?
Integer.Parseの例外はまだしも、 DateTime.Parseの方は考えるべきだろ。
例外処理なんて、プログラム全体で考えるべきで 単体の命令とってみて例外処理してないからどうこうって言えるわけがない 子の場合はデータ読み込みなんだから、不正なデータがあったときに どうするのかっていうプログラム仕様を考えた上で例外処理すればいいだけ
>>812 当たり前のことをドヤ顔で言うな
お前はすっ込んでロリ
Try Cach EndTry しかつかったことないけどFinalyってなに?
ggrsk
例外が発生しようが発生しまいが行いたい処理を書く場所 主にファイルを閉じたりDispose呼んだりするのに使う でも上の場合はUsing使ったほうがいい
VBでコンストラクタから、ほかのコンストラクタを呼ぶのはどうするの? C#の public void Hoge(int n) : this(n, 0) {・・・} みたいなやつ。
Access <-> .netで通信する事になりました コマンドライン引数 or プロセス間通信(Accessにできるの?)以外に良い接続方法が思い浮かびません 何方かヒントをよろしくお願いします
>>817 Newすりゃそのクラスのコンストラクタが呼ばれる
継承元のコンストラクタを呼ぶならMyBase.New
>>817 C#みたいにオーバーロードされたコンストラクタの呼び出し専用の構文はない。
あたかもNewっていう名前のメソッドがあるかのように書くだけ。
ただもちろん、別のコンストラクタ呼び出しの前に他の処理を書けない点はC#と同じ。
っていうか、MSDNライブラリに普通に解説があるんじゃないかと...
共通部分をカプセル化して呼び出しゃいいんじゃないの まぁReadOnly付いてるのは無理だったりするけど
Try Cach EndTry しかつかったことないけどFinalyってなに?
ggrks
>>823 Try Catch抜ける前に必ずとおる処理を書く
ぐたいれいもあげてくれないとしょうがくせいにわはかんない
質問させてください。 文字列として"82A083A282A482A682A8"と格納されている値を "あいうえお"と変換したいのですが方法がよく分かりません… いい方法ございますでしょうか。
"82A0"を"あ"と察するにS-JISなんだと思うが他が分からん 2文字目と思われる"83A2"は"82A2"の間違い?
>>830 返答ありがとうございます。
すみません…"82A2"の間違いです。
4文字ずつ区切って DirectCast(Int32.Parse("82A2", NumberStyles.AllowHexSpecifier), Char) でいけるかな
駄目に決まってるだろwChar/StringはUTF-16だぜ 普通に2文字ずつByte.Parseしてって配列化して最後にEncodingでGetString
その前に仕様かなんかがあるんだろ? 確認してきたらどうなのよ?
技術検証のためにspreadのトライアル版をインストールしようと思ったが、 地震の影響か、grapecityのサイトに繋がらん・・・ オフィシャル以外で配布されてたりするんだっけ? 知ってる方いたら教えてください><
こういうとき アクティベーションを要求されるソフトは最悪だな
このスレであってるかどうか解らないんですが・・・、 VisualBasic 2010 Expressでフォームmainformの背景色を変更したくてmainformと言うフォーム上で mainform.BackColor = Color.Purple と言う命令を使いましたが、 'WindowsApplication1.mainform'は 規定のインスタンスからそれ自体を参照できません。'Me'を使用してください。 とのエラーメッセージが出ました。そこで、 Me.BackColor = Color.Purple と言う命令を使うとエラーが出なくなりましたが、mainformの背景色が変わりません。 どのようなコードを書けば背景色が変わるのか教えてください。
>>839 プロジェクトの中で、フォームはmainformだけであります。
フォームのどのタイミングなのかじゃないかな? hogehoge_Load とか InitializeComponent() とか書かれた部分の前だとか ソースコピペで晒してみれば?
842 :
デフォルトの名無しさん :2011/03/18(金) 09:48:24.43
プロジェクトのフォルダで bin/Releaseと、 obj/x86/Release は何が違うのでしょうか?
ページネーション処理が出来ないって本当? よくあるページ移動をこういうリンクにしたいのが ↓ <<最初 <前 1 2 3 次> 最後>> これしか出来ないと。(涙 1 2 3 実装段階になって先方にコントロールが無いから出来ないって言われた。 信じられん。
obj binは全く違う binはコンパイルされた結果が入るんで開発者側でも使うけどobjはVSがコンパイルしたりいろいろやってるときの作業用に使うんだったはず ふつうobjは意識しないだろ・・・とおもうんだけど俺だけ?
>>843 ページング位自前で実装させろ
やったことないとか言ったらその会社経験なさすぎ
>>845 ですよね。
自分で他言語では、やってるので泣きそうになった。
これから交渉してきます。
ありがとう。
例外が起きるまえに例外をcatchできないかな? URLをもとに某SNSサイトから動画みたいなのをダウンロードするプログラムを作ってる。 このプログラムはそのページでないとArgumentExceptionを吐いてくるから、それを阻止したいなー って思って。 一応、 try ダウンロード処理 catch ex as ArgumentException Exit sub end try みたいな感じで纏めてるけど… もっとスマートな方法を知りたいです。 よろしくお願いします。
> そのページでないとArgumentExceptionを吐いてくる そのページってのを事前にチェックすればいいだけじゃないの 例外は言葉通り、事前に対処できるなら出来る限り発生させない設計のほうがいい
849 :
デフォルトの名無しさん :2011/03/20(日) 15:44:01.07
textboxに入っている文字列をHTMLで表示したいのですが、どうしたらいいでしょうか。
851 :
デフォルトの名無しさん :2011/03/20(日) 16:46:51.07
>>850 すいません、WebじゃなくてWindowsformです
>>852 有難うございます。
こいつを使用してWebBrowserコントロールに表示する感じであっていますでしょうか
DataGridviewのとある列だけ太字にしたいんだけど、どうすればいいの? BoldプロパティがReadonlyでいじれません
"2000/02/01"など文字列型のデータが変数Aに入っていて、それをDateAddを使用し+3ヶ月するよう、以下のようにしてみたした A = DateAdd("M",3,CDate(A)) なぜか、Aの値が「#05/01/2000#」と返ってきます 一体なぜなのかわかりません…Aに"2000/05/01"と設定する上手い方法がありませんでしょうか?
856 :
デフォルトの名無しさん :2011/03/25(金) 22:53:50.19
間違えました B = DateAdd〜 でした BはDate型です 変な値が返ってくるのも、上手く設定したいのもBです
857 :
507 :2011/03/25(金) 23:00:08.23
Date型が#mm/dd/yyyy#という形になってるからそれであってるよ Format関数で適当に整形すれ
>>854 Font自体をBoldで作って割り当てたらいいんじゃないの。
>>854 columnsコレクションのdefaulecellstyleが?
テキストボックスをクリックしたとき、テキストボックス内のクリックした場所にカーソルを出すのでなく、 テキストボックスの中を選択状態にしたいのですが、これはプロパティで設定するものなのでしょうか? (わかりにくくてすみません…)
ヘルプによると MyString = String(10, "ABC") ' "AAAAAAAAAA" を返します。 というのがString関数の仕様だけど これをABCABCABCABCABCABCABCABCABCABC のようにABCを10回書きたい場合はどうすれば
そりゃVB6のString関数だろ
ついでに文字列を繰り返すメソッドはなかったと思うから適当に次のような 拡張メソッドでも定義すりゃいい <System.Runtime.CompilerServices.Extension()> Public Function Repeat(ByVal s As String, ByVal count As Integer) As String Dim buff As New System.Text.StringBuilder For i = 0 To count - 1 buff.Append(s) Next Return buff.ToString End Function
一行で目的を果たせる便利さが関数どすえ?
関数とか言ってる馬鹿はVB6でも使ってろよ
マスクが99/99と設定したテキストボックスに以下のように入れても、実際のテキストに入る文字列が" /"になって、最後の二桁がなぜか取得できません テキストボックス = " / " なにか設定が足りないのでしょうか?
テキストボックスのマスクってのは何? PasswordCharプロパティのこと?
>>868 いえ、MaskedTextBoxのMaskプロパティです
870 :
867 :2011/03/26(土) 12:44:33.38
すみません! テキストボックスには" / "と表示されていました ただ、以下のようにした場合、IF文が真になりません テキストボックス.text = " / " IF テキストボックス.text = " / " Then Exit Sub Else 処理 End If
Maskの9は数字または空白を許可する要素 せっかくMaskしてんのに" / "を代入する意味が分からんが 99/99でMaskした場合は" /"になる " /"で比較すりゃTrueになんだろ
ああそうだった 連続した半角スペースは2chだと潰れるんだった 半角スペースの代わりにアンダーバーで表すと"__/"
>>871 出来ました…ありがとうございます
ちなみになぜ" /"になるのでしょう?
違ってたら申し訳ないんですが、確か.net化する前は" / "の比較がいけたと思うのですが
後ろが切り詰められるのはMaskedTextBoxの仕様だと思う 例えばMaskを9999にして"123 "をセットした場合は、"123 "ではなく"123"と 後ろが切り詰められる 厳密には切り詰められる訳じゃなく、後方の任意数のスペースは 無かったものと見なされてるっぽい .NET可する前ってのはVB6だと思うが、そもそも標準でMaskedTextBoxみたいな コントロールがあったか覚えていない
866 ショボスギ
gridviewのcellのvalueをrowindexとcolの名前で取得することは出来ますでしょうか?
visualstudioでソフトを作ったんですが、これをデバッグ以外で起動するにはどうしたらいいでしょうか binの中のexeとexe.configを別フォルダに移して実行してもconfigで設定した内容が反映されません
リリースビルドしろ
そういう問題じゃないでしょw
>>877 とりあえず@itのアプリケーション設定関係の記事を一通り読めと。
話はそれから。
>>876 DataGridView.Rows(rowindex).Cells("colの名前").Value
ってことかえ
そういやMaskedTextBoxだとSelectAllやSelectionStartが 効かないのは何故?
>>879 一応読んでみましたが、特にそれっぽい情報がなかったです。
シャットダウン時にMy.Settingを保存する。にチェックが入っているのに保存されないとはどのようなことでしょうか。
configファイルに保存されるってことはconfigファイルとexeファイルのみがあれば正常に動作するはずなんですけどね・・・
データテーブルのあるセルを選択するときは なぜ Dt.Rows(i)("フィールド名") であって Dt.Rows("フィールド名")(i) でわないの? だれが まず行indexを指定して それからフィールドを指定する という順番にしたはったん?
>>883 頭大丈夫か?
rowsつーたらまず行選ばんとフィールドもへったくれも無いだろうが
構うなよ。うつるぞ
Dt.Rows("フィールド名")(i)のほうが感覚的には自然
その感覚がおかしい 構造体の配列として捉えれば行が先の方が自然
感覚的には自然<キリッ
Dt.Rows(i)=Dt.Rows.Item(i)のItemが省略されたもの フィールドはItemに含まれてるのだから、Itemなしに指定することはできない
>>882 (1)アプリ起動→(2)アプリ内で設定変更→(3)アプリ終了→(4)再度アプリ起動、で変更が保存されていないってことか?
とりあえず、上の流れを試してみて保存されていれば正常(で、
>>879 に戻ると)
ああ、当たり前だけど3、4の間に移動/コピーやリビルドなんかするなよ
>>890 デバッグフォルダ内で起動した場合は普通に保存されます。
exeとconfigファイルのみ別のフォルダに移動して上記の流れで操作した場合のみ、保存されません
>>882 >>891 だから、こんなところでグダグダ言ってる暇に@ITの記事をちゃんと読めって。
アプリケーション設定がどこに保存されるとか、configの意味とかちゃんと書いてあるから。
893 :
デフォルトの名無しさん :2011/03/26(土) 23:34:46.07
テキストボックスに A222BあああA555BえええAおおおB55A454B と入っていたとします。 この文字列の AとBとその間の文字を1セットにして、AとBの間の文字に5が入っていたときだけ、AとBを削除する このようなロジックをつくっていただけないでしょうか?
>>891 つまり、
デバッグフォルダで起動して設定した内容は、デバッグフォルダでもう一度起動すると保存されている
移動先のフォルダで起動して設定した内容は、移動先のフォルダでもう一度起動すると保存されていない
ということか?
>>895 そういうことです。
exeとconfig以外に必要なファイルがあるか探してみます
897 :
デフォルトの名無しさん :2011/03/27(日) 01:16:07.10
>>893 ヒント
Contains IndexOf Remove
たぶん1文字ずつ舐めたほうが簡単
Windowsアプリを作成し、インストーラを作成しました。 インストーラ自体は作成されるのですが、いざsetup.exeを実行すると インストール中にエラーが発生し、デバッグすると パス 'C:\Users\○○\AppData\Local\Apps\2.0\D4T01EYC.LQB\ico\ico1.ico' の一部が見つかりませんでした。 と例外が発生します。 同様の現象が出たことある方がいらっしゃいましたら、どうか解決方法をご教示くださいませ。 VS2010でOSはVISTA SP2です。
iの初期化はi=0 Sの初期化はS="" でわ 日付変数の初期化は?
>>899 その通りなんだろ
大体アイコンとか埋め込みリソースにするもんじゃね?
>>900 もし定義しただけで自動的に初期化されてると思うなら
定義しただけの変数参照してみろよw
型のデフォルト値のことなら、 Int32は0 Stringは参照型だからnull DateTimeは西暦0年1月1日0時0分0秒
>>900 Dim dt As New DateTime
とか
Dim dt = DateTime.Now
とか
Dim dt = DateTime.MinValue
お好きなように。
>>893 A〜Bの〜を消すなら(?<=A)[^B]+5[^B]+(?=B)
A〜BのA、Bだけを消すならA(?=[^B]+5[^B])|(?<=[^A]+5[^A])B
まぁ試してないから間違っているかも
ああ2番目のは確実におかしいね 正規表現より文字列舐めたほうが楽かな
一応2番目のはA(?=[^B]*5[^B]*B)|(?<=A[^A]*5[^A]*)Bかな 906の1番目も+は*じゃないと漏れちゃうね
Dim S as string は=nothingも=""もTrueになる不思議!
VBの仕様です。 不思議でも何でもない
泥棒したら逮捕される不思議 と同じ
頭悪いたとえだな。
どこが?
enputyとnoghingとnullと""の4つは同値
>>914 そんな力んでいうような事か?
カルシウム足りないんじゃないの?
まあちゃんとMSDNライブラリの参照先を貼ってる点は買うけどさ。
>>915 それは違うよ。
Nothingは空文字として扱うが、逆は成立しない。
Visual Basic.NETが Visual Basic という名前に戻っちゃったから ヘルプ見てもわからないんだよ!
>>916 どこが力んでんだよw
突っ込むにしてもここは初めてか?力抜けよくらいのネタで返しとけよ
>>918 俺はそういう気色の悪いノリは大嫌いなんだよ君と違って
>>895 exeとconfigのみを移動させれば大丈夫ということがわかりました。
移動先でも保存されました、でもその2ファイルを別のとこに移動するとsettingが初期化されてしまいます。
あと保存後でもconfigの内容に一切変化がないんですが、基本的にどこのファイルに保存されるのでしょうか?
どこかの隠しファイルとかでしょうか?
だから機能から@ITの記事読めと何度も言ってるだろうに..... アンタが知りたいことは全部書いてある。 必用なのは記事を読む時間と少しの根気だけだ。 しかしどっか足りない奴に限って妙に頑固だな。
>>922 一通り読めで用が足りるなら粘着はしないとw
つーか怒る位ならアドレス全部書いとけよ
それで読まないならいくら怒ってもいいから
>>922 読みましたが、よくわかりませんでした。
ので訊きに来ました
>>926 有難うございます
読んでみましたが、結局のところexe.configには初期設定のみが記載してあり、
settingを保存するところはuser.configということは理解できました。
使い勝手があんまりよくないので、同一フォルダの別ファイルに設定を保存したいのですが、
それにはiniファイルなどを使用するしかないのですか?
初期値を設定するためだけにexe.configを使うんならexeに組み込んじゃったほうがいいと思うのですが、気のせいでしょうか。
My.Settingsを使って実行ファイルと同じディレクトリに 設定値を保存することはできません。 自前で実装してください。
今更iniファイルとか、それこそ使い勝手がよくないだろ .NETはXMLを簡単に操作できるクラスやLINQとかの機能まで用意してんだから xml形式のconfigファイルで十分だと思うんだけどなぁ iniファイル使うくらいならRegistryKeyクラスがある分レジストリいじるほうが まだマシなもんだろ
rs.movenext のメソッドが無くなったので助けてくだしぃ
>>931 DataTable.CreateDataReader() はどう?
おk
934 :
507 :2011/03/28(月) 18:53:26.17
XAML(WPF)慣れない 検索してもC#ばっか出てくるから C#勉強したほうが良いかなあ?
C#のコードも大体読めるようになっておくとたまに便利
初心者すぎて申し訳ないですが、質問です… レコードの中に数値項目がいくつかあっていて、それらをCSVに落としたのですが、負数だけなぜかCSVに出力すると空になってしまいます (値は.textで取得してます) これは一体なぜなのでしょうか? ※ちなみにvalueで取得してもだめでした
1回tostringして取得したら?
警察が郵便局長を牢屋にぶちこんだ ファイル作成日を変更するプログラムはどうかけば
パソコンの日付変更してコピーしたら良いんじゃないか?
NullってのはDB.Nullしかないんだよね?
>>942 どこでNullって出てきたのか解らんから、それだけではなんとも
VBではNothingってのもあるからな
>>942 C#→NullはNull
VB.NET→NullはNothing
DBNullは別の物
DBNull≠Null
なるほろ
この直線をx軸に4並行移動すると っていう表現変だと思うんだけど この直線をx軸に4並行移動させると が ただしくないかぃ?
質問です 画面にテキストボックスが10個ありまして、そのテキストボックスすべてクリックした時のイベントを統一しています クリックしたときセルの中身を選択状態にするという統一されたイベントを、一つのプロシージャでなんとか処理できないでしょうか? 今のところ各テキストボックスのクリックイベントが一つずつ存在してますが、長いし同じ処理なのにすごく効率悪く感じます クリックしたテキストボックスの名前を取得する方法などがあればいいのですが… 効率化するにはどうすればよいでしょうか?
DirectCast(sender, TextBox)
949 :
947 :2011/03/30(水) 23:46:39.50
あああああああ… 自分で書き込んでおいてアレですが、senderの存在を忘れてました すみませんでした
例えば abc ; xyz ; あいう というデータがあるとします。 このうち;毎にデータを区切ってそれぞれコレクションに追加する、のようなプログラムはどのように書けばいいなでしょうか。
Dim collection As List(Of T) = New List(Of T)() collection.AddRange(str.Split(";"))
952 :
951 :2011/03/31(木) 00:09:39.18
別に関係ないけどTではなくStringの間違い
設定保存手法として My.Settings(内部ファイル) ini レジストリ xml(外部ファイル) とかあるけどどれが一番いいの? 俺は分かりやすいiniが好きなんだが知り合いにバカにされた
バカにする奴は放っておけばいい。 俺はXMLファイルに保存してる。単に好みってだけだけど。
My.SettingsはXMLと同列な扱いとして.NETの恩恵が受けられるのは XML>レジストリ>INIの順かな 規模によっちゃDBにするだろうけど、まぁ好きにすりゃいい
957 :
デフォルトの名無しさん :2011/03/31(木) 11:33:54.05
すみません。 keyDownイベントで F1キーを押したらボタンを押された処理をできるよにしたいのですが、 vbkeyF1はVB2010Exp.edでは使えないのでしょうか?
Keysで比べたら良いんじゃないの If e.KeyCode = Keys.F1 Then
959 :
デフォルトの名無しさん :2011/03/31(木) 13:59:32.15
>>950 です。
区切り文字が2文字の場合はどうすればいいでしょうか
[]毎に区切りたいです
>>959 Dim hoge As String = "abc[]xyz[]あいう"
Dim fuga = Strings.Split(hoge, "[]")
Array.ForEach(fuga, Sub(s) Console.WriteLine(s))
それとも[]ってのは"[abc][xyz][あいう]"こういうの言ってる?
>>954 俺は.NETではXML(ユーザー別に設定を保存したい時はMy.Settings)、WIN32APIではINIを使ってる
レジストリはなるべく使わない
iniはMSが使うなって言ってるから使わないほうがいい。 レジストリのほうが楽だし。
MSの話は信じないほうがいい。 裏切られた事しかないだろう?
そろそろソフトバンク携帯などのアプリをVB.NETでつくれるようにしてもらわないと
WP7はVBサポートしてるけど XNAやMFのように、新しいプラットフォームのVB対応にMSは消極的で切り捨てられつつあるので そういうのに興味があるならC#に移行するべき
>>966 VBもC#も同じ.NET Frameworkっていうプラットフォームで動作していると思ってんだが
WindowsPhone7上では違うんか?
同じだけど開発環境(Visual Studio)が対応してないと作るの難しいでしょ 基本的にC#優先でVBは遅れて対応するかそのまま放置
>>964 レジストリかiniかって行ったらiniが危ないだろ。ダントツで。
理由は?
>>970 16bitの互換性のために残してあるから使うなって書いてある。
vistaのときに動かなくなったソフトが続出したときも、 msが悪いみたいな感じで、作り方が悪いって言ってるやつは少なかったから ini使ってて動かなくなっても「まーたmsに裏切られたw」とか言ってれば まあ体面はたもてるな。
普通に考えればファイルの形式なんか問題じゃない。 MSもそんなことに口ばしを挟んでいた記憶はないけどね。 MSが問題にしてたのは設定値の保存先だけじゃなかったのかな。 バイナリと同じディレクトリとか、下手するとシステムフォルダとか、 もっと最悪なのはCドライブの決め打ちのパスとかに、しかもマルチユーザーを 意識せずに保存する悪い習慣は止めてねって言ってただけでしょ。
>>968 C#が優先されているわけじゃなくて、もともとMSの.NET戦略として新規に作られた言語がC#な訳で
新しい機能を試験的にも組み込みやすいからVBよりも先に対応されてんだよ
だから後続のVSバージョンでVBにも機能が追加されてる(ジェネリック、ラムダ式、LINQ、自動プロパティとか)
VB6から無理して.NET対応したくらいだし、急にMSがVBを見捨てるとは思えんけどな
>>973 くちばしを挟むっていうか、iniじゃなくてレジストリ使えって書いてある。
iniファイルの読み書きルーチン自作して、マルチユーザー対応も しっかりしてればiniでも独自形式もなんでも問題ないわな。 まあ、おれは使わないけど。
XMLやレジストリよりINIファイルを好むってのはエンドユーザとかSEが簡単に設定の追加・変更・確認が しやすいからだと思ってるんだが、まぁ設定管理画面くらい別に実装しろって言うとそれまでだけど
>>975 むしろ.NET立ち上がり時にレジストリはもう使うな、という話はあった。
ファイルの形式については問題にする意味がわからない。
常識的に言って大きなお世話だろう。
せっかくあるシリアル化等の機能を使った方が生産性が高いですよ、というのなら話はわかる。
>>974 XNAのVB切捨てとか明らかにサポートコスト削りだよ
>>978 問題にする意味って、APIは使うなってアナウンスがあるし、
iniの読み書きルーチンでも独自に作ればいいけどそんなことを
するほうが意味が分からない。
物好きで、もうiniファイル関連のライブラリを作ってしまってるなら
それでも使ってればいいだろうけど、初心者がiniとレジストリのどっちが
いいですかって聞いてたらレジストリを勧めとけばいい。
明らかにC#の方が検索してても情報量多い。 しかし社内便利屋の俺としてはVBの方が角が立たなくて良い。 C#じゃ爺さんはメンテしてくれなさそうだし。
そりゃC系怖くてVBしか使えないような人がwebで有用な情報を発信できるとは思えない
C#もVBもそんな変わんないんだから脳内変換すりゃいい
文字列の最大値について質問します stringの最大値は何になるのでしょうか? Char.MaxValueが解となるように思えますが 文字数も定義せずにChar.MaxValueが最大になるということが 今ひとつ納得できません。
文字列の最大値 の意味がわからない Char型の値はUnicodeの文字コードの数値で、Char.MaxValueはその最大値 文字数は全く関係ない
先進機能をC#で実験的に実装、安定化・普及後にVBにも実装 やっぱVBでいいや
>>985 文字列の最大長のことかね。
2Gとか4Gとかそのあたりだろうけど、そんな限界まで使わないから分からないな。
何の話をしてるんだよ...
990 :
985 :2011/04/03(日) 15:46:39.66
色々検索してみたけど "aaa"と"a"を比較するときは [0x0061 0x0061 0x0061] と [0x0061 0x0020 0x0020]を 左から順番に評価していくから string型もchar型も文字数は関係なく最大値はChar.MaxValue[0xFFFF] であるという認識で宜しいのでしょうか。 それなら納得いく
だから最大値って何のこと言ってるんだよ。 頭おかしいのか?
意味わかんね "a" は { 0x0061 } であって後ろに半角空白なんか付かない 比較するなら2文字目で 0x61 と「存在しない」を比べることになる で最大値って何よ
>>990 …いろいろ検索してその内容ってどこを検索してきたんだよ
文字列を比較演算子とかCompareTo()とかで比較したとき、どの文字列よりも 大きいって判定される文字列ってことだろうか > 最大値 コミュ力に難のある人みたいだから、こういう質問しても答えかえってこないと思うけど。
995 :
985 :2011/04/03(日) 16:29:03.88
だいたい
>>992 さんの説明でわかりました。
>>994 まさに私が質問したかったことです。
私の表現と知識が足りずにうまく伝わらなかったようですが。
>>995 文字列の最大値は、Char.MaxValueのCharが、文字列の最大長まで
入ってる文字列だよ。
Dim s as new string(Char.MaxValue, Int32.MaxValue)
みたいなやつ。
(実際にInt32.MaxValueの長さの文字列を作れるかどうかは知らんけど)
Char同士の比較は文字コードの数値比較だけど 文字列の比較は通常カルチャ依存だから絶対的な最大値はないよ
まあ、Char.MaxValueを使ってる文字列なんてなさそうだから、 実用上は new string(Char.MaxValue)でよさそうな感じだけど > どの文字列より大きい文字列
何の実用だよ
>>999 番兵とかHIGH_VALUE的な使い方とか。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。