1 :
デフォルトの名無しさん :
2013/04/13(土) 21:43:35.69
糞スレ終了 以降書き込まないてください
画面 <--- ここはXMLで通信 ----> IIS 画面とIISで通信する際にXMLを使っています。 めっちゃ遅いです。なにかいい案ありませんか?
余計なことしないでWCFに丸投げ
そもそもXMLで通信っておかしくね? XMLってデータフォーマットの規格で通信の規格じゃないだろ
「画面と通信」の意味不明
通信経路が遅いのか、 アプリレベルの通信の手続きが非効率なのか、 前後のXMLの変換処理が遅いのか、 XMLにすることでサイズが膨らみすぎているのか、 それともまた別の問題か、 くらいの切り分けはやれよ 何も自分で考えたくないなら自分でコード書こうと思わないでWCFにでも投げとけ
つか相手IISなら素直にWEBフォームでいいんじゃね 何やってるのか知らんが XMLってもしかしてXHTMLってことなのか?
14 :
デフォルトの名無しさん :2013/04/19(金) 20:23:37.50
form1でnewしたclassを 別のfrom(クラス)で使いまわすには どうしたらいいのでしょうか?
>>14 他のformで宣言しておいてわたせばよくね?
>>16 ありがとう。
けどすまん。渡すって?
教えて君で申し訳ないが
具体的に教えて下さい。
>>14 まずform1(のインスタンス)は誰がどうやって(作成して)表示したんだ?
別のform(のインスタンス)は誰がどうやって(作成して)表示するんだ?
どもです。 Public Class Form1 Private cHoge As ClsHoge 'Hogeクラス Private Sub Form1_Load(... cHoge = New ClsHoge(string,string ) てな具合でNewしてます。 で、別のクラス、フォームでcHogeを使いたいなって
別のフォームがForm2として、Form1がForm2の参照を持ってるか、 その逆かしないと受け渡しが出来ない。 または、両方が共通に参照できるクラスかモジュールを仲介させる。
>>20 いやだから、Form1は誰かどうやって表示させてるんだ
んでその別のクラスやフォームは誰かどうやって生成するんだ?
>>21 ありがとう。
そうなんだ。結構不便だな。
>>22 どもです。
ごく普通のプロジェクトだったら、スタートアップフォームはform1なので
普通にロードすれば表示っしょ。
別のフォーム、クラスは普通に生成しますが...
クラスをどうやって生成する云々は俺の質問に直接関係あるのかな?
質問の意図がようわからん。コンストラクタがらみ?
普通に別のフォーム、クラスを生成した時、
cHogeはどうやったら使えるの?ってことなんだけど?
俺、勘違いしている?
たとえばform2(subForm)だと
from1から
Dim f As New subForm()
f.ShowDialog(Me)
f.Dispose()
で subForm 側でcHoge をどうやって参照すれば良いのかなぁって
あ、Private cHoge As ClsHoge でPrivate宣言してるから
他からは参照できないってのは無でw
なんで無しなの?
Public Shared cHoge As ClsHoge これでForm1.cHogeでアクセスできる はっきり言ってゴミクズコードだが、良いとか悪いとかいう議論をしだしたら そもそも子フォームが親フォームの具体的な型に依存するのは不適切とかそういう話になる
subFormにpublic cHoge As clsHogeしておいて Dim f As New subForm() f.cHoge = cHoge f.ShowDialog(Me) f.Dispose() でもいいぞ
マルチレス許せ。
>>25 え、Privateだったら無理なんじゃね?
>>26 >>27 ぐぐってたんだけど、やっぱりPublic 系になるよねぇ。
ここらで終わりにします。
レスくれた方々ありがとう。
>>24 >ごく普通のプロジェクトだったら、スタートアップフォームはform1
スタートアップフォームは使わん方が良いんだがな
どうやって生成してるかっていうのは、インスタンスへの参照がどうなってるか知りたいんだよ
たとえば
Dim f As New subForm()
だと、fがsubFormのインスタンス(への参照)を保持してる
その場合ならsubForm側で
Public cHoge As ClsHoge
って宣言しといて
f.cHoge=cHoge
とかすれば行ける
変数直接じゃなくて、受け渡し用のプロシジャでもいいしプロパティでもいいけど
どっちにしてもPrivateじゃだめだぞ
Privateってのは自分の外からアクセスしませんって宣言なんだから
Publicフィールド使わないでコンストラクタの引数で渡すとかプロパティで渡すとかいろいろあるけど 結局デザインの善し悪しの問題なのでここでどうこう言う話ではない 初心者みたいだしVBだし
AndroidのActivityの値渡しみたいに連想配列にするとかっこいいかも
>>31 静的型の意義を理解してない馬鹿
そういうのが好きならスクリプト言語使ってろよ
しかし、PublicとPrivateの使い分けも解らんレベルなら ググリながらじゃなくて、ちゃんとした本買って読むほうが良いと思うが ちゃんとした初心者向けの解説サイトにあたれば良いけど、そんなのほとんど見たことないしなぁ まあ、大きなお世話か
VBでまともにオブジェクト指向の解説してる本なんてあるの? WebサイトもC#やってないVB専門のとこだとサイト製作者自身が理解してないよね
オブジェクト指向についてはJavaC++C#どれかの文法覚えて勉強するしかない
特定言語の文法覚えて、オブジェクト指向の何をどう勉強するんだろうね
Shell()に渡せる最大文字数について、どこかに説明ない? とりあえずInt16の最大値辺りで切られるのは確認できたんだが
38 :
デフォルトの名無しさん :2013/04/22(月) 00:43:36.67
VBで、"Picture1.Line(50, 50) - (1200, 1000), RGB(100, 180, 230), BF"として 座標X (50,50)と座標Y(1200,1000)を対角線で結ぶ四角形を描画していたとします。 これをVB.NETで実現したいのですが、Graphics.DrawRectangleメソッドを利用すると、 g.DrawRectangle(p, 50, 50, 100, 80)と、座標X(50,50)に100x80の四角形を描画すると、 考え方が変わっております。 与えられる情報は座標Xと座標Yしか無いため、どう直せば良いものか 困っております。 良い処理がありましたら、アドバイスを頂きたく。 お願い致します。
それで困るってどんだけ頭悪いのw 単純な足し算引き算の問題じゃないか
さすがにプログラミングしていいレベルじゃないわなw
さすがに本気でそれがわからん頭ならそこだけクリアしたところで何か意味のあるコードが産み出せるとは思えんな 人生設計を考え直すべき
42 :
デフォルトの名無しさん :2013/04/22(月) 07:05:13.96
ちょっとした業務アプリを自前で作るレベルのサンデーなんで、 そんなに危機感は無いです。 座標計算はどうも苦手で、お願いします。
43 :
デフォルトの名無しさん :2013/04/22(月) 07:11:42.26
38ですが、何かテクニックのようなものがあればお聞きしたいです。 これで飯食ってはいないので、ベタな処理をすれば書けると思いますが、 きっとスマートなコードにはならないと思います。 プロの方のコード設計を見せて貰えたらと思います。
いやそういうレベルじゃなくて小学校からやり直すレベル
>>38 ベクトルとスカラーって数学で習ったの覚えていますか
ベクトルとは座標系における位置と大きさを持つ値であり
スカラーとは大きさだけを持つ値です
もともとVBではベクトルで四角を描いていました
VB.NETでは基準点ベクトルからのスカラーで四角を描くようになりました
変換したい場合2点間のベクトルの差がスカラーになることを思い出してください
さすれば簡単に実装することができます
>>38 はネタでしょw
こんな奴いるわけがないと思いたいwww
いろいろ回答ありがとうございます。 特に、プロがやるようなスマートなコーディングは無いんですね。 こつこつ座標をやりくりして、泥臭くやろうと思います。
そんなもんメソッド一つ作れば済むことだろ
確かに拡張メソッドは便利だなw public static void DrawRectangle(this System.Drawing.Graphics g, Pen pen, Point point1, Point point2) { g.DrawRectangle(pen, Rectangle.FromLTRB(point1.X, point1.Y, point2.X, point2.Y)); }
プロのコーディングは単純明快でわかりやすいコーディングだよ。 お手本どおり、基本に忠実がベスト。 プロって言うのを勘違いして、わけのわからないコーディングをす るとみんな迷惑する。
来月から仕事で新しく入るプロジェクトがVB.NETでASP.NET?とか言われてよくわからないんですが、入門用の良いサイトあったら教えてください! オブジェクト指向言語はじめてなので勉強中ですがサッパリわからなくて困っています;;
VBだけでオブジェクト指向を理解するのは不可能だと思う オブジェクト指向はJavaと一緒に覚えるのがいいよ
オブジェクト指向を理解するのに特定の言語を覚える理由がわからんが
環境の問題だろ OOに関してVBの書籍やサイトでロクなの見たことない
VB.NETはオブジェクト指向言語になったが、そんなものはVBには不要だから本書では無視する というようなことが堂々と書いてある本があって衝撃を受けた
オブジェクト指向ってなんだっけ?
ぐぐって自己解決 クラス・メソッッドなどをカプセル化で括る様かな?
これがVBクォリティ…
でもホントそんなもんで良いしそういう人向けだしVB
でもなんでオブジェクト指向っていう中途半端な言葉なんだろうな オブジェクトオリエンテッドって表記したら長いから? 英語がわかるやつならそのままのが分かりやすいし、日本語にしたいなら「目的重視」って言ったほうが理解しやすいだろうに コード書くときには機能重視じゃなくて目的重視でまとめといたほうが、後で読みやすいし再利用しやすいよ って話が基本になってるんだから
業務システムとかは機能重視のほうが保守は楽だな
オブジェクト指向はコード書くときの話だけじゃなくて、設計方法論なんだが オブジェクトの良い訳がなかったから無理やり訳さないでそのままカタカナ表記にしたんだろうけど すくなくとも目的とかいう訳よりはよっぽどマシだな
設計方法論でもオブジェクトは目的だろ 「目的」という言葉の意味論になるからオブジェクト指向の訳としては使われなかっただけだ オブジェクト指向という言葉自体が独自の意味を持つようになってしまった以上 オブジェクト指向を理解するのに「オブジェクト」という言葉の意味論やってもしょうがないわけだが
目的って何だよw そもそもobjectという言葉を日本語の目的という言葉に対応する意味で使うことは稀だ。 オブジェクト指向のオブジェクトの意味は普通にモノとか対象とかいう意味だよ。 UFOのOと同じ。
大きいか。
VBのソースを公開するときって、どのファイルを公開すればいいの? .frmとかは明らかに自分で書いたものだからいいのだけど、なんかよく分かんない バイナリファイルとか中身みると、C:\Document and Settings\〜 みたいな文字列が 含まれてて、これをネットに公開したらログオン名とかダダ漏れじゃんとか思ってまして
object ばくぜーんと、対〜、みたいな意味合いだよね。 反対意見を言うなんて意味もあったりして。
FormロードイベントでURLを設定しています。
txt_url_list.Text = "
http://google.co.jp " & vbCrLf & _
"
http://yahoo.co.jp "
このコードを実行すると、なぜかtextbox内に設定したURLが選択された状態
(青背景に白文字)
になってしまいます。
理由が不明なのですがこれをリセットする方法 or こうならない方法
を知っているかたはいますか?
>>70 ミニマムコード作ってそのテキストボックスの全プロパティ晒せ
ASP.NET(VB)でマスターページからコンテンツページの メソッドを実行する方法はありませんでしょうか? 一応以下のページにC#での方法がありますが、 okwave.jp/qa/q5827497.html 上記の回答の WebForm1 l_frm = (WebForm1)this.Page; を Dim l_frm = DiredctCast(Me.Page,WebForm1) のようにVBで書きなおすとキャストエラーが発生します。 Me.Pageの指定が間違っているのでしょうか? 他に方法がありますでしょうか? お手数おかけしますがよろしくお願い致します。
>>73 マスターページでコンテンツページのメソッド実行とか、設計がおかしいとしか思えんが...
エスパーすると、Me.Pageの型がWebForm1じゃないんだろ
そのページのファイル名と@Pageになんて書いてある?
VB.NETってレイトバインド出来た気がするからキャストしなくても呼び出せる気はするが...
これ以上はWebProg板にASP.NETのスレあるからそっち行け
75 :
73 :2013/05/05(日) 12:28:26.60
>>74 ありがとうございます。確認してみます。
設計はあきらかにおかしいですが、客の要望ゆえというか。。。
VS2008のCheckedListBoxにて、チェックボックスへはシングルクリックで、リストへはダブルクリックをする事で On/Offを切り替える事は出来るのでしょうか。 VB6.0時代は出来たのですが…。 CheckOnClickプロパティの場合、リストへのクリックもシングルになってしまいます。 (デフォルトはダブルクリック) 微妙に操作性が異なりイライラとしてしまう状況・・・。
77 :
デフォルトの名無しさん :2013/05/14(火) 23:08:30.31
あるファイルを読んで項目を取得する。 これをクラス化する時 コンストラクタにファイル名をセットして コンストラクでファイルをオープン、リード、クローズして項目をプロパティにセット。 としていい? それとも、コンストラクタはファイル名のセットのみにとどめておいて あとからreadメソッドのような感じの方が良い? どっちが定石なのでしょうか?
DataGridviewのヘッダーを2行以上表示させたい時ってどうしてる?
ヘッダーのテキストに改行コード入れたらいいんでないか
高さもオートに出来んかったっけ?
(゚д゚)ハァ?
高さもオートに出来るな ヘッダー行を2行以上にしたいって事ならググって失望するが良い FlexGridって便利だったんだなぁ
DataGridviewColumn継承すればいいだけでは
失礼しました。 TextureBrushというので速くなりました。
86 :
デフォルトの名無しさん :2013/05/16(木) 11:52:40.50
VBAの流れでVB.NETに行きがちだけど、やっぱCなのか
87 :
デフォルトの名無しさん :2013/05/16(木) 12:48:46.31
DataGridViewの各セル単位にイベントをハンドルすることって可能? ↓指定した各々のセルに異なるイベント割付みたいな。 Me.DataGridView1(0.1) Me.DataGridView1(2.1) DataGridViewのcellClickイベントとかを発生させるように、 DataGridViewTextBoxCellからイベント発生させるのってできないのでしょうか?
普通はカレントがどこか判定して処理をわけるけどなぁ。
89 :
デフォルトの名無しさん :2013/05/16(木) 19:58:03.13
>88 レスありがとうございます。 やっぱりそうなんですね... もしできればソースがスッキリするかな?と思った次第で。 あきらめてDataGridViewのイベントでどうにかします。
ちょい亀レスだけど
>>77 そのどっちかってなら断然後者かな。
前者だとインスタンスだけ作りたい場合でも強制でファイル読込しちゃう。
まーシステム的にそういう事が一切ないって事で、ほんとそれ専用のクラスってなら
前者でもいいけど。クラス使う方でもコードが、readメソッド呼ぶ分1行減るしね・・。
普通に設計するなら9割9分後者だろうなぁ。
91 :
デフォルトの名無しさん :2013/05/18(土) 21:05:47.79
VB2008からExcelファイルを操作しようと思って、 参照設定にExcel関連追加しようとしたら、 COMに Microsoft Excel xx.x ObjectLibrary ってのと .NETに Microsoft.Office.Interop.Excel ってのがあった どちらを参照したらいいの? この2つって何がちがうの?
しかしこれだけググるという言葉が浸透しても 実際にそれをする人は増えないものなのだなぁ
そりゃまあ Google先生に検索ワードを打ち込んで くだらん情報をズラズラ並べ立てられるよりも 専門スレで聞いた方が確実でしょう
チッ役立たずが
レイトバインドのほうがいいと思う
バージョンの差を吸収するのにレイトバインドは必須だね。
>>93 でもinterop .netで一番上に来ててしかも一覧のとこに答え出てるから
わざわざページ開く必要も無いという状態なのに聞いてくるのは
ちょっとどうなのよ?と思わざるを得ない
>>97 それウソやで。だから専門のスレで聞いてるんやで。
99 :
91 :2013/05/20(月) 21:22:19.61
ググってもわからないから聞いたんだけども
>>97 の言う通りだと
--------------------------------------------------------------
自動生成された COM Interop アセンブリのもっと便利な使い方 ...
nyaruru.hatenablog.com/entry/20080319/p1?
2008/03/19 ? 結論から言えば,TLB を経由して生成された Interop アセンブリに,
最適なマーシャリング設定は期待できません. 私がよく使う手は,.NET Reflector で
Interop アセンブリを C# のソースコードに再変換してしまうというものです.得られた ...
--------------------------------------------------------------
この中に答えがあるってこと?
だったらごめんよくわからん
>>95-96 バージョン差異吸収にレイトバインドが良いことは、各所で勧められてるし、
参照名にバージョンが明記されてることからも、なんとなくわかる
でも俺の質問って、そういうこと聞いてるんじゃなくね?
100 :
デフォルトの名無しさん :2013/05/20(月) 21:42:54.62
違いはよくわかんないけど、 どっちかでやってみて都合わるけりゃ他方に切り替えませう・・・ってのじゃだめ? 自作クラスかぶせとけば問題あってもそのクラスだけでおさまるんだしさ。
レイトバインド以外は興味ない
>>99 いやだから、参照設定は事前バインドなんだよ。
一度、エクセルの遅延バインドで検索するといいよ。
実行時バインディング(レイトバインディング)すれば参照設定は必要ないです。
>>99 Microsoft Excel xx.x ObjectLibraryは
レジストリに登録されてるCOMのTLBから
相互運用用のDLLを自動生成。
Microsoft.Office.Interop.Excelはあらかじめ
相互運用用に用意されたDLL。
上記の場合、型付けがいい加減だったり(型が単にobjectなど)、
enumとの関連が正確でなかったりする。
officeはまだまだバージョンアップ激しそうだしレイトバインドお勧めてのは同意 開発中はインテリセンス使いたいからアーリーバインドにしといて 終わったらレイトバインドにしとけば良いんじゃね 定数の扱いに気をつけとけば問題は無い はず
普通に考えたらネタだろうと思うような話を大真面目でする奴を目撃できるのが このスレの醍醐味だなw 真に受ける人がいると気の毒だから一応反対意見も書いておく。 Excel97とかはさすがに試してないけど、現実にはExcelオートメーションで バージョン違いで例外が発生するメソッドやプロパティはほとんどない。 (確かにあることはある) 事前バインドした場合に得られる様々な利益を捨ててまでレイトバインディングを利用するのは、 個人的には羹にこりて膾を噴く不合理にしか思えんな。
VB脳というか、スクリプト脳なんじゃないか 悪いことじゃないがw 現代じゃIDEが強力すぎるからなぁ レイトバインディングなんてしたくない
まあ思想の違いだからこれは分かり合えることは無い
108 :
91 :2013/05/21(火) 12:07:34.51
俺、「アーリーとレイトどっちがいい?」なんて質問してないのに、
いつまでもレイトしろレイトがいいってわめいてる人たち、いったいなんなの?
>>103 もともと前者がずっと前からあるCOM参照で、それは今も同じやり方で使える
それをブラッシュアップして.netでパッケージングした完成品を、
VSの中に置いてるのが後者 ってことかな?
バージョンさえ合うなら、後者を使った方がいい加減な部分が少ない、みたいな?
ググってTips探しても前者のコードしか見つからなくて、
後者を使うときもそれに準拠すべきかわからないんだけど、
コード進行は同じと思っていいのかな
いや別に君と話してる訳じゃないんで 自意識過剰じゃないかね?
>>105 >事前バインドした場合に得られる様々な利益
ってのをちゃんと説明しないと説得力がないぞ
俺が思いつくのはIDEでの支援と実行速度ぐらいしかないが
IDEの支援は開発時には事前バインドにしとけばいいし
実行速度なんて体感できるほどの差が出ることはそうそうない
まあ、開発者本人が個人的に使うなら事前バインドでいいよ
オススメだとアドバイスしてただけなので。 噛み付かれる程の事をした覚えはないな。
>IDEでの支援と実行速度ぐらい レイトバインディングの利点はなんですか?
DLLが要らない どのバージョンのExcelでも操作できる
>>112-113 論争をはじめるような事でもないだろうw
俺はオススメしただけなので、使う使わないは各自の自由だし。
すげー重要じゃん
>>114 いや別に君と話してる訳じゃないんで
自意識過剰じゃないかね?
他人の意見をネタ扱いして真に受けるなとかいっといて 反論きたら逃げるのですね
4.0からInterOpアセンブリの埋め込みできるし
http://msdn.microsoft.com/ja-jp/library/vstudio/ee317478%28v=vs.100%29.aspx COM オブジェクトを参照するアプリケーションに型情報を埋め込むと、プライマリ相互運用機能アセンブリ
(PIA: Primary Interop Assembly) を使用する必要がなくなります。 また、埋め込み型情報を使用するこ
とで、バージョンに依存しないアプリケーションを作成できます。 つまり、複数のバージョンの COM ラ
イブラリの型を使用するようにプログラムを記述でき、バージョンごとに固有の PIA が不要になります。
この方法は、Microsoft Office ライブラリのオブジェクトを使用するアプリケーション向けの一般的なシナリオです。
型情報を埋め込むと、プログラムの同じビルドで、異なるコンピューター上にある異なるバージョンの
Microsoft Office と連携できます。Microsoft Office のバージョンごとにプログラムや PIA を再配置する必要はありません。
4.0すげー でも4.0なんてうちではまだ使えないな
>>91 からの流れみてたら、プログラマーって本当にヤバい人種なんだなって改めて思った
ヤバイ人種だからものを作ることができるんだよ
VB.NETでCONTAINING_RECORDってどうやって実装するのが普通?
なにそれ?
CONTAINING_RECORDググってみたが、要は構造体をリンクリストで扱うためのマクロか .NETにはLinkedListがあるから、そんなもん自分で実装する必要がないと思うが
C厨の時代遅れ感は異常
いや先人のDLLがLinklist返すんでそれ使ってるクラスをVB.NETで書いてって言われてどうしようかと・・・ まさかDLLから書き直しか・・・勘弁して欲しい
たんなるアドレス計算だろ アンマネージドを扱うんだからある程度泥臭くなっても仕方ない アドレス計算で生で扱うか マネージド構造体にコピーして操作→アンマネージドメモリにコピーみたいな非効率なやり方しかないでしょ
泥臭く書きなおしてついでにエレガントに使わない方作って先人に渡してあげれば紳士的に
>>120 2chで世の中が判ったと思い始めたら、色んな意味でヤバイけどな。
>>126 今後更新されない既存ものなら返したい構造体毎にオーバーロード作ってポインタ計算すればいいだけじゃね?
132 :
デフォルトの名無しさん :2013/05/23(木) 18:53:57.08
133 :
デフォルトの名無しさん :2013/05/24(金) 05:21:59.05
ギリシャ文字の人も偉そうにしているね
134 :
デフォルトの名無しさん :2013/05/24(金) 06:38:21.83
>>131 これは明らかに名無しのミスリードだろ
いわゆる欲嫁ってやつだな
そう、人間のクズとして名を馳せているよ。 だから誰も相手にしない。
初心者です Public Functionの引き数に そのFunction専用引き数として列挙型を使いたいのですが Publicで列挙型宣言するしか無いですか? Public Enum p引き数 A = 0 B = 1 End Enum Public Function WWWW(a AS p引き数) …処理 End Function これだと専用引き数感が無いので 他に良い方法があれば教えて下され
何が専用引数感がないだよハゲ 無駄なことに悩んでないでションベンして寝ちまえ
諦めれ
’専用の引数 これを専用引数感が欲しいとこのコード末尾に付けなさい
まず専用引き数感ってのはどういう事なのか詳しく説明してくれ
MessageBox.Showメソッド専用引数の、 MessageBoxButtons MessageBoxDefaultButton MessageBoxIcon MessageBoxOptions は、System.Windows.Forms名前空間にあるんだぜ?
値さえ用途に合致すれば、別の用途にも使えるしな
144 :
デフォルトの名無しさん :2013/05/25(土) 07:49:23.42
>>141 専用引数感とは、コードを見た開発者が抱く、このEnumはこの関数専用の引数なんだなあという思いのこと、
またはその思いを抱かせる性質のことです。専用引数感はどういうことなのか詳しく説明しました。
>>137 の質問に答えてください。
>>142 のMessagebox関連なんか、まさにお前の要求通りなんじゃね?
146 :
デフォルトの名無しさん :2013/05/25(土) 08:57:09.21
>>138 誰がハゲだ。寝てませんし、ションベンもしてません。
>>139 あきらめません。
>>140 そういう解決策を望んでるんじゃないんです。もっとこうコードの書き方で適切なものがないか模索してるんです。
コメントもコードの一部だって考えもあるかもしれませんがコメント以外でお願いします。
>>142 すげーぜー(杉ちゃん)
>>143 そうなんです。
>>144 は偽物っぽいけど
enumってのは名前のついた整数にすぎないんだから
enumを使う限り無理、というのが回答
完全に専用()にしたいならクラスなり構造体にすればいい
そのクラスもpublicにしなきゃならないけど。
148 :
デフォルトの名無しさん :2013/05/25(土) 08:58:42.37
>>145 どういうことですか?杉ちゃんしか思い浮かびませんでした。
コードではどう書けばいいんでしょうか?
>>148 MessageBoxほにゃららって名前だろ
ああこれはMessageBox専用なんだなって専用感が出てるじゃん
151 :
デフォルトの名無しさん :2013/05/25(土) 09:25:32.83
>>149 なんでですか?
>>150 出てることはわかります。コードではどう書けばいいのでしょうか?
>>137 あるEnum(というか型)に、その型が特定のメソッド専用であることがわかるようにしたい、
という考えは理解できないでもないが、はっきり言ってその問題意識そのものが間違ってる。
コードを読んでる時に、その型がどこで使われてるか知りたい場面を想定しているのかもしれないが、
それならIDEの機能でできる。
あと、その型を引数として使うメソッドが一つしかないことを明示するメリットなんて何もない。
あると言うならどんなものか言ってみ。
>>151 お前が
>>137 でEnum宣言している、そのままでいいじゃねえか
p引数という名前をお前が言う専用感ある名前にすればいいだけじゃね?
何がわからないんだデブ
>>151 プロシジャと、必ずセットでその引数用のクラス作れ
たとえば
WWWWってSubかFunction作るなら、WWWWArgってクラスも作れ
それをコーディングルールとしとけ
俺ならそんなコード読みたくないが
自己満足したいだけのようだから多分何を言っても無駄だろう
156 :
デフォルトの名無しさん :2013/05/25(土) 15:37:28.98
>>152 あなたが言ってることは、可愛い女の子と付き合いたいと言ってる人に対して
俺の穴を使えばいい、女と付き合うメリットなんてないと言ってるようなものだと思います。
ぼくは可愛い女の子と付き合いたいし、専用引き数感が欲しいんです。
>>153 逆に聞きますけど、名前を変えるだけで専用引き数感が出るんでしょうか?
あと、体型はいま関係ないんじゃないでしょうか。なぜそんな語尾を使うのか不思議です。ただただ不思議です。
>>155 諦念。
>>156 お前の感性を他人に聞かれても困る
一生引きこもってろ
>>156 「可愛い女の子と付き合いたい」は趣味趣向の世界だから理由を問う必要はないが、
プログラミングは技術であって、そこで問われるのは目的に対する手段の合理性だけ。
趣味趣向の入り込む余地はない。
というか、そんなものを持ち込んでもらっては困る。
「専用引き数感」とやらには、いかなる目的に対する合理性も存在しない。
繰り返すが、異議があるならどうぞ。
いつまでマジレス続けんだよ
途中からキチガイと入れ替わってるだろ
161 :
137 :2013/05/25(土) 18:53:22.70
大変遅くなりましたが、答えて下さった皆様 ありがとう御座いました。 クラスだとクラス内に書けて、呼び出しも専用という感じで 分かりやすくて良いので ファンクションでも出来たらいいなという思いからでした。 引き数によって、処理を分岐させるような時は 一般的にはどうしているもんでしょうか? Byte型とかで1や0を送って、コードにコメントで 対応する処理内容を書き残したり? もしや、そもそもそんな分岐は させない方が良いんでしょうか
まあ上げてる時点で読む必要無いし
163 :
デフォルトの名無しさん :2013/05/25(土) 21:31:38.24
>>161 擬似的なコードだけどこういう書き方をしたいの?
F(F.Args.One)
Function F(ByVal param As Args)
Enum Args
One
Two
End Enum
Select Case param
Case Args.One
...
Case Args.Two
...
End Select
End Function
ポリモで分岐をなくせるならそうするけど、
関数内でパラメータによって分岐するときはあるよ。
Enum使う。Functionの処理をEnumで表したいと思わないので
引数専用感が無くて困ったことが無い。
専用感は個人が勝手に思っているであって俺らには意味がないって事だよ。
>>131 設定どおりの動作という観点では正しい動きかも知れませんが、ソフト的にはこちらの想定通りの動作をしていないので
ソフト側がうまく動いていないという点に対してそのような揚げ足をするのは心外です。
貴方の回答をいくつか拝見しましたが、どれも傲慢で不愉快極まりありません。
おそらく業界では名のある技術者なのだろうと存じ、僭越を承知で申し上げますが、貴方が何の目的でいくつかの質問に
書き込みを行っているのかが全く理解できず、いくらその人が優秀な技術者であろうとも、傲慢でネチケットを感じられない方には
コメントをして頂きたくありません。
(もっとも、それだけの技術者であれば、2ちゃんねるのデフォルト匿名のようなふざけたハンドルは使う必要もないと思いますけれど)
すごいな
逆に拍手を送りたい
質問者: 「WebBrowserだとユーザーの設定によってはPDFを表示できませんよね。 フォーム上にPDFを表示させるための(WebBrowserを使用する以外に)別方法はありますでしょうか?」 774RR:「ユーザーが表示しないって設定してるんだから問題無いだろ。代案はない」 どうみてもキチガイです。ありがとうございました。
>>166 >どうみてもキチガイです。
質問者が?
774RRが?
166が?
俺かい。
質問者だろ?
やっぱお前が気違いだな 質問者は「ブラウザを使用する以外の方法」を聞いてるのに
この問題詳しいわけじゃないが、Windows FormはOLEコンテナに対応してないので 難しいんじゃないの。 VB6のOLEコンテナを使えば何とかなるのかもしれないが、ライセンス上の懸念があるし さすがに15年も前の製品を好んで使いたい人は少ないんじゃないか
OLEとか言い出すその発想がすでにVB脳 普通PDFリーダーのマネージド実装を探すだろ?
ビットマップに変換してからピクチャーボックスに表示すれば いいだけだろ
技術以前に人間的に幼稚すぎて話にならない
ななしはキチガイということで文句ないよ
774RRって有名人なの?
176 :
デフォルトの名無しさん :2013/05/26(日) 21:24:15.92
那奈死も年をとったものよ
774RRは.netに関しては専門外の筈だから ただ単に初心者を構いたいだけなんだろう 大して上手ではない、おやじゴルファーの教えたがりと一緒さ
ひとつ相談させてください。
下記のコードでピクチャーボックスに画像ファイルを読み込んで
ドラッグで移動、マウスホイールで拡大縮小をさせたいのですが
マウスホイールで拡大縮小するときに真ん中を中心に
拡大したいのですが微妙にずれていってしまいます。
何か計算に間違いがあるでしょうか?
http://codepad.org/twBbvKgX
誤差が積算してるんだろ
わんくまが氏んだようだ 名無しの祟りだ
>>179 ありがとうございます。
ScaleTransformを後にやるようにしたらうまくいきました。
182 :
デフォルトの名無しさん :2013/05/28(火) 12:47:31.11
>>172 にもあるのですが、
PDFをVB.netを使ってビットマップ変換する手っ取り早い方法があれば教えてください。
183 :
デフォルトの名無しさん :2013/05/29(水) 22:16:34.09 ID:u78+zO3T!
ウェブブラウザを起動して自動で Dim objeBrowser = New SHDocVw.InternetExplorer() Thread.Sleep(30000); // 一定時間待機 objeBrowser.Quit() という処理を流しているのですが、 プログラムから Quit がされる前に手動でターゲットとなる objeBrowser が閉じられていると ex {"起動されたオブジェクトはクライアントから切断されました。 (Exception from HRESULT: 0x80010108 (RPC_E_DISCONNECTED))"} System.Exception というエラーメッセージが表示されてしまいます。ブラウザが閉じられている状態で Quit を実行しても エラーが出ない様にする方法とかはありませんか?
閉じられてるのならQuitの必要が無いんじゃないの?
trycatchしとけばいいんじゃないの?
186 :
デフォルトの名無しさん :2013/05/29(水) 23:38:21.89 ID:u78+zO3T!
>>184 閉じられているかどうあの判定が面倒
>>185 取り敢えずその方法で行くことにしました。
>閉じられているかどうあの判定が面倒 ふーん……
マのセンスないな
スミマセンス
× 閉じられているかどうあの判定が面倒 ○ やり方が解らないおせーて
trycatchが確実
192 :
デフォルトの名無しさん :2013/06/07(金) 22:43:39.56
お前らsshでファイル転送どうやってる とっとと教えろください
sshでファイル転送できるソフト使ってる
194 :
デフォルトの名無しさん :2013/06/08(土) 20:53:35.74
プログラミングど素人です。 訳あって現在プログラムをしています ボタンを押したときに、DataGridViewの選択した行を消したいんですが、 どうしたら良いですか? DataGridView1.Rows.RemoveAtかなと思ったんですが上手くいきません 選択できる行は一行だけにしてあるので、その一行を消すだけでいいんですが ちなみにSelectionModeはFullRowSelectにされています VisualBasic 2010 Expressです
197 :
195 :2013/06/11(火) 00:03:35.79
DataGridView1.Rows.RemoveAt(DataGridView1.CurrentRow.Index) で何とかなりましたが もし間違ってたら訂正お願いします
できたのならそれで間違ってないよ 間違ってたら出来ないからな
『なにもしない』は何て書けばいいですか? 削除ボタンを押す ↓ 確認メッセージ(OK、キャンセル) ↓ ↓ OK その他(×、キャンセル) ↓ ↓ 削除 削除しない、なにもしない ~~~~~~~~~~~~~~~~~~~~~~~~~ というのをやりたいんですが、Elseのあとに何て書けばいいのか分かりません
何も書かなければいい
エクセル2013に変えたら、データグリッドから エクセルシートへの出力が激遅になってしまった。 たった23列3行のデータ出すのに1分以上かかる。 エクセル2010だと数秒なのに…。
こんなところで愚痴ってないでデバッグしろよVB低能
>>203 どのメソッドで時間かかってるか調べて何がそのメソッドを遅くさせているのか調べる
>>203 だいたいにおいてClipboardにコピーしてペーストするようになると早くなるね。
Clipboardを使って良い場合に限るが。
Excel2010の時も、画像貼り付けが リンク貼り付けになる不具合あったよな。 ほっといてもMSが対応するだろうと思ってたけど 未だに放置してる。 貼り付け方変えて対応したけど。
CSVで吐いといてVBAで表作ればよくね
新しいエクセルだとWebBrowser上で表示も出来ないな。 別ウィンドウでエクセルが起動するわ。
210 :
デフォルトの名無しさん :2013/06/18(火) 09:37:29.10
わんくまが市んだようだ
32ビットとか64ビットとかを意識しないプログラムのつもりで作ってたんだけど32ビット時代のDLLをコールしないといけんくなった ハンドルとかIntptrで管理してる値をIntegerな引数として渡しちゃっていいのかな?
そもそも64bitアプリケーションから32bitのdllはコールできないだろう
意味がよく分からん DllImport/Declareなら32bitDLLだろうがIntPtrで定義すればいいだろ 32bitDLLのヘッダが本来HANDLEとかにすべきところをintとかDWORDとかで定義しているってこと? まあ別にこっちがやることは何も変わらないけど プラットフォームをx86にさえしとけば問題ない
あら?そうなのか・・・ ハンドルとか64ビットなのかと思っては
x86でビルド → 常に32bitプロセス。64bit環境でも32bitプロセスとして起動 x64でビルド → 常に64bitプロセス。つまり32bit環境では動かない AnyCPUで〃 → 32なら32、64なら64bitプロセスとして起動する 32bitプロセス→IntPtrのサイズは4 64bitプロセス→IntPtrのサイズは8
217 :
デフォルトの名無しさん :2013/07/14(日) 18:44:21.35
thread.startしたスレッドは普通内部で無限ループにするけど、もしリターンしたら thread.stopしなくても自動的にストップすると考えていいの。
あたりまえ
219 :
デフォルトの名無しさん :2013/07/14(日) 19:01:40.95
なんであたりまえなの?
あたりまえなものに理由など無い
そもそもThreadクラスにStopなんて存在しない ワーカーメソッドからのreturnがスレッドの終了を意味する
タスクマネージャでスレッド数見てみれば早い
223 :
デフォルトの名無しさん :2013/07/15(月) 19:39:36.14
GetsDataCmd = cmd RaiseEvent Setreq(Me, EventArgs.Empty) クラスからのイベントで、こんな感じでCmdストリングを渡したいのだが、いまは Me.GetsDataCmdにセットしてMeを渡してる。 折角EventoAgsがあるのでこいつにセットできんの?
224 :
デフォルトの名無しさん :2013/07/15(月) 19:40:42.33
>221 終了させないといけないの?
>>223 Setreqって意味分からんイベント名だが
そいつがEventHandler(Of CommandEventArgs)とかそんなイベント発火させる形にする
>>223 イベントの引数は、そのイベントを定義するときに自分で決める
必要な引数をとるように定義しろ
227 :
デフォルトの名無しさん :2013/07/16(火) 11:51:42.62
>226 EventArgsを継承してつくらんといかんとははないの? ストリングでもなんでも勝手に定義できんの?
できる ただしライブラリとして公開するようなのならそんなことすんな
単なるデリゲートだからな
230 :
デフォルトの名無しさん :2013/07/16(火) 21:57:35.72
はあ? EventArgsってクラスでしょ。デりゲートじゃないよ。
231 :
デフォルトの名無しさん :2013/07/16(火) 21:59:03.97
あっ、Eventの宣言ってデりゲートの宣言と同質ってこと?
232 :
デフォルトの名無しさん :2013/07/16(火) 22:01:22.36
>229 あ、そういうこと! 目からうろこ。
HogeEventHandlerは暗黙にDelegateクラスから派生する型。クラスと同レベル Event Hoge As HogeEventHandlerはメンバ。プロパティと同レベル HogeはHogeEventHandlerデリゲートのインスタンス 「デリゲート」はデリゲート型を指す場合とデリゲートインスタンスを指す場合の両方があってめんどい
>>233 >「デリゲート」はデリゲート型を指す場合とデリゲートインスタンスを指す場合の両方があってめんどい
普通は文脈で区別がつく
クラスという言葉だってインスタンスの意味で使われてる場合もあるだろ
慣れれば文脈で十分だけど問題は初心者なんだよなぁ
初心者にとって型かインスタンスかの違いってあんまり気にしなくて良い気もするが ちなみにデリゲートってインスタンスなのか?俺のイメージ的には値なんだが
イメージ言われても… C#の記法だと分かりやすいか? EventHandler handler = new EventHandler(methodName); 普通のオブジェクトと変わらんよ コンストラクタ引数にメソッド渡すって違いがあるだけだ ちなみにC#/VB的には参照型でも値型でもインスタンスで良い
値型のインスタンス...(たとえば)Integerのインスタンス...しっくりこないな 間違ってないのは解るんだが でも構造体のインスタンスは割としっくりする。この感覚はなんだろ デリゲートの実体はSystem.Delegateクラスらしいから、普通のオブジェクトと同じなのも間違ってないんだが この感覚がVB脳ってやつなのか
しっくりしっくりしっくりしっくりしっくりしっくりしっくりしっくり
デリゲートは内部的にはSystem.Delegateクラスから派生した特別なクラスとして実装されてるが、 概念的にはデリゲート型はデリゲート型であってクラスとは別物と考えるのが正しい クラス型、列挙型、構造体型と並んで型の一種なんだよ つまりEventArgs型を"EventArgsクラス"と呼ぶのと同じようにEventHandler型を"EventHandlerデリゲート"と呼ぶわけ
Delegateとか C++のoperator()のように 関数のように振舞えるクラスを作る方法はありませんか?
Expression? 知らんけど。
>>243 関数のように振舞えるクラスってのがどんなのをイメージしてるかわからん
C++のoperator()って演算子オーバーロードだよな?
だったらVB.Netでも出来るぞ
さすがに()演算子のオーバーロードはできないよー
>>246 C++では括弧が演算子でそれもオーバーロードできるってことか
括弧演算子の使いかたが解らんから何とも言えんが、そこまで特殊な事はさすがに出来んのじゃないかな
括弧演算子ググったけど、キャストの演算子か だったらVB.Netでも出来るはず
型変換はまた別 調べたいなら関数呼び出し演算子とか関数オブジェクトとか調べれ
C++の話とかどうでもいいけど 単にSharedなメソッドで良いんじゃないのか
お勧めしないが標準モジュール使うって方法もあるけど
252 :
243 :2013/07/19(金) 12:25:37.92
やりたいことは、 @ ()で関数呼出しのように出来る A . で独自のメンバにアクセス出来る です。 標準モジュールの関数やメソッド自体は Aをできないので代替手段になりません。 クラスが関数のように振舞う方法がなければ 関数やメソッドに . をつけて、独自のメンバを実装する 方法がないでしょうか。 Delegateを継承しようかと思ったのですが できませんでした。
(1)の必然性が不明 MustInheritクラスで十分だろ
>>252 class.func()じゃだめでclass()で呼び出したいのか?
なぜそんな事がしたいのかわからんな。すなおにclass.func()で呼び出せばいいんじゃね
標準モジュールのメンバって、モジュール名.メンバ名で呼び出せた気がするが
インスタンスメソッドじゃないとダメなのか?
どう考えても普通のクラスにFunctionとプロパティで良い気がするんだが
>>252 レス全部読んでないけど何でそんなことがしたいのか理解できない。
C#と違ってVBはクラスの中にクラス名と同じ静的メソッドを書けるから、名前空間のインポートを
工夫すれば見かけ上それっぽいことは可能だと思うけど...
っていうか
>関数やメソッドに . をつけて、独自のメンバを実装する方法
これは何を言ってるんだろう。
メソッドチェーンとは違うの?
VB脳の言うことだ どうせたいしたことは言ってない
普通の書き方 obj.Foo = "bar" obj.Exec("hoge") 243が欲しい書き方 obj.Foo = "bar" obj("hoge") ってことなら、「そんなことするな」でFAだろう。
VBで図形と図形を線でつなぐアレやろうとしたら積んだ
リブルラブルか
アクティブウィンドウのキャプションを取得する方法を教えてください
findwindowとかgetwindowtitleとか
getwindowtextを使ってハンドルを渡しても PInvokeStackImbalanceが検出されました とでます
P/Invokeの宣言が間違ってるんだろ
265 :
243 :2013/07/22(月) 12:24:04.99
IndexerNameAttributeでできるみたいです。 書方について否定される方が多いようですが コレクションでは当り前の書方ですよね。
何言っちゃってんの
>>265 インデクサはVB.NETではデフォルトプロパティとして実装されてる
デフォルトプロパティで出来るんじゃないかと思ったけど、
デフォルトはプロパティに限られSubやFunctionではむり
呼び出し時の引数省略不可能(たぶん)
の2点を考えて俺は無理だと判断したんだが
まあ、それで出来てるんなら良いんじゃね
>コレクションでは当り前の書方ですよね。
そもそもどんな書き方したいのかお前ははっきり明示してないわけだが
他の言語で当たり前でも、少なくともVB.NETではあり得ないような書き方を
したがってると皆に判断されてるわけだが
268 :
243 :2013/07/22(月) 15:24:48.17
おっしゃるとおり、プロパティでしか使えませんでした。 VB6ではSubでもFunctionでもデフォルトにできたので、 当然出来ると勘違いしておりました。 書方は最初にも書きましたが、 Delegateのように関数のように振舞う または、C++のoperator()のように、関数のように振舞うです。
コレクションのアクセスって「関数のような」ふるまいなのかね むしろ添字アクセス→ポインタ操作のメタファーじゃないか
270 :
243 :2013/07/22(月) 16:26:49.70
他の言語や旧バージョンの書方をまねしようとするのが 間違いということですね。 私のつまらぬ要求でみなさんを不快にさせて すみませんでした。
EventArgsのメンバもっと増やせやゴルァ
継承すりゃいいじゃん
>>269 引数をとり、なんらかのオブジェクトを返す
この動作だけを見るなら関数と言えなくはないんじゃないか
>>270 問題はそこじゃなくて、端的に何を言ってるのかよく分か(
276 :
243 :2013/07/23(火) 12:57:01.67
まだ質問に付合ってくださるようで、感謝します。 具体的には以下のような書方の出来るクラスFuncObjを定義したいです。 Dim a As FuncObj '関数のように使える a() '引数なし関数呼出し Dim x As Long = a(1) '引数あり関数呼出し 'クラスメンバにもアクセス出来る a.field1 = 1 'メンバフィールドに代入 a.property1 = "aaa" ’メンバプロパティに代入 a.func1(1) ’メンバ関数呼出し
他の言語使えよ
>>276 >a() '引数なし関数呼出し
>Dim x As Long = a(1) '引数あり関数呼出し
これが
a.func()やx=a.func(1)ではダメな理由は何だ?
他の言語で出来るからって理由なら、その言語使えってだけの話だが
279 :
243 :2013/07/23(火) 18:15:39.38
理由は Collection.Item(n) に Collection(n) という書方が用意されているのと同じです。 もちろん、C++でそのように書けるのも、 旧バージョンで出来たというのも理由です。
>>276 相変らず何を言ってるのかちょっと意味不明な気が...
普通に読む限り、
>>243 の変数aの動作は、普通にインデクサ(VBの場合はデフォルトのプロパティだけど)
が定義されたクラスFuncObjの普通の動作にしか思えないんだけど...
質問の意図は、Newしなくても、
> Dim a As FuncObj
これだけでaがnullじゃないことを保証したいってこと?
それならクラスじゃなくて構造体にすればそうなりますけど...
コレクションアクセスに()を使うように設計した馬鹿のせいでこういう馬鹿が湧くんだよ 反省しろ
>>279 >理由は Collection.Item(n) に Collection(n) という書方が用意されているのと同じです。
なにとなにがどう同じという主張なのかわからん
コレクションにインデクサがあることと、オブジェクトそのもの(あるいはインスタンス?)が
関数として呼び出せる事がどうつながるんだ?
.NETではインデクサをデフォルトプロパティとして扱う事で、互換性を保とうとしてるが
VB6でのデフォルトプロパティ正確には.NETではなくなっている
VB6の書き方がしたいならVB6使ってください
C++の書き方がしたいならC++使ってください
とここまで書いて思ったんだが、C++/CLIってあったよな
あれで作ったクラスってVB.NETとかC#とかから呼び出せんのかな?
呼び出せるならその関数オブジェクトとかいうメソッドどうやって呼ぶんだろ
>>281 デフォルトプロパティの互換性を最大限実現するためには仕方なかったんじゃない
よくも悪くも過去のVBに引っ張られる言語、それがVB.NET
>>282 > とここまで書いて思ったんだが、C++/CLIってあったよな
> あれで作ったクラスってVB.NETとかC#とかから呼び出せんのかな?
> 呼び出せるならその関数オブジェクトとかいうメソッドどうやって呼ぶんだろ
hoge.op_FunctionCall(...)で呼び出す
284 :
243 :2013/07/24(水) 08:10:56.84
>>280 すいません、Newの書き忘れです。
インデクサはプロパティにしか適用できないみたいなので
x = a(1)
は出来ても
x = a()
a(1)
という書方が出来ないようです。
285 :
243 :2013/07/24(水) 08:28:15.25
Delegateの呼出しの実体は、 Invokeというメソッドの呼出しようです。 しかし、Delegateはユーザーが継承できません。 インデクサもプロパティのみで、関数には使えません。 このようにインスタンス名にかっこを付けて、 関数のようなものを呼出す例はいくつかありますが、 それをユーザーが独自に定義できないのは 設計思想なんでしょうね。
くだらねえこと考えてないでクソして寝ちまえ メソッド->動詞のメタファー プロパティ->形容詞のメタファー だとしたら クラス名() はなんなんだよ意味不明だろ死ねよ それともデフォルト機能に毒されたVB厨かよハゲが
>>285 >このようにインスタンス名にかっこを付けて、
>関数のようなものを呼出す例はいくつかありますが
だからそれ他の言語の話でしょ
独自に定義できないんじゃなくて、VB.NETにはそんなものないの
そんなにC++が好きならC++/CLIでやっとけよ
>>283 おお、貴重な情報をありがとう
op_FunctionCallでググっても日本語1件しかヒットしないぜ
これは
C++/CLIとの相互運用が人気ないのか
C++でも関数オブジェクトとやらはめったに使わないのか
そもそもC++/CLIが使われてないのかw
289 :
243 :2013/07/24(水) 12:13:24.19
>>このようにインスタンス名にかっこを付けて、 >>関数のようなものを呼出す例はいくつかありますが >だからそれ他の言語の話でしょ Collectionのインスタンスにかっこを付けて要素を取出すのも Delegateのインスタンスにかっこを付けて呼出せるのも VB.netの話ですよ。
ツマンネ
>>289 少なくとも、VB.NETでは
インデクサはデフォルトプロパティの省略
デレゲートはクラスとは別の型
これらを「関数のようなもの」でひとくくりにするから違和感を感じるんじゃね
違うものは違う書き方するのがVB流なんだが、そう考えると
>>281 は真実をついてるのか
270でいなくなったと思ったのに、 273とか275が呼び止めるから、 まだいすわってるじゃん。 VBで出来ないことを無理にやろうとしてるやつも、 書き方がおかしいとか言って、全く質問に答えられないやつも、 もう黙っとけ。
画像をクリックするたびに該当Pictureboxを有効化するってので 画像クリック picturebox1有効化 2回目画像クリック picturenox2有効化みたいのやりたいんだけど、 どうすればいいんだろ
あ、なんだ糞簡単な事だった アホな質問してすまん
295 :
デフォルトの名無しさん :2013/07/26(金) 23:16:26.01
dim byteData() as byte dim byteData as byte() これ意味的にどう違うの?
>>295 同じ
前者はVB6脳が染み付いていてオブジェクト指向を理解してない人のために仕方なく用意されているレガシーな書き方
どちらもbyte()型の変数byteDataを宣言しているので、意味的には後者が正しい
特にない
VBと似た事情で、C脳が染み付いた連中のためにJavaでも前者とほぼ同じ書き方ができるが、 正しいとされるのは後者の表記 前者は私はオブジェクト指向を理解していませんという宣言になる
panelに線を描画しようとするとうまく行かないな
まるで鉛筆でなぞるような線になる イミフ
301 :
デフォルトの名無しさん :2013/07/27(土) 04:34:00.68
(1)dobonの例から 'ボタンコントロール配列のフィールドを作成 Private testButtons() As System.Windows.Forms.Button (2)ボタンコントロールと同様に295のbyteDataはbyteオブジェクトの配列と考えられる。 (3)1,2から正しいのは前者と考えられる。 dim byteData() as byte 正しい。 dim byteData as byte() 従って 296,298の説明は真っ赤な嘘、つまり誤りとするのが妥当と思える。
>>301 間違い。dobonの中の人は理解した上でVBerに馴染みの深い方を使っているんだろうが、
VBerには君みたいに理解せずに前者を使ってる人がいるのが問題なんだよ。
(1)と完全に等価なコードをC#で書くと
private System.Windows.Forms.Button[] testButtons;
こうなる。testButtonsがButton[]型なのは明らか。Button testButtons[]のような表記は許されない。
ちなみにC#の元ネタのJavaではどっちでもいける(
>>298 )んだが、一般的に前者は意味的におかしいので良くないとされていて
C#ではなるべく過去の負の遺産を整理しようということで前者は許されなくなった。
C#ではfixed byte byteData[5];なんてのもあって 字面の通り本物のCスタイルの配列を作ってポインタでアクセスできたりするが VBの Dim byteData(5) As Byte (これはByte[] byteData = new Byte[5];と等価)とは全く意味が違う
VB.NETなんてどうせ低能しか使わないんだから どっちでもいくね?
VBerおなじみの"配列変数"って今もう存在しないんだよな
MSDNでは、配列の宣言方法は前者とされている サンプルコード等も配列の宣言は前者の方法でなされてたはず この辺は言語としての設計思想の問題で、正しいとか間違ってるという問題ではないんだが 他人をけなすと自分が偉く感じれるからな
ユーザーのレベルや慣習を考慮するのも設計思想のうちだからな VBから移行する人の敷居を下げるためにあえてC#とは別に作られたのがVB.NETだったんだから 別に間違ってはいない
>>306 つーか、自分の価値観に反するもの・合わないもの=悪・攻撃対象
と見なす短絡的な人間が多いのだよ、技術者系は特にね。
世の中にあるものは全てつながっていて、何かを攻撃することは
回り回って自分を攻撃することだと気づく日がそのうち来るのだけど、
かなり歳を取ってからだから、無理もないのだがな。
プログラミング言語の進化なんて「〜言語の〜は糞だから〜にした」の歴史だろう 言語に限らないけど
敷居を下げるためにVB6に合わせるのも結構だし
非合理だからやめろというのも結構だが
人格だけを攻撃するのはただの思考停止だよ
>>308 みたいなの含めてね
312 :
デフォルトの名無しさん :2013/07/27(土) 13:21:37.34
richitextboxでキー入力をするとプププと音がする。 KeyPressイベントやKeyDownイベントで e.Handled = True にすると音がでなくなる。 これは何故なの? これをするとなんか他に影響ある?
313 :
デフォルトの名無しさん :2013/07/27(土) 13:33:18.12
>>310 敷居を下げる 大間違い。
鴨居を下げる 大正解。
314 :
デフォルトの名無しさん :2013/07/27(土) 13:45:03.32
>302 宣言の形式とアクセスの形式が同一の方が理解しやすい。 人間が理解しやすいように整理したのがオブジェクト指向の目的の一つなのだから C#のように宣言の形式とアクセス形式を態々変えるのは間抜けであってオブジェクト指向に 反する。
315 :
デフォルトの名無しさん :2013/07/27(土) 13:46:03.49
態々と書くやつでまともなことを言うやつがいない法則。
>>306 ,
>>308 言っちゃ悪いけどダメな人の典型だわ。
基本的に
>>302 の言うとおり。
他人を分析する前に自分がOOも理解してないことを恥じた方がいいと思うけど。
今時OOなんて常識だと思うけどVBの世界じゃそうじゃないんだな。
ちなみに、
>>303 は何を言ってるのか分からん。
この人はこの人で何か勘違いしてる気がする。
317 :
デフォルトの名無しさん :2013/07/27(土) 13:47:45.72
副詞をわざわざ漢字で書くやつは知的障害者
318 :
デフォルトの名無しさん :2013/07/27(土) 13:51:22.97
()の位置でオブジェクト指向の理解度を判断できるVBはいい言語。
俺の場合コピペ元による
俺はDim i() as integer この形式一択。 ずーとこれでやってる。そんだけ。
俺はリスト使うからもう配列は使ってない。
C#で構造体のメンバにfixed byte byteData[5];と宣言すると 構造体のレイアウトはbyte型の変数を5つ並べて宣言したのと同じになり、byteDataは先頭要素のポインタを表す C言語の配列と同じだ VB.NETにこういうのはなく、配列といえば配列オブジェクトしかない
配列ってのは言語要素であって、OOと直接関係ないわけだが
>>323 配列はオブジェクト
昔のVBのように変数が配列なんじゃない
ちょっと待ってくれ dim byteData() as byte これって配列じゃないの?
>>325 決してbyteDataが配列なんではなくて配列の入れ物を用意しただけだね
詳しく言うと、byte()という配列型のオブジェクトへの参照を入れるための変数を宣言している
変数が配列なんじゃなくて、あくまでどこかにある配列オブジェクトのハンドルを入れる変数
>>326 ありがとう。
一応、私の認識で間違ってなかったみたい。
議論の内容に着いて行けずに、混乱してしまった。
初心者向けの説明でよくある、変数並べるのは大変だから配列にしましょう変数並べたのと同じですってのは 使い方の説明としてはもちろん間違ってなくて、言語仕様上の概念としてもCやVB6の頃はまあその通りだったんだが 最近の言語だと正確には間違いなんだよな
>>322 構造体中のインライン配列の話か。
VBの場合ポインタが使えないから構造体の中のインライン配列が必要になるのは
アンマネージ関数呼ぶ時だけだけど、その場合はVBFixedArrayAttributeが使えたはず
330 :
おい無視すんなよ :2013/07/27(土) 18:04:42.07
richitextboxでキー入力をするとプププと音がする。 KeyPressイベントやKeyDownイベントで e.Handled = True にすると音がでなくなる。 これは何故なの? これをするとなんか他に影響ある?
>>328 言語仕様上の概念があるから配列が規定されてるわけで
実体はSystem.Arrayだけどそれを意識することはないでしょ
純粋なOO言語なら間違いかもしれんが、少なくともVB.NETにおいては間違いではない
とかいうとまたVB脳とか言うやつがいるんだろうな
>>331 配列の実体はSystem.Arrayじゃねえよ
Byteの配列はCLR的にもByte()型だ
型情報によって形式的にSystem.Arrayを継承してるが、
要素の型や次元が異なれば明確に別の型だ
.NETではクラス、値型、ポインタ、デリゲートのように色々な型のグループがあるが
それらと並んで「配列型」というグループがあり、Byte()やString(,)などはそれに含まれる配列型の一つ
言語側でもっと大掛かりな仕組みでVB6のような配列変数を再現してるなら
>>331 の言ってるようなこともわかるけど、
実際は変数宣言で括弧の場所が違っててもコンパイラが読み替えますよというだけの
非常に薄い構文糖衣にすぎないからなあ
>333 そういうことを断定的に言えるにはどこをどう調べたらわかるんだ? >334 「構文糖衣」って始めて聴いた。なかなか文学的表現だな。
>>334 そう言う言い方をするのであれば
dim byteData() as byte はVBとしての配列
dim byteData as byte() は.NETの配列型をサポートしてるだけ
まあVBとしての配列は当然.NETの配列型で実装されているわけだが
下は.NETのサポートの一環でVB.NETとしての言語仕様での配列ではない
だからMSDNではVB.NETの配列はすべて上の書き方なわけだ
コンパイル後の結果が同じでも意味合いが違うので単なるシンタックスシュガーという事ではない
糖衣構文という言葉をを初めて聞いたプログラマって...
>>336 何だよVBとしての配列って。
デタラメを言うなって。
>>334 の言うとおり単にコンパイラが読み替えてくれてるだけ。
ちょっと何言ってるのかわかり(w これがVB脳か
VBとしての配列 これは概念としての話だろ? コードとかコンパイル結果とは無関係なんだよな?な?
コードは書き方にかかわるから無関係じゃないだろ その結果二通りの書き方が出来てるわけで コンパイル結果は同じ それを糖衣構文と言えるかどうかはしらん
概念もクソも宣言を読み替えてくれるってだけだからな 構文糖衣とよぶのすらおこがましい、表記の揺れ程度のレベル
その読み替えこそが糖衣構文と呼ばれるものの定義そのもの。 何を寝ぼけたこと言ってるの。
特に楽になってるわけでも分かりやすくなってるわけでもないからね 表記のバリエーションだよ
345 :
デフォルトの名無しさん :2013/07/29(月) 04:48:34.91
質問: VB.net Trimのバグみたい???。 rxdatには :TIMEREQ**\rのバイトデータが入っている。 '受信データから先頭の10バイトのコマンドを抜き出してストリングに変換する。 Dim cmdbytes As Byte() = New Byte(10) {} Array.Copy(rdat, cmdbytes, 10) Dim rxcmd As String = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetString(cmdbytes) rxcmd = rxcmd.TrimEnd("*", " ", vbCr, vbLf) 'コマンドのケツについている不要文字をトリムする。 Select Case rxcmd Case ":TIMEREQ" Case Else end select ":TIMEREQ"を掴みたいのだが掴めない。何故でしょう? というかもっとスマートなコマンド分離ってないんでしょうか?
>>345 スマートなコマンド分離ってのがどういう事かわからんが
おそらくバグってるのはお前だ
元データは11文字、cmdbytesも(0 to 10)で11個
Array.Copyでコピーしてるのは10個
だからrxcmdの最後にヌル文字入ってる
ヌル文字がトリム対象になってないので、最後のヌル文字まで出力される
まあ、こういう事だと
元のデータがどういう形式か知らんが、わざわざArray.Copyとかする理由があるのかね
低能はすぐフレームワークのバグにするよなw Trimする前のrxcmdはどうなってんだよって話
348 :
デフォルトの名無しさん :2013/07/29(月) 06:35:12.69
>346 そういうことか? 11バイト生成していたのか? それにしてもNULLも 文字列になるんだね。 >まあ、こういう事だと >元のデータがどういう形式か知らんが、わざわざArray.Copyとかする理由があるのかね 先頭だけストリングにするのにコピーしてるんだよ。通常のコマンドは先頭10バイト につづいてバイナリで2Kバイト位飛んでくるので全部変換すると効率悪そうなんでね。 >スマートなコマンド分離ってのがどういう事かわからんが >おそらくバグってるのはお前だ スマートの定義だが、視認性が良くて尚且つ効率もいいということかな。 たとえば10バイト確保するのに、9って書かねばならんのは視認性が悪いので、まあ スマートでは無いと言えるかも。
349 :
デフォルトの名無しさん :2013/07/29(月) 06:42:07.93
>347 VBってフレームワークなのか?
>>348 スマートの定義を聞いたんじゃなくて、コマンド分離って何だよと言う事だったんだが
まあ好きにしてくれ
351 :
デフォルトの名無しさん :2013/07/29(月) 07:01:08.69
コマンド分離がなんだというと、コマンドとそれ以外のデータが合体した通信データ からコマンドを抽出することだな。コマンドによってそれに続く処理を 切り替えるためだね。
352 :
デフォルトの名無しさん :2013/07/29(月) 07:08:12.74
Select caseでバイトコンペアができないのか? ってはなしだな。 Select case bytedata.subbyte(0,10) case (Byte)":TIMEREQ" みたいに拡張できんのか?
ステートメントは拡張できんからなぁ やるなら Select Case True Case Myfunc(":TIMEREQ",rxdat) Case Myfunc(":XXXXXXX",rxdat) みたいな感じじゃね
データを格納するクラスを作って コマンドごとに派生クラスつくるか、コマンド種別返すプロパティ作るかしろよ
rxcmd = rxcmd.TrimEnd("*", " ", vbCr, vbLf) を rxcmd = rxcmd.TrimEnd("*", " ", vbCr, vbLf, vbNullChar) にすればいいんじゃね?
>>349 System.String.TrimEndはmscorlib.dllに実装されている.net frameworkの機能でしょうが
TabControlでタブを押さずにタブを切り替える方法ないですかね? 別のイベントに割り当てるみたいな
意味が分からんが SelectedIndex変えればタブも変わる
マウスドラッグで画像を移動させてる途中に他の画像とぶつかったら、すり抜けさせず動かしてる画像を止めるみたいな処理はどうやればできるんだろう マウスムーブ時に判定させてやりゃいいのかな
>>360 ドラグして画像を動かしていくときの描画処理でやりゃいいんじゃね?
この課題がわかりません。 ' S = 1+ 1/2の2乗 + 1/3の2乗 + ・・・ + 1/nの2乗+ 1/(n+1) 2乗 + ・・・ を計算し, '表示するプログラムを作成してください。計算はS のn項までの和と(n + 1)項までの和の差が ' 1/100000 より小さくなるまで続けるものとし,その時の S と n を表示してください。
むしろ何が分からんのか分からん
364 :
デフォルトの名無しさん :2013/08/03(土) 13:44:32.48
>>362 Dim S = 0
Dim n = 1
Do
Dim i = (1 / n) ^ 2
If i < 1 / 100000 Then
Exit Do
End If
S += i
n += 1
Loop
今更vb.netやれと言われたのですがお勧めの入門書なんかありますか。 もともとJavaWebがメイン仕事でExcelとAccessのVBAなら結構わかるというレベルです。
ならwebの情報だけで十分でしょ。 っていうかもし選べるなら、どうせやるならC#の方がいいような。 VBにもいい点はあるが、記述が冗長になる欠点がVB9以降は特に足かせになってる。
JavaとC#はそっくりだからな
368 :
365 :2013/08/03(土) 22:39:15.36
>>366 C#は会社がvbな事情により無理です・・・。選べないっす…。
とりあえず入門ページいくつか見つけたので触ってみてます。
プログラミング自体は何とかなるかな…。とりあえずは後環境面を勉強しなければ。
サンクス。
そんな会社は潰しちゃったほうがいいな
VBメインの会社なんてあるのか C#のほうがいろんな面でいいと思うんだけど いいとこ取りしてるし
それだと日本のITのほとんどが潰れる 理想的にはVBいらないのは同意だが
VBもC#も、ほぼ一緒じゃん フランス語かドイツ語かの違いでしかないだろ どちらを選択しようが、成果物に品質の違いが出来ない。 ところで C# に With 実装してくれないのかね あれが便利きわまりないので、VB 使ってる C#もC++も使えるけどね。
検討の結果却下されたらしいよ>C#にWith お前は少数派だったってことだ
Withが便利なんじゃなくて、 WithがないとどうしようもないのがVB
>WithがないとどうしようもないのがVB ?? Using 使ってもいいんだけど わざわざ変数を宣言するまでもない、ってこと多いんだよね
お前がどう思おうが結構だが 事実として、要望が少なく、設計チームがメリットが少ないと判断したから省かれた 初期化はプロパティ初期化子が付いてWithと変わらなくなったしな
377 :
デフォルトの名無しさん :2013/08/04(日) 12:38:28.09
VB.netでSelect Caseの区間指定ができるのはありがたいんだよな。 なんでC#のswitchは区間指定できないんだろ
C# にだけあって VB では出来ない記述方法って何がある?
三項演算子?はあるんだっけ? あと int i, j, k, l; i = j = k = 0; みたいなの
>>379 3項演算子はあるな
Dim x = If(condition, 10, 20)
Iifとの違いが微妙すぎてわかりづらいが
こちらが ? : 互換
int i, j, k, l; ↓ Dim i, j, k, l As Integer i = j = k = 0; って、i、j、k すべて 0 を代入するの? なんて初めて知ったけど使うヤツいるのか
同時に値を入れるというニュアンスで例示したんじゃなくて、 i = 0 自体が式で値として評価されるという感じ int c; while( 0 != ( c = fileStream.Read() ) ) {...} みたいな感じで使うんだけど
C や C# の場合は代入演算子と比較演算子が 表記上区別されるからそういう書き方が出来るんだよ VBでは両方とも = だから文脈でどちらか決まる
ああ、評価なら VB も似たように使えるよ Dim c As Integer Do While (c = fileStream.Read()) Loop
385 :
384 :2013/08/04(日) 15:12:24.35
失礼、c に代入したうえで、0 かどうかの評価、ってことか
じゃ
>>384 はダメだね
>>380 正確にはIIfは演算子ではなくて関数。Ifは演算子と定義されているけど
違いはショートサーキットするかどうか
>>381-383 C系の言語では代入式が値を持つ
VBでは代入式は値をもたないので、値を評価しようとした式は比較式として評価される
if(!c--) { 〜 } の可読性は最悪だろ。 こんな馬鹿げた記述を許しておいて、わざわざVBをけなす理由が分からん
フォーム1をスクロールしても配置されてるパネルとその上におかれた部品がが動かないようにするのはどうしればいい? ドックさせるとうまくいかない
>>388 AutoScrollでform1をスクロール出来るようにしてあるんだけど、
普通に動かすとパネルが隠れるから、スクロールしてもパネルが隠れないようにする方法です
>>390 スクロールを感知して自分でパネルの位置をずらすとか
まあ、そもそもフォームをスクロールさせるのが間違ってる気がするが
フォームをパネルで分割して必要な領域だけスクロールさせるのが普通じゃないか
自分でスクロールするようにしておいてスクロースしては困るって何を言ってるんだろう。
ODP.NET 2.Xを使ってOracleに接続しているのですが ConectionTimeoutを設定してもタイムアウトが発生しません。 説明を見るとプーリングに対する設定のようで初回の接続には関係ない値のようです。 そこで初回の接続にタイムアウトを設定するにはどのような方法があるでしょうか?
コネクション制御をするのはOracle側 あくまでもDBが主 クライアントは用事が済んだ時点でお帰り下さい
ソースがなく厳密名が決まっていない.NETクラスライブラリをCOMとして再利用したいんだが無理か?
できるよ
ってだけだと語弊があるな 使えるようにされてれば使えるよ ComVisibleとかデフォルトコンストラクタとか
逆に言えばComVisibleなどの設定やInterfaceを適切にしなければCOMにはできないてことかな さんくす
Entity Frameworkって使ってる人います?
使ってない情弱なんておるんか?
うちは未だに型付きデータセットや
ウィンドウの透過について質問したいのですが、 TransparencyKey を使って透過するのはとっても簡単でいいと思っていたのですが この透過方法だと背面にあるアイコンやウィンドウが押せない状態になってしまいます。 穴が空いてるというより透明な板が1枚あるといった感じです。 レイヤードウィンドウを使ってみようとも思ったのですがいまいち使い方がわかりませんでした… どうすれば、背面にあるアイコンやウィンドウをクリックすることができるでしょうか?
windowの形を変えたらいいんでない?
>>403 フォームの背景色のアルファ値を0にするだけ
>>404 ちょっと調べてみました。なるほどそういう方法もあるんですね。
でも、ウィンドウがAeroじゃなくなってしまう気がします…
>>405 フォームの背景色のアルファ値っていうと
opacityでしょうか?
いま理解しました。こんなかんじかなと思って引っ張ってきた うまくいきませんでした… Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.BackColor = Color.FromArgb(0, 0, 0, 0) End Sub
できました!! ちゃんとTransparencyKeyもやってから Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Me.BackColor = Color.FromArgb(0, Color.YellowGreen) End Sub こんなかんじでやるんですね! ありがとうございます!!!
連投すいません。ついでに言うと Control ControlDark ControlDarkDark 使うと書かなくてもちゃんと背面クリックできるようになるんですね… だれかが悩んだ時のために…
Cとかでよくある/**/形式のコメント(複数行)のコメントはないのですか? なにか擬似的に行うテクニックとかないでしょうか?
>>410 ディレクティブは使えるでしょ。
要は#IF False ... #Endifで囲む。
まあ全くお勧めはしないけど。
ひょっとして選択行をコメントアウトするキーボードショートカットを知らないんじゃないの?
こっちを使った方がいいと思うけど
>>410 または、関数の引数とかのコメントなら
'''
VB.NETになった時に、複数行コメントアウトは用意してくれても良いのにな。とは俺も思った。
vb.netで作ったアセンブリをcom相互運用にしてvbaやasp, vbsから使う時に visual studioのデバッグ機能(ブレークポイントなど)を使いたいのですが どうすれば実現出来ますか?
vs2010で作成したWCFをvs2012で開いて、実行したら、指定されたレジストリへのアクセスが拒否されましたってエラーが発生してしまいます。何か変更があったのでしょうか?
416 :
デフォルトの名無しさん :2013/08/21(水) 21:05:15.83
VB.netでWEBブラウザを自動操作するプログラムを作っています。 JavaScriptでポップアップ表示されたダイアログに対して 「はい」 or 「いいえ」 ボタンをクリックする為には、 別のポップアップ監視用のプログラム(Windows API)を用意して クリックするしかないでしょうか? 例) メインプログラム.exe ← これでブラウザ起動 ポップアップ監視.exe ← Windows API でポップアップを監視する。
>>414 メッセージボックスなんかで一旦スクリプト止めといて、
VisualStudioでExcelやらWindowsScriptやらにプロセスアタッチすればできるよ
グループボックス内にコントロールを配置したのですが グループボックス内のコレクションの順番がばらばらで上手く処理が行えません 順番を綺麗に直す方法などごありませんか?
マルチ
421 :
デフォルトの名無しさん :2013/08/27(火) 21:28:09.96
質問です。 Oracleサーバ使ったアプリを作成しています。 デバッグ実行とexeの動作は確認できたのですが、 出力したexeを別のPCに持っていくと、DBへの接続が出来なくなりました。 ODACだかのdllはexeとセットで持って行っており、 もう一方のPCに入っているODACは開発PCと同じものです。 何が原因で接続できないのか分からず困っているので、お知恵を拝借したいです。
例外の型とメッセージくらい書け
423 :
デフォルトの名無しさん :2013/08/27(火) 23:54:55.48
>>422 もっともな返答ありがとう。
でもごめんなさい。今、手元にソースが無いのです。
エラーログを覚えている限りでは、DataAdapterのFill関数の呼び出しでエラーが発生していたはず。
OracleExceptionの12154番が発生していたはず…。
曖昧なことばかり書いて申し訳ないですが、よろしくお願いします。
ora12154てことはoracleに繋げられてないな tnsnames.ora見てみる tnsping撃ってみる sqlplusとかで繋げてみる 環境変数とユニバーサルインストーラのHOMEパスが違ってないか見る oracleが複数インストールされてないか見てみる 32bitと64bitが混在してる 辺りから探ってみればー 後はOracleさんに聞いとくれ
.netでもjavaみたいにoracleクライアント入れなくてもojdbc.jarだけで 接続できるみたいになればいいのにねぇ
単にファイアウォールで蹴られてるだけだったりして
データテーブルをデータグリッドにバインドさせた時に 日付型の列に値を入れて、その値を消すとDateの初期値の0001/01/01と入ってしまうのですが、 空の場合はDBNullを入れるようにすることは出来ないのでしょうか? ColumnChangedイベントで初期値ならDBNullを入れるって言うふうにしても初期値が入ってしまいます
バインドなんかやっちゃダメだよ
まぁ、データグリッドに表形式でデータを表示したいときは データテーブルをバインドするのが一番効率的だろうな これよりもっといい方法が出てくればいいのにな
お返事ありがとうございました。 お陰様で解決しました。 環境変数TNS_ADMINの最後にセミコロンがついていたことが原因で通信できなかったようです。 問題自体は解決したのですが、環境変数にセミコロンが「ついている事」が原因で問題が発生した経験が無く このようなことはよくある話なのか、ご意見を伺いたいです。
PATHならともかく環境変数なんてただの文字列格納スペースなんだから それをどう扱うかはその環境変数を利用するプログラム次第
432 :
421 :2013/08/28(水) 21:32:38.68
>>430 あれ?名前出てない…。
421です。昨日はありがとうございました。
>>431 プログラム次第ということは、オラクルのせいですね?
私悪くない!
プログラムしだい
>>427 イベント間違ってるな
ColumnChangingでやればいけるんじゃね
>>24 そのフォームで生成したクラスは、Privateフィールドで良い。
ただし、ゲッタを用意しておく。
もう一つのフォームにはセッタを用意しとく。
2つのフォームはモジュールから管理。
>>54 オブジェクト指向に関しては、Javaで解説されたテキストがほとんど。
オブジェクト指向の考え方自体は、どんな言語でも同じだと思うが。
VB6のように、言語的にまるまるJavaでの文法を適用するのができない
という事もあるが、基本の考え方は同じ。
436 :
デフォルトの名無しさん :2013/09/03(火) 10:16:23.53
VC++.netで作成したプログラムをVB.netからアクセスしているが、メソッドは呼び出せるが 2000バイトほどの配列データをVB.NETに渡したいのだが方法がわからない。 どうしたらいい? methodでインデックスを渡して1ワードづつ読み込むって方法は考え付くのだが ポインターを渡してバッサリ渡すってことはできないのか?
マーシャリング
438 :
デフォルトの名無しさん :2013/09/03(火) 18:00:54.73
マーシャリングはアンマネージドとマネージド間の渡しだろ。関係ないな。
まさにマネージアンマネージ間の話に見えるが、 別にマネージコードで完結する範囲内でやってもいいよ?
>>436 ポインタをIntPtrで受け取ってMarshal.Copy
なんか頓珍漢なレスが多いけど、マーシャリング云々以前に、 こういう場合は呼び出し側でバッファを確保してその先頭アドレスを相手に渡すのが常識。 アンマネージの意味分かってるかね。
>>441 向こうで常に保持してるバッファかもしれないだろ?
情報がないんだからこういう場合もクソもあるかよ
何を言ってるのか意味不明だが、GCが付いてない言語で呼び出された側で バッファを確保するライブラリ、俺は見たことない。 そのバッファ、最終的に誰が解放するんだよ。 馬鹿じゃねえの
馬鹿かお前は アンマネージ側でずっとメモリが保持されててそのポインタを取得することはあるだろ C/C++には自分で状態持たないライブラリしか無いとでも思ってるのか?
まず大きなメモリを静的に確保するライブラリというのが非常識だが、 >アンマネージ側でずっとメモリが保持されててそのポインタを取得することはあるだろ そんな非常識な設計は普通はしません。 馬鹿だろお前
たとえばOpenCVのようなライブラリを使う場合、 アンマネージ側で確保されたメモリ領域に対してポインタ通してアクセスすることになるよね? System.Drawing.Bitmapなんかもそういう実装ですよ? 何も静的に確保したメモリに限った話じゃない そういうことを言ってるんだけど馬鹿だろお前
Bitmap.LockBitsとか普通にアンマネージメモリのポインタが返ってくるよ
OpenCV知らないけど画像処理みたいな特殊な例を出されても知らんし。 少なくとも言えることは、たった2kBのメモリをコピーするパフォーマンスを惜しんで そんな無作法な方法を採用するプログラマは1万人に1人もいないよ。
なんだ 経験不足か
Dim hoge As Hoge = new Hoge() 'アンマネージオブジェクトが確保される Dim p As IntPtr = hoge.GetSomeData() 利用(p) hoge.Dispose() 'アンマネージリソースが開放される C++のライブラリのラッパーには普通によくあるよねこういうの
まともなラッパーならポインタを露に扱うことは少ないかもしれないが
内部的に
>>451 のようなことをしているラッパーはかなり多い
アンマネージリソースを持ってる.NETのクラスも含めて、
ある程度複雑なC++のライブラリのラッパーならほとんど全てじゃね
へぇ C++はそうなんだぁ
すでに有るライブラリの仕様でポインタ扱いたいとかいっちゃうと パフォーマンスを惜しむと理解されちゃうのか 仕事頼みたくはない人種だな
どんな負け惜しみだよ。 というか、そもそも自分がどんな頓珍漢なことを言ってるかすら理解してないんだから 話にならんけど。
反例は出てるのにw 「クラスにラップしてインスタンス破棄時に開放する」という考えが頭になかったんだね マジで多いから有名なライブラリのラッパーを調べてみるといいよ
で、どっちが勝ったの?
パソコンに接続されているWebカメラの名前を取得するにはどのようにしたら良いでしょうか
>>458 DirectShowで入力デバイスを列挙する。
ICreateDevEnumのインスタンス作って、CreateClassEnumeratorでVideoInputDeviceCategoryを指定
CreateClassEnumeratorでIEnumMonikerのインスタンスが得られるのでwhileで回しながらNextメソッドでIMonikerを取得
BindToStorageでIPropertyBagのインスタンスを取得してReadで "FriendlyName"を指定して取れた値がカメラのデバイス名
ビデオ入力デバイスを列挙するんでキャプチャーボードとか付いてるとそれも列挙されちゃう
.NETでもDirectX使えるらしいから参考になるかしら、もっと簡単な方法があれば知りたい
>>461 DirectShowをインポートするところまでは出来たのですがその後が分かりません
できればソースコードをお願いします
開発環境はVS2008 フォームアプリでスタートアップはSubMain。 アプリ起動時にコンテキストメニューを表示して項目を選択したら処理って流れにしたいんだけど 下のコードだとデスクトップとか、アプリのコントロール以外の場所をクリックしたときコンテキストメニューが出っぱなしなんです。 普通のコンテキストメニューなら閉じますよね。どうにも気持ち悪くて・・・どなたか解決策をご存じないですか? ちなみにContextMenuStrip1_ClosedイベントでApplication.ExitThread()を実行してアプリ終了させとります。 Public Class MainClass <STAThread()> _ Shared Sub Main() Dim myContextMenu As New UserControl1 myContextMenu.ContextMenuStrip1.Show(Cursor.Position) Application.Run() End Sub End Class
>>463 Application.Run()する前にShowとか駄目っしょ
>>462 キーワードは出てるんだから、後はググればサンプルコードくらい山ほど出てくるよ
466 :
463 :2013/09/08(日) 13:02:33.47
>>464 なんか色々と残念なコードだってことは理解……
もちっと勉強し直してきます
フォームを表示する前に何かする系のプログラムは、 非表示フォームを使うとスマートにかけたりする
例えば?
jsonデータにエンコードされた日本語の文字って\3333\2222みたいになりますよね? これをVB.NETで復元したいのですがどの様にすれば良いですか?
数字は適当です
正規表現置換でコールバック書く
>>471 コールバックを書く、というのはどういうことでしょうか?
>>469 自分でやるならjsonのフォーマット調べてその通りのプログラム作る
まあ、まずは出来合いのライブラリ探すほうが早いだろうけど
標準だとDataContractJsonSerializerってのがあるらしい。それ以外だと適当にググって探せ
少し前にC#スレかこのスレで見たんだけどなー
見つけた ふらっとVisual C#,C♯,C#(初心者用) Part104 の304あたりからだ。似てるけど違うか。
System.Jsonってまんまなのがあるぞ
4.5ので語られても困るよな せめて3.5にしてくれないと
ChrW()
ありがとうございます 以下のようにしたら出来ました text &= ChrW(Convert.ToInt32(str.Substring(2, 4), 16)) strには「\uXXXX」の形で入っている
そんな過去の遺物使わなくてもCharacterにキャストするだけだ っていうかJSONなら自分で実装しなくてもC#製の既存のライブラリは腐るほどある
str = "ABCAEFGHIJKLAN" という変数があってJの位置から前に検索していって最初に見つけたAの位置を知りたいのですがどのようにしたら良いでしょうか LastIndexOfだと最後のAの位置になってしまいます
instr(instr(str, "J"), str, "A")
あ、「前に」か ↑のは忘れて
コントロールパネルのアイテムってどうやって取得するの?
jでスプリットしてラストインデックス
>>482 Dim indexOfJ As Integer = str.IndexOf("J") ' str.LastIndexOf("J")
Dim indexOfA As Integer = str.LastIndexOf("A", indexOfJ)
Jが見つからなかったケースは考えてない
str.split("j")(0).lastindex("a")
>>490 LastIndexOfはstartIndexの位置から後を検索していって一番最後にヒットした位置を返す
>>492 > この検索では、インスタンスの startIndex の文字位置から開始し、
> value が見つかるか、最初の文字位置に到達するまで、インスタンスの先頭へ
> 向かって逆方向に検索を実行します。
Dim str As String = "ABCAEFGHIJKLAN" MsgBox(str.Substring(0, str.IndexOf("J")).LastIndexOf("A"))
なんかうまくいかないなーって調べてたらmyUpdateとUpdate間違えて実行してた
496 :
デフォルトの名無しさん :2013/09/15(日) 13:54:26.86
.lnkのショートカットを起動できません。 Process.Startで直接起動できない。 .lnkのリンク先を WSHやIPersistFileとIShellLinkWやWScript.Shellなどを使って取得を試みたが、 C:\Program Files内なのに、C:\Program Files (x86)内のパスを返してきます。 これは、バグらしいので対応できないみたい。 何か方法がありますか?
497 :
デフォルトの名無しさん :2013/09/15(日) 13:56:14.62
>>496 は
OS Windows 8 64bitです。
起動できる.lnkショートカットもあって、できないのは、
64bit版のOneNoteをスタートメニュー内のショートカット(.lnk)からです。
498 :
デフォルトの名無しさん :2013/09/15(日) 18:47:23.54
結局バイナリで直接開いて中のURL取り出すとこまでできたんですが、 ファイルによってアドレスが違うんだが。
>バグらしい 99%自分のコードにバグがあるんだろうなー >Process.Startで直接起動できない。 ShellExecuteは使ってるのかなー
500 :
デフォルトの名無しさん :2013/09/15(日) 19:24:26.52
502 :
デフォルトの名無しさん :2013/09/15(日) 21:25:46.96
ShellExecuteネット上のソースをコピペしてみたんだけど、やっぱりダメっぽいです。 場当たり的な解決しかないですかね。 .lnkの構造からリンク先のパスをバイナリから取得してみます。位置がわからないんだけど。 もしくは、64bit版のランチャーからならできるのかな? ランチャー作ってるんですが、32bitと64bit版を分ければいいってことかな? まぁ、やってみよう。 ありがとう。
すまんかった Windowsのバグか リダイレクトしないでいいものまでリダイレクトしちゃうのか
x64でコンパイルしてもダメなのか?
505 :
デフォルトの名無しさん :2013/09/15(日) 22:17:08.14
x64でコンパイルしたらいけました。 Process.Start("パス.lnk") でOKでした。
506 :
デフォルトの名無しさん :2013/09/22(日) 01:14:45.49
VB6.0のプログラムをVB.NETへ移行作業をしているのですが、 配列の部分で以下のようなエラーが出ました。 Public Function gf_GetValue(ByRef strData As String, ByRef aFields() As typDatFields, ByRef astrDat() As String) As Boolean ' aFields() :項目属性情報 ' astrDat() :変換後データ配列 Dim lngLenB As Integer Dim lngPosB As Integer Dim lngIx As Integer lngMx = UBound(aFields) ReDim astrDat(lngMx) astrDat(lngIx) = StrConv(MidB$(bytDataCnv, .lngPosB, .lngLenB), vbUnicode) ※ astrDat(lngIx) = Trim$(astrDat(lngIx)) 上記VB6.0のプログラムの※の行に関し、「MidB$」と「vbUnicode」がVB.NETで使用不可とのことで 以下のように書き換えました astrDat(lngIx) = System.Text.Encoding.Unicode.GetString(Mid(strData, .lngPosB, .lngLenB)) →上記のように変更したところ、 「型 'Byte'の値を 'String の1次元配列'に変換できません。」というエラーが出ます。 どう書けばいいのでしょうか? よろしくお願いいたします。
>>506 うんこみたいなコード(しかもバグってる)の解読を人に丸投げするってどういう神経よ。
bytDataCnvとかいう謎の変数はどっから来てどこへ言っちゃったんだ。
丸投げするんじゃなくて、何がしたいのかだけを端的に質問しろよ
StrConv vbUnicode VB.net あたりでぐぐれば色々出てくるんじゃね
なんでMidBに渡してた引数とMidに渡す引数が同じなの?
なんで真剣に答えない上に、上から目線でコード批判してるんですか?
511 :
デフォルトの名無しさん :2013/09/22(日) 08:59:40.18
>>506 GetStringの引数はByte()。
Midの戻り値はString。
StringをByte()に変換してByte()をGetStringに渡せばいいはずよ。
こんな感じ。MidBの開始位置は1で、GetStringの開始位置は0。lngPosBは調整する必要があるでしょね。
Dim u As System.Text.Encoding = System.Text.Encoding.Unicode
astrDat(lngIx) = u.GetString(u.GetBytes(strData), .lngPosB, .lngLenB)
仕事を丸投げしてんじゃねーyo!
文字取り扱いの根本的なとこが分かってない気がするんだが
>>513 文字取り扱いの根本的なとこを教えてくれよ
何やってるか知らんが SHIFT-JISをバイトコードにして、オフセット操作して、(UNICODEの)文字に直さないとダメなんじゃないのか
固定長ファイルの1行を受け取って項目長定義から項目を切り出して配列で返すと予想。 1.入力されたテキストはSHIFT-JISのバイト配列にする 2.項目長定義に従いバイト長で切り出しSHIFT-JISエンコーディングでstringに戻す こんな感じ。
TextFieldParserが使えないかと思ったが案の定文字数に作用するんだな。 全角文字=2バイトが破綻してるのは分かるが残念。
ようするにこういうことだろ 俺天才すぎるw Dim str As String = "あいうえお" Dim bytesData As Byte() bytesData = System.Text.Encoding.GetEncoding(932).GetBytes(str) Dim buff As Byte() = New Byte(4) {} For i As Integer = 0 To 3 buff(i) = bytesData(i + 2) Next Dim str2 As String = System.Text.Encoding.GetEncoding(932).GetString(buff) MsgBox(str2)
なんかスゲー見覚え有るコードなんだけど ググれば答え有るよねこれ
それは昔オレが書いたコードかもしれない
521 :
デフォルトの名無しさん :2013/09/24(火) 00:35:30.02
Visual Studio 2008や2010等のExpressEditionで VBで開発したプログラムを64bitコンパイル出来ないのでしょうか? 64bit対応するには正規版でないとダメなのでしょうか?
設定の「ビルド構成の詳細を表示」を有効にすれば選べるようになる 64bitコンパイルというが、.NETのアセンブリには32ビットも64ビットも実質的な違いはないぞ どっちで起動するかという情報があるだけ
523 :
デフォルトの名無しさん :2013/09/24(火) 00:52:55.81
>>522 設定の「ビルド構成の詳細を表示」を有効にしたところ、
ビルドに「構成マネージャー」が表示されましたが、
プラットフォームは「AnyCpu」しか選べませんでした。
ビルドしたプログラムを実行すると、タスクマネージャーには
「*32」が付きます。
開発環境は、Windows7 64bitです。
構成マネージャとプロジェクトの設定の関係は、分かってしまえば簡単だけど 知らないと訳分からんだろうなw ググって調べて自分で理解した方がいいと思う。
AnyCPU以外にメニュー項目あるだろ? ちなみに両対応したいならx64じゃなくてAnyCPU x64 preferedな
526 :
デフォルトの名無しさん :2013/09/24(火) 01:32:40.46
>>525 ありがとうございました。
Visual Studio 2008 Expressでは、
•x86
•Itanium
•x64
•anycpu
の4つの選択肢でしたが、x64を選べたので、大満足です。
ありがとうございました。
527 :
デフォルトの名無しさん :2013/09/26(木) 14:09:35.04
教えてほしい。 ワークスペースに prjM VBでメイン実行プロジェクト prjS VBでパラメータ設定プロジェクト prjDLL VC++でDLL の三つのプロジェクトをつくって、prjDLLはprjMとprjSの両方でアクセスする prjDLLにはスタティックな変数のメモリエリアがあってそこにファイルから設定変数を ロードしている。 問題はprjMを実行している時にファイルから設定1をロードして実行しているのに 実行中にprjSを立ち上げて設定2を編集したいことがある。そうすると実行中のprjMは 当然誤動作をする。これを避けたい。 prjDLLを二つ用意すればいいのだが開発中でしょっちゅう編集するので同じ編集を 二つやりたくない。 編修は一か所でDLLはprjMとprjSが独立に使えるように二つできるような仕掛けはできなの だろうか?
何か偉そうだし上げてるし
ワークスペースというところを見るに、ひょっとしてスレ違いではないでしょうか
業務なんだろうから 見積もりだそうか?
まあまあ、簡潔でいいとおもう。
方法はいろいろあるが、一番簡単なのは設定の従属関係を変えることだ
ワークスペースをソリューションに読み替えるぐらいの優しさはあっていいと思うの
一つのソリューションにしない
prjMとprjSは両方、フォームアプリ?別EXEだよね? プロセス違うと同じDLLリンクしてもデータ領域のアドレス空間違わない? M実行中にSでデータ変更してもMのメモリに影響無さそうだけど。
>536 あれっ、そうなの? 両方ともFormアプリだよ。 だけどprjMのフォームからprjS.main.DialogShowで立ち上げている。 DLL(VC++)のなかで public: static void SetKisyumei( String ^ kisyumei) { char c_val[1000]; getCstr(c_val,kisyumei);//ストリングをcharに変換する。 strcpy(param.kisyumei, c_val); } とやってる。 static がまずいのか? このparam.kisyumeiというのは昔に誰かが作ったCのプログラムでparamというデカイ構造体を 持っていてそこにファイルからドバっと読み込んで処理している。 そのCプログラムをVC++でラッパしてそれをVBからアクセスしている。 例のSetKisyumeiをVBから直接呼び出す。
538 :
デフォルトの名無しさん :2013/09/26(木) 17:27:05.66
>一つのソリューションにしない どうわけるのがいい? 1) prjM prjS + prjDLL 2) prjM + prjS prjDLL 例えば1)のようにソリューションを分けると、 prjMで定義を書いたりとかDLLを呼び出すのがめんどくならない?
っていうかDLLをそこまで変更しないといけないとか 設計する気がないってことだろ もっと考えてからコード書けよって話だよ
別にDLLにしたいわけじゃないんだが、勝手にDLLになってしまう。 古いソフト使いたいわけじゃないんだが、そういう状況だし VC++使いたいわけじゃないんだが、Cをアクセスするには仕方ない しかもそのためにDLLに自動的になってしまう。
>539 じゃあ骨のあるDLLをデバッグするのはどうするんだ? WWWW
>だけどprjMのフォームからprjS.main.DialogShowで立ち上げている。 prjMはメイン処理してて[設定]ボタンとかでprjS.main.DialogShowしてるって事かな? prjMからprjSをプロジェクト参照して、フォームを表示してると。 それだと別プロセスじゃないからアドレス空間同じだよね。 アドレス空間同じならstaticなら同じアドレス指すよそりゃ。 これはDLLを2つじゃなくてDLLのインスタンスを2つ作ればいいだけでは。 てか別プロジェクトに分けてるってなら、prjSをビルドしたEXEはどういう動きすんの? 設定画面が単独で出るだけ? もしそうなら、prjMからは、prjS.main.DialogShowしてるところでprjS.exeを立ち上げる のが無難かと思うけど。 prjS.exe自体で動かさないなら別プロジェクトにしてる意味が分からない。
>prjMからprjSをプロジェクト参照して、フォームを表示してると。 >それだと別プロセスじゃないからアドレス空間同じだよね。 >アドレス空間同じならstaticなら同じアドレス指すよそりゃ。 あっそういうこと。 >これはDLLを2つじゃなくてDLLのインスタンスを2つ作ればいいだけでは。 どうやってインスタンスを二つ作るのか解らん。 prjDLL.clsDLL.SetKisyumei("x1000345.kkk") これはいけるが Dim aa As New prjDLL.clsDLL aa.SetKisyume("x1000345.kkk") これはだめ。コンパイルエラーになる。 >てか別プロジェクトに分けてるってなら、prjSをビルドしたEXEはどういう動きすんの? >設定画面が単独で出るだけ? そう。だけどprjSは非常にデカイソフトでフォームが30個それ以外のクラスが50個くらいある。 >もしそうなら、prjMからは、prjS.main.DialogShowしてるところでprjS.exeを立ち上げる >のが無難かと思うけど。 >prjS.exe自体で動かさないなら別プロジェクトにしてる意味が分からない。 処理系を設定系と実行系で意味的に分けてる。混在するとややこしくなるから。
>544 あ〜、prjSにある30個の画面のうち特定の画面だけprjMからShowしてるのか。 ならEXEの起動も難しいな。 ならやっぱり、static止めてクラスインスタンスを作るのがいいと思うが 具体的なやり方スグには分らん。調べて下さいな。 staticじゃなくせば Dim aa As New prjDLL.clsDLL aa.SetKisyume("x1000345.kkk") が出来るかもしれん。できればラッキーやねw もし、prjSEXEのメイン画面をprjMから起動してるなら前述通りprjMから System.Diagnostics.Process.Start()でも使ってEXE起動が手っ取り早い。 これだとアドレス空間別になるからね。
546 :
デフォルトの名無しさん :2013/09/26(木) 20:09:44.54
C# にはリファクタリング機能があるのになぜVB.netにはないのですか?
難しい技術だからホイホイ付けられるものじゃない 言語との相性ともいうべきものが大きい
Option Strict Offで使ってるバカがいるからだよ 確実に阿鼻叫喚
C#のリファクタリングって何がべんりなの?
550 :
デフォルトの名無しさん :2013/09/27(金) 18:30:11.63
初心者解説本にしたがって何も知らないでWPFでプログラミング したらフォルダ選択ダイアログで躓いた よ。誰かゲイツの携 帯の番号知らない?
>>549 メソッド名やクラス名を変えても呼び出し元を探し回る手間がいらない
自動でインターフェイス作ってくれる
メソッドの切り出しを全自動でやってくれる
遅延バインディングがあると追跡できないからVBでやると確実に逝くけどね
>メソッド名やクラス名を変えても呼び出し元を探し回る手間がいらない 便利そうだね。 >自動でインターフェイス作ってくれる これは意味解らん。インターフェースって使ったことが無い。 >メソッドの切り出しを全自動でやってくれる これはどういう意味? VB.NETとC#を比較してどっちにしようかと迷って使ってたことがあるけど、インテリセンス がVBの方が強かったので最近はVB.NETしか使わないが、C#も使い始めたら便利なのかなー。
これぞVBerクオリティだよな 高尚な機能を付けてもどうせ使いこなせないから投資するだけ無駄だと判断されたんだろ
意味分からん原因が使ったことないなんてしょうもない理由なら黙っとけよ
C#でメソッドの抽出を覚えたときはサルのようにやりまくったよ もう楽しくてたまらん。
IDEの他の機能はC#よりVBの方が充実してるのに、リファクタリング機能だけいつまでたっても リネームだけっていうのは謎だな。 まあ2012まではCodeRushExpressを入れれば問題ないけど、2013以降は金払わないと どうしようもなくなるのか。
他の機能といってもコードスニペットにコピペライブラリが付いてるだけだろう
コードスニペットなんかC#にも普通にある。 まああんなの使わないけど。 VB比でC#で気になるのは、リアルタイムのエラー表示機能がC#のはかなりお馬鹿。
>>559 コードスニペットに定型処理が含まれてると言いたかった
C#だとifとかwhileとかだけだからね
善いか悪いかを議論する気はないが、MSによるとVBはC#に比べてコードをコピペする人が多いかららしいよ
俺らのことか。
562 :
デフォルトの名無しさん :2013/09/29(日) 00:27:50.13
うむぅ BackgroundWorkerって、 Form1_FormClosingの中にCancelAsync()書くと処理中のものが正常終了するけど、 Form1_FormClosedの中でCancelAsync()だと、処理が中途半端で終わるのよ。 Form1_FormClosedに書くのは間違ってるのかな・・
CancelAsync呼び出した後でFormがDisposeされて その途中でBackgroundWorkerもDisposeされてるんだろ
CancelAsyncはキャンセル要求するだけで待たないよ。 また、中途半端で終わるのはAbort(非推奨)かプロセス終了なので、 Thread.CurrentThread.IsBackgroundをfalseにすれば完走すると思う。 画面側で待つかフォアクラウンドスレッドにするかどちらかだね。
>>562 です。
ありがとうございました。無事、解決しました。
画面側で待つようにしたら正常に終了しました。
>>563 >>564 ありがとうございました。
そうだ、マルチスレッドならC使えとかゆうな。
.NETになってからはその言い訳が通用しなくなっちゃったからね かわいそうに
昔、ライン管理ソフトの仕事で触ったHPのBASICは間違った 構造文書くと入力が受け付けなくてビックリしたな。N88しか 知らなかったから。リアル・インタプリターだった。
VSって、自動的にコードを整形してくれますが、部分的にそれを禁止するような ことは出来ないでしょうか? 例えば以下の例のように、二次元の配列に初期値を代入したい場合に、 わたしとしては、コンマの位置や}の位置がずれていると見づらいので、 Dim array(,) As String = { _ {"1", "aaaaa"}, _ {"20", "bbb"}, _ {"5", "ccc"}, _ {"100", "ggg"}} この部分だけは自動整形を中止して、適当にスペースを入れて、コンマや}の位置を 揃えたいのですが。 あるいは、何か良い方法ありますか?
体裁ばかり気にする神経質なジャップが使うようにはできてないから諦めろ
571 :
デフォルトの名無しさん :2013/10/01(火) 10:17:22.02
vb2010のDataGridViewについて質問です。 DataGridViewButtonColumnに設定し、 列の編集画面から、text=選択 と表示名を設定しているのですが 表示が行われません。 下記しか探せませんでした。 @下記のようにcolumnを追加するか、 Dim column As New DataGridViewButtonColumn() column.Name = "Button" column.UseColumnTextForButtonValue = True column.Text = "選択" DataGridView1.Columns.Add(column) ADataGridView1.Rows.Add()時に、textを設定する Desinger画面でcolumnを追加し、 exe実行時には、セルに文字が入力されると、 次の行が自動で増える。という機能をそのまま使いたいので、 @Aともにあわなくて困ってます。 何か方法はないでしょうか。
>>570 さっさとこの国から出てけ。投げるぞコラ
我々の言葉を使うな。けしからん輩だ。
574 :
デフォルトの名無しさん :2013/10/01(火) 21:33:43.54
VB6ではダメなの?
575 :
デフォルトの名無しさん :2013/10/01(火) 22:00:04.19
>質問ですがWin7で、動いたソフトがWin8では動くもの >動かないソフトがあり、動かないソフトは、開発言語 >ビジュアルBASICで最新の統合開発環境でそのまま >コンパイルしたら、Win8で動くようになるのですか >手直しが必要なものもある >ケースバイケース 手直しする場合、コンパイラや 統合開発環境が手直しする ところを教えてくれるのですか? それとも、自分で見つけなければならないのですか?
テストしなおす テストや仕様の文書やテストコードが無いようなものは どうせ今も動いてないのと同じなゴミだ
>>569 どうしてもというなら・・
{" 1", "aaaaa"}, _
{" 20", " bbb"}, _
{" 5", " ccc"}, _
{"100", " ggg"}}
やっておいて簡単に、array(1,1).trim で駄目なの?
578 :
デフォルトの名無しさん :2013/10/04(金) 03:45:19.51
ファイルのアイコンの一番大きいものを取得したい。 256x256があるものはそれを、48x48までしかないならそれを取りたい。 SHGetFileInfoだと32x32までだった。 SHGetImageList.GetIconだとVista以降なら256x256が取れたが、48x48のサイズのものも左上に小さく表示して256でとってしまう。 これだと使えないので、48のものは48pixでとりたい。
SHGetImageList( SHIL_EXTRALARGE,... じゃねーのかハゲ?
580 :
デフォルトの名無しさん :2013/10/04(金) 17:59:44.66
IShellItemImageFactory
を使ってやってみたら、まぁまぁうまくいったので。
>>578
IShellItemImageFactoryでHBITMAP取得すると背景が真っ黒なんだけど これどうすんの?
582 :
デフォルトの名無しさん :2013/10/05(土) 10:34:00.34
Public Function GetShellIcon(ByVal Path As String, MySIIGBF As SIIGBF, Optional ByVal Width As Integer = 256, Optional ByVal Height As Integer = 256) As BITMAP
Dim ppsi As IShellItem = Nothing
Dim hbitmap As IntPtr = IntPtr.Zero
Dim uuid As New Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe")
SHCreateItemFromParsingName(Path, IntPtr.Zero, uuid, ppsi)
DirectCast(ppsi, IShellItemImageFactory).GetImage(New PicSIZE(Width, Height), MySIIGBF, hbitmap)
Dim dibsection As New DIBSECTION
GetObjectDIBSection(hbitmap, Marshal.SizeOf(dibsection), dibsection)
Dim bmwidth As Integer = dibsection.dsBm.bmWidth
Dim bmheight As Integer = dibsection.dsBm.bmHeight
Dim bm As New Bitmap(bmwidth, bmheight, PixelFormat.Format32bppArgb)
For x As Integer = 0 To bmwidth - 1
For y As Integer = 0 To bmheight - 1
Dim i As Integer = y * bmwidth + x
Dim ptr As IntPtr = dibsection.dsBm.bmBits + (i * Marshal.SizeOf(GetType(RGBQUAD)))
Dim rgbquad As RGBQUAD = CType(Marshal.PtrToStructure(ptr, GetType(RGBQUAD)), RGBQUAD)
If rgbquad.rgbReserved <> 0 Then
bm.SetPixel(x, bmheight - 1 - y, Color.FromArgb(rgbquad.rgbReserved, rgbquad.rgbRed, rgbquad.rgbGreen, rgbquad.rgbBlue))
End If
Next
Next
DeleteObject(hbitmap)
Return bm
End Function
とりあえずこんな感じで
>>581 ただ、画質が少し悪いんだわ。。色々うまくいかない
583 :
sage :2013/10/05(土) 10:41:25.51
584 :
sage :2013/10/05(土) 10:43:13.14
585 :
sage :2013/10/05(土) 10:44:52.12
>>583 ごめん、宣言そもそもないね。
がんばってくれ。
586 :
sage :2013/10/05(土) 10:45:38.53
<ComImportAttribute(), GuidAttribute("bcc18b79-ba16-442f-80c4-8a59c30c463b"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)> _ Public Interface IShellItemImageFactory Sub GetImage(ByVal size As PicSIZE, ByVal flags As SIIGBF, ByRef phbm As IntPtr) End Interface
expect100continueが返ってくる原因が分かりません Dim req As HttpWebRequest = CType(WebRequest.Create(post_url), HttpWebRequest) req.Method = "POST" req.ServicePoint.Expect100Continue = False req.Referer = Referer req.UserAgent = UserAgent req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" req.ContentType = "application/x-www-form-urlencoded" req.ContentLength = data.Length Try Dim reqStream = req.GetRequestStream() reqStream.Write(data, 0, data.Length) reqStream.Close() Dim res As WebResponse = req.GetResponse() Dim resStream As Stream = res.GetResponseStream() Dim sr As StreamReader = New StreamReader(resStream, enc) Dim resall As String = sr.ReadToEnd() Return resall Catch ex As Exception Return "失敗" End Try
> このプロパティの値を変更しても、既存の接続には影響しません。 変更後に作成された新しい接続だけに影響します。 に引っかかったんじゃね WebRequest作る前にServicePointManager.FindServicePointからFalseにしとけば?
>WebRequest作る前にServicePointManager.FindServicePointからFalseにしとけば? 具体的にどうやるのでしょうか Dim uri As New Uri(post_url) ServicePointManager.FindServicePoint(uri).Expect100Continue = False を直前につけてみましたがダメでした
ソケット通信を使った物作ってます。 自分は思い通りにソケット接続できるんだけど、友達はソケット通信が全く接続できないみたいなんです 考えられる原因ってありますか?
FW
自分と友達とで違うところが全部考えられる原因です
オーバーライドしたWndProcってフォームレベルスレッドで動作してるん? 直接フォーム操作していいのかな?
それであってるよ
あり
クソスレ
597 :
デフォルトの名無しさん :2013/10/12(土) 14:12:02.12
笙
598 :
デフォルトの名無しさん :2013/10/12(土) 14:17:21.47
? → 笙
篳篥
Shift-JISのテキストファイルをUTF-8指定で開くとどーなんの?
List<T>のFindメソッドって値を返してくるの? せっかく使い方覚えたから使おうと思ったらList<T>の編集のしかたがわからん・・・ Dim Kotae As Tekito = List<Tekito>.Find(AddressOf sagase) で検索結果とって(ここまでは上手くいってる) Kotae.Youso = "修正なう" & Now.ToString ってやってもList<Tekito>の中身が修正されてない 参照返してるんなら修正できるはずだよな?
602 :
601 :2013/10/15(火) 10:26:56.76
勘違いだった デバッグプリントミスってただけでちゃんと修正できてた
参考までに メソッドの返値は値しか返さない Kotaeは(TekitoがClassであれば)参照型の値を指す
よそのアプリケーションに行っているキーボードフォーカスを取り戻したい イベントが発生したらキーボードフォーカスが自アプリになるようにする方法って何かない? フォームをActivateしてみたけど帰ってこないよー><
>>605 GetForegroundWindowでアクティブウィンドハンドルを取得して、
GetWindowThreadProcessIdでそのウィンドウが属するスレッドのIDを取得して、
AttachThreadInputでそのスレッドにアタッチして、
SetForegroundWindowで自アプリのウィンドウを最前面にして、
AttachThreadInputでデタッチしておわり。
>>606 AttachThreadInputでググって見つけたコード貼り付けたらうまくいきました!
ありがとう
正規の画面にパスワード打とうとしたら、知らない違うアプリに入力させられてました、ってか 恐ろしいアプリつくるなぁ
フォーカス移動してもバレないように出来るのか?
610 :
デフォルトの名無しさん :2013/10/21(月) 00:31:15.49
お世話になります。初心者です。 Dim RECV_bytesA() As Byte Dim RECV_bytesB() As Byte RECV_bytesA = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("あ") RECV_bytesB = System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("い") この二つのバイト型をつなげて、STRING型の変数に"あい"と代入したいのですが どのようにすればよいのでしょうか。 よろしくお願いします。
Dim enc As Encoding = Encoding.GetEncoding("Shift_JIS") enc.GetBytes(RECV_bytesA) & enc.GetBytes(RECV_bytesB)
>>610 配列を連結して文字列に戻すか、文字列に戻して連結するか
まあ、やりたいのは文字列とか関係なく配列の連結だろ
純粋な配列を連結するようなものはなさそうだから、自分で要素をコピーするとかLinqのConcat使うとか
ググればいっぱいやり方出てくるぞ
>>611 GetBytesじゃなくてGetStringじゃないのか?
613 :
610 :2013/10/21(月) 02:23:33.51
結局 BitConverter.ToString(RECV_bytesA) で文字列にしてから連結し、改めてByteに戻しました。 今さわっているのが、Windows Compact 7 用の Frameworkのせいか、微妙にサンプルが動かないものがあって お聞きしました。 ありがとうございました。
普通に考えれば System.Text.Encoding.GetEncoding("SHIFT-JIS").GetBytes("あ" & "い") で良いわけだが 文字列にして結合する(そしてまたバイト列にする)にしても、 なぜEncodingつかってバイト配列にしてるのにEncodingで文字列に戻さないのか 特定のエンコーディングで表現できない文字とかどうする気なのかとか まあ、俺の知った事ではないが
615 :
デフォルトの名無しさん :2013/10/21(月) 11:15:00.62
VB2010 .net framework4.0 で開発をしています。 datagridviewで特定のセルのみ、型変更したいです。 目的は、下記の例でいうと、 入金有無(行2,列1)の箇所を、DataGridViewCheckBoxColumnにし、 check=falseの場合は、列2をReadOnlyにするなど処理を行いたいのですが、 特定のセル(入金有無)の型を変更する方法がわかりません。 行列は固定(全てDataGridViewTextBoxColumn) 行1 請求残高 300 行2 入金有無 100 行3 合計 200 説明のあるサイトへの誘導、もしくは、検索用語などお願いできませんでしょうか。
サードパーティのコンポーネントを買いましょう
データグリッドくらい自作しよう
DataGridViewCheckBoxColumn, DataGridViewCheckBoxCellをそれぞれ継承して セルが特定の状態のときチェックボックスを表示するようにするとか
WPF+VBで通知アイコンやりたくて調べても調べても返り討ちに 遭う俺を何とかしてくれ。 C++やるのは負けだと思ってる。
System.Windows.Forms.dllを参照に追加してデザイナじゃなくて自前でNotifyIconをいじるだけだろ?
その簡単な説明の背後にどんだけの経験を隠してやがる?
サルにも分かる説明をしてくれ。
ウキッウッキッキーウキウキウキッウキウキッキー?
間違って最初にWPFから始めて、目が慣れた後でフォームやるとデザインが 汚く見えるんだよな。フォントもメイリオでなくUIゴシック標準だし。 失敗したわ。
IconをセットしないといけないからSystem.Drawing.dllも参照に追加しないとな
フォームでやるならサルでも出来る。サンプルが幾らでもあるからな。 プログラムはコピペでやるものと勘違いしている怠惰な初心者には しかしそれは通用しないんだ。
System.Windows.Forms.dllを参照に追加したくないなら P/Invokeするだけだわな Shell_NotifyIconとNOTIFYICONDATAでぐぐれ >C++やるのは負けだと思ってる なんてカッコイイこと言うくらいならできんだろ? あん? System.Drawing.dllも参照に追加したくないならHICONの扱いも自前でやらなくちゃな
なーんだw 結局だれも教えれねーんじゃんw
追加したくないとか誰も言ってなくね?
NumericUpDownの上下の矢印って、小さすぎるので押しづらい。 二つの矢印ボタンを横に2個並べて表示するなんて 出来ないのかな? [ 数字][↑][↓] こんな感じに。
自 分 で つ く れ
TextBoxでEnter押下時に改行させない方法が分からなくて困っています Private Sub Text1_KeyDown(ByVal sender As Object, ByVal e As KeyEventArgs) _ Handles TextBox1.KeyDown If e.KeyCode = Keys.Enter Then Return End If Return End Sub このような感じに考えたのですが上手く行きません どなたか助言をお願いします。
Multilineやめる KeyPressでvbCrをHandledすればいいよ
型付データセットを使ってるんだけど、DBNullの項目を引数で使うとExceptionを発生させない方法ってないですかね? String型ならNullValueいじってなんとかできるけど、Numberとかは、無理なのかね
何の引数に何を使うと何の例外がでるのかちゃんと書けよ
formのloadが完了するまでイベントを全部停止するような ことは出来ませんか? というのは、formがnewで作られる時に formの上に載っているcheckboxやnumericalupdown などのchangeイベントが発生して、それらの関数に飛ぶんですが、 それを避けたいのです。 formのloadが完了したらそういうイベントハンドラ関数を 有効化したいんですが。
各イベントでフラグ見てれば Changedが発生したぐらいで問題になる構成を見直した方が
Handles以降全削除してLoad時にAddHandlerすれば? 初期化中フラグ用意して該当のイベントの先頭で確認するという手もあるにはあるが
>>638 ,639
やっぱりフラグ使うしかないのかな。
イベントを停止できれば一番簡単なのですが。
皆さんこういう場合どうしています?
だから既に書いてあるじゃんw Formがロード済みかどうかを表すプロパティを作ってそれを参照するか、 またはHandlesを使わずにイベントの紐付けをコードでやるかだよ
642 :
639 :2013/11/02(土) 16:39:13.15
>>640 イベント数によるな
1〜2個程度ならフラグでやるかもね
基本AddHandler使うと思う
元質問関係ないけど Handles のイベントハンドラーの結びつけってどの段階で行われてるんだろ C#とか実行時に全部AddHandlerする形のはずだが コンパイル段階で終わってるなら、AddHandlerとかやるより速度的に有利?
コンパイル時には結びつけるべきインスタンスは存在してねえよ
>>643 HandlesはAddHandlerのシンタクスシュガーでしかないんで
プログラマがコードを記述するのは簡単になるけど
処理速度が向上するようなもんじゃないよ。
コンパイル時にコンパイラがHandlesをAddHandlerに書き換えてるだけ。
それってどのタイミングでやってるんだろうな どうせInitializeComponentでコントロールに値セットしてイベント発生してるんだろうから そのタイミングをコントロール出来れば良いんじゃないかと思うんだが
WithEventsなフィールドは実はプロパティで setterでAddHandlerしてるんだったはず
それってそのプロパティにセットされたときに そのオブジェクトに対応するHandles句すべて検索してAddHandlerしてるって事? それだとそっちの方がパフォーマンス的には悪そうだな まあ、誤差程度の差だろうしハンドルの対応を動的に変更する必要が無いなら Handles句のほうがすっきりしてて俺は好きだが
>>650 いや別のオブジェクトがセットされるときに前のからは登録解除するから
検索する必要はない
とにかく全イベントをdisable、enableするみたいな 事が出来るとありがたい。無理かな。
そういう発想VVBerっぽい
ボタンを押した時の処理をコードから実行させたいときに 当然のようにボタンのクリックイベントを発生させようとするのがVBerだからね
いや、subなりfunctionに分けるでしょ
フォームを開くかどうか判断するのは開こうとしてるフォームのLoadイベントで 配列のソートはDataSetで これがVBerやで
>>646 コントロールにはイベントが発生しない状態があるんでInitializeComponentで色々弄っても平気なの
>>654 そりゃVBってそういうもんだしな
きっちり作る場合はVB使うなって話で
>>656 そもそも配列を使わないのでソートとかも無い
FlexGridのソート機能は知ってる
そんなのをVB.NETにコンバートすると
>>637 みたいな問題がてんこ盛りになるのよね
>>660 ごめんBeginInit/EndInitがそういうものだと思ってたんだけど、イベント発生するわw
となるとイベント割り当ての前にプロパティ設定してるから発生しないってだけだね
VBer脳ばっか
そりゃあVBスレだもの
イベントハンドラにSQLは基本ですよね
顧客は綺麗なソースを求めているんじゃない 動くアプリケーションを求めているんだ
ポエマーきもっ
綺麗なソースて個人レベルじゃ自己満足だよね 数年後に自分で書いたコードを解読する手間を考えなければw
TextboxやComboboxをカスタマイズして自作の コントロールを作りたいのですが、その場合 WndProcをOverrideするのとOnPaintなどを Overrideするのとで何か違いがありますか? どっちの方法でも良いですか?何か注意事項 などあれば教えて下さい。
TextBoxやComboBoxの描画はカスタマイズできない WndProcなら出来るかもしれんが未定義動作だ
漏れわマイクロソフトを信じてVB.NETを勉強したが スマホわJAVAだったからまいったよ
似たようなもんだろ
CとVBとLISP出来れば大抵の言語は出来る
本当にVB.NETを理解して正しく使えているのなら、言語に関してはJavaで新たに学ぶべきことは何もない つまりお前はVB.NETを理解していない
VB6で作ったCOMコンポーネントをVB.NETに移植する拷問を受けてるんだけど聞いていいかな アセンブリのGUIDは元になったCOMコンポーネントのGUIDをそのまま使った方が良いのか?悪いのか? 出来ればだけどもっともらしい理由を添えてくれたら嬉しい
そのコンポーネントを使ってるアプリに変更を要求するようなら GUID変えたほうがいいし、アプリ側はそのままでおkにしたいなら GUID変えないほうがいいし
バージョンごとにCLSIDつけれないの? HKEY_CLASSES_ROOT\KusoApuri ← VB6のAppIDとする HKEY_CLASSES_ROOT\KusoApuri.1 ← VB.NETのAppID にして……ってCOMのバージョン管理の基本じゃね? VB6なんかと共存する気がないというなら上書きしちゃえば
Form1のButton1を押すと、Form2が別プロセスで起動するようにしたいので、 Process.Start("From2.exe")で出来たのですが、この時にいくつかの パラメータを渡したいのですがどうしたら良いでしょうか? あるいは、Process.Startを使う以外に良い方法はありますか?
まさかコマンドライン引数を知らないとか?
プロセス間通信でググれと言ってみる
>コマンドライン引数 コメントありがとうございました。 さっそく調べて試したところ、文字列なら渡せたのですが、 もっとたくさんのデータを渡す場合は一般的にどうするのでしょうか? たとえば、構造体の中身全部とか、配列の中身を全部とか 渡したいのですが。よろしくお願いします。
標準入力使うとかWCF使うとか
根本的な疑問があるんだが ホントに別プロセスでフォーム起動させる必要があるのか?
業務だとバカばっかりだから、スッパリと分けちゃったほうが破綻しにくいのは確かだよ COBOLの頃からの伝統的なやり方だ
いや、それはリソースを一手に管理するDCがあるから出来るわけで データ引き渡しどうしようとか言ってるレベルの人間が設計してうまくいくわけないと思うが
>>683-686 みなさんコメントありがとうございます。
もともとはForm1だけだったのですが、Form1のプロセスで数分かかる計算させると
Form1が操作できなくなるので、別プロセスで計算させるのが目的です。
Form2はCancelボタンなど配置する予定です。とりあえず
データの受け渡しは、小さなものは引数で、大きなデータはファイルでやってみます。
そういうのはスレッドでやれ
.NETじゃないVBならActiveXのexe作って別プロセスでやってたパターンだが VB.NETならそれ別スレッドでやるのが妥当だと思われ
690 :
デフォルトの名無しさん :2013/11/10(日) 11:01:21.07
bgworker使おうぜ
んなもん使うな Task使え
生スレッド使え
VBerに刃物を握らせちゃいけません!
Formアプリはスレッド使えないだろ STAThreadだからな
Timerイベントで少しずつやるんだ
>>679 >Process.Startを使う以外に良い方法はありますか?
全部一個のプロジェクトにするか、Form1のプロジェクトからForm2のexeかプロジェクトに参照設定して
Form1からForm2のインスタンス生成して表示するなりなんなり
>>696 サードのコンポーネントで問題になる場合があるみたい
強引だけどこんな感じ Imports System.Threading Imports System.Windows.Forms Module Program <STAThreadAttribute> Sub Main() Dim th = new Thread(new ThreadStart( Sub() Application.Run(new Form() With { .Text = "Form2" }))) th.SetApartmentState(ApartmentState.STA) th.Start() Application.Run(new Form() With { .Text = "Form1" }) End Sub End Module
>>698 アパートメントの設定はスレッド単位だから、
STAが必要なら新しくつくるスレッドのアパートメント設定すればいいよ
>>699 はそれをやってる
これがVB脳か 膿んでるな
>>701 それってもしかして、Control.BeginInvokeが必要なケースじゃね?
STA/MTAとは別の話だろ。
スレッドなんか使うなよ バグを生産するだけ 実行時の効率より開発効率を重視しなさい
>>698 使える事と、正しく使わないと問題が発生することは矛盾しないぞ
文書種別がBugだから「使えない」のだろう
コントロールパネルの「デバイスとプリンター」に表示される プリンターのアイコンを「SHGetFileInfo」を使って取得したのですが、 「通常使うプリンター」に設定すると付くチェックマークまで付きます。 このチェックマークのないアイコンを取得する方法があるでしょうか?
どうやってんのか知らんが SHGFI_SYSICONINDEXでシステムイメージリスト内のインデックスとって ImageList系API使えばどうよ
710 :
デフォルトの名無しさん :2013/11/14(木) 16:48:01.89
現在、各サブ画面はDLL化され、メニュー.EXEから呼ばれるようなシステムの改修をしいてます 諸事情でまだ有償ツールの開発ツール(帳票や画面のグリッド関連)に関してはインストールしていません だからか、各機能すべてビルド時に「LC.EXEはコード-1を伴って終了しました」とエラーとなってしまいます その後license.licxをプロジェクトから除外しビルドは正常完了しました しかし、生成したメニュー.EXEを起動すると「適切なlicenseが与えられていない」とエラーが出て、画面起動できません 有償ツールのDLLがあれば、開発ツールのインストールをしなくてもビルド出来ると思っていたのですが、やはり無理でしょうか?
その有償ツールの販売元に聞けよ
>>710 強いるなよw
LC.exeはライセンスコンパイラ
licxでライセンス有るよって宣言して、ビルド時、
その製品固有の方法で正規購入者かどうかチェックされ、OKならアセンブリにライセンスが付与される。
実行時はそのライセンスが検証され問題あればエラー。
>>711 すみません…
まったくその通りなのですが、色々と事情がありましてorz
>>712 ホワアァア!やはり無理なのですね
回答頂き、ありがとうございました
上司に掛け合ってツール買ってもらいます…
試用版あるでしょ?
Backgroundworkerの RunWorkerCompleted イベントって、メインのスレッドから 実行されるのでしょうか?それともBackgroundworkerのスレッドから実行 されるのでしょか?
716 :
715 :2013/11/17(日) 04:13:48.93
>>715 表現がおかしかったので訂正します。質問は、
Backgroundworkerの RunWorkerCompleted イベントハンドラ関数内で実行したコマンドは、
メインのスレッドから 実行されるのでしょうか?
それともBackgroundworkerのスレッドから実行されるのでしょか?
RunWorkerCompletedやProgressChangedは メインスレッドがGUIスレッドならメインスレッドで動作する。 そうでないならDoWorkと同じバックグラウンドスレッドで動作する。
試してみればすぐ分かることやんな?
試してわかることじゃないな
無知です。 Static num As Integer ↑のような変数宣言ってC#では無いの?
>>721 無い
Staticってキーワードは意味が違う
724 :
デフォルトの名無しさん :2013/12/07(土) 00:05:48.76
配列の中身を順番に見ていって中身に特定の値があるかどうかみたいんですが dim test = new String() {"hoge", "fuga", "piyo"} If (from t in test where t == "piyo").count > 0 then end if こんなのを書こうとしたらコンパイル通りませんでした・・・・ rubyのany?みたいなのはないのでしょうか
これは……… ggrksしかなかろう
726 :
724 :2013/12/07(土) 01:11:34.77
いい忘れましたが、for eachで書くのは知っていますが もっといい方法があるか知りたいのです dim b = false for each t in tests if t = 'piyo' then b = true break end if next とか
728 :
724 :2013/12/07(土) 01:27:35.74
>>727 1年前までC#やっていて今年いきなりVBやらされたんです
729 :
724 :2013/12/07(土) 01:35:17.24
すいません ググったらありました LINQ(ienumerable)で探していたんですが、それ以前にArrayのクラスメソッドだったんですね
C#やってたんなら、C#で書いた場合のコードを書けばよかったんじゃね
CountよりAnyの方がいいよ
Usingって使わなくてもいいんでしょ?
AnyとAllの違いってなんなんだろな
Anyは条件に合致する行が1つでもあればtrue Allは条件に合致する行が全てならtrue Anyは1行目で合致すればそこで終わる分速いはず
Anyはexistsみたいなもんね
containsはないの?
あるじゃん
Process1.Start()を使ってEXCEL.EXEを非表示の状態で起動することは 出来ないでしょうか?
COM使って起動すればデフォルト非表示だけど、それじゃダメですか
COMは死滅させるべきなので利用しない方がいいです
Win8ストアアプリはCOMベースなんですが
COMが分からないアホなオレ、、、orz 勝手に想像すると、フォームクラス以上に偉いクラスな気がする。 ググッて勉強してみるか、、、、
旧式のNET Frameworkみたいだね。
Webブラウザーコントロールで navigateメソッドをループしてもページが切り替わりません。 ループから出たときに初めて切り替わります。 ループないで切り替わるようにしたいんですが解決策をキボンヌ(´・ω・`)
漏れのbotで俳諧するプログラムでは、こんな感じのコード書いてるけど、もっと良い方法もあるかもね。 WebBrowser1.Document.GetElementsByTagName("A").Item(21).InvokeMember("Click") 'サイトのリンクをクリック Application.DoEvents() '「命令されたことをすぐやれ」という命令 コレでウェブブラウザーを即時表示させる。 OpenWebWait() '読み込み終わりを待つ '2秒待機して読み込み終わりかを判断するファンクション Public Function OpenWebWait() As Boolean Try '2秒間ほど待機 System.Threading.Thread.Sleep(2000) '2秒間 '読み込み完了まで待つ Do While (WebBrowser1.IsBusy OrElse _ WebBrowser1.ReadyState <> WebBrowserReadyState.Complete) '無処理 System.Windows.Forms.Application.DoEvents() System.Threading.Thread.Sleep(100) Loop Return True Catch ex As Exception Return False End Try End Function
>>745 745さんありがとう
参考にさせてもらいます!
745さんサンクス!! ばっちりできました
それはなにより^^
750 :
デフォルトの名無しさん :2013/12/18(水) 12:20:06.85
Oracleを利用するアプリケーションを開発する場合、ODPが使えない環境で、これから開発しようとする時には、oo4oとADOどちらを利用するのがいいですか?
ウェブサービス
どちらも過去の技術です いつサポートが切れるかわからないので避けた方が良いでしょうね
OCI
OLE DBも切り捨てだし、ODBC一択だな
切り捨てられるのはodbcって何処かで読んだ
VBでLongの下位32ビットのビットイメージをそのままIntegerの変数にコピーする 一番簡単な方法ってどんなのがある? オーバーフローチェックをOffにする以外で。
BitConverter.GetBytesからBitConverter.ToInt32とか
やっぱりそれかね。 なんかまどろっこしいな。 もう少し直接的な方法がないものかと思うんだけど。 これだけのために共用体作るのもあほらしいし。
負の数をAndでマスクしようとするとオーバーフローだからどうしようもないだろうな VB内の演算だけでやるんなら符号によって分岐して計算するしかないんじゃね
signed->unsignedのキャストがダメなら せめてJavaみたいな論理右シフトがあれば何とかなるのにな せっかく一通りのビット演算子があるのにほとんど使い物にならん
761 :
760 :2013/12/20(金) 00:25:11.98
いやこれでいいのか CType(((x << 32) >> 32), Int32)
そもそもLongで持ってるのが設計ミスじゃないのかと
設計ミスって.NETの世界で「設計」するのなら最初からそんな作りにするわけがないでしょ
ちょっと何言ってるのか分からない
意訳すると 人生設計ミスって.Netで設計するような職についたのならいっそ死ねばよかった ってところかな
vb.netのソースコードで感動するような美しいソースコード 何処かにありませんか? 変数名の付け方や大文字小文字の 使い方など参考にしたいんです。
C#のオープンソースプロジェクトを読むのがおすすめ ASP.NET MVC なんかMS謹製だし今風で綺麗だよ そしてC#と同じように書くのがVB.NETの正しい使い方
768 :
デフォルトの名無しさん :2013/12/21(土) 12:07:03.97
>>766 vb.netじゃないけど、
x = 1 - x
これでビットもしくはフラグ反転
俺が知ってる最も美しいコードの一つ。
VBだとオーバーフローするな
>>764-765 馬鹿だろお前。
この手のビットフィールド的な処理はアンマネージドコードと連携する時に必要になるに決まってる
で、アンマネージドなコードでは何ビットでそのデータもってるの? そもそもなんでマネージドな世界でビット長変更してるの?
Nbitの上位と下位で別の情報格納するとかよくあるよね
ビットフィールドなら最初からバイト(配列)で持てば良いのに
ビットフィールドに符号付き数値使うやつもどうかと思うが
>>767 情報ありがとうございます。早速見てみます。
ちなみに、『今風』っていうのは、具体的にどんな書き方を指すんでしょうか?
・もちろん完璧なオブジェクト指向 ・ユニットテストを非常に重視 ・asyncとかLINQとかラムダとか最近の機能も適切に利用 ・MS以外の他のOSSも活用 簡単に言えば全くVBっぽくない書き方ってことだな
それVBである必要も無いよな
HEX()とかVAL()とかの互換関数を使わないって程度かなぁ〜
ユニットテストのコードを読むのってプログラミングの素養を磨くにはいいと思う MSのコードはかなりきちんとテストしてるしテストしやすいように設計されてる
ユニットテストがしやすいクラスは自然と使いやすいクラスになるからね
WebBrowserの通信内容(生パケットまたはHTTPリクエスト)をTextBoxに書き出す方法は無いですか?
普通にパケットキャプチヤしろよ
そもそも普通は通信内容に関知しなくていいからブラウザのコントロール使うわけだが
>>781 > WebBrowserの通信内容(生パケットまたはHTTPリクエスト)をTextBoxに書き出す方法は無いですか?
httpfox
785 :
デフォルトの名無しさん :2013/12/25(水) 00:29:05.78
メリークリスマス
うるさい働け
MDIの子フォーム1にあるButton1をクリックすると子フォーム2にあるTextBox1に文字列を代入したいのですが上手くできません 子フォーム1がForm1で子フォーム2がForm2だとして Button1のクリックイベントに Form2.TextBox1.Text = "test" と書いたのですがTextBox1には表示されません 試しにForm1にButton2を追加して MessageBox.Show(Form2.TextBox1.Text) とやると書かれていないはずなのに test が表示されます どのようにしたらTextBox1に文字が表示されますか?
>>787 MDI自体をupdateかrefreshしたらどう?
MDI自体というのは具体的に何のことですか?
>>787 子フォームを
Dim f As New Form2()
f.Show()
のように New して表示してるなら、
f.TextBox1とForm2.TextBox1は別物。
f.TextBox1.Text = "test" ってしないと変わらない。
VB相変わらずだなぁ その仕様は誰かを幸せにできたのか?
結局最低限のオブジェクト指向を理解していないと使えないのに 中途半端にデフォルトインスタンスなんて糞を導入したからおかしくなった
VB.NET2013の勉強をはじめようと思います 入門サイトを教えてください
WindowsフォームとWPF どちらを使うべきですか?
デフォルトインスタンスはいったん廃止して復活するという迷走ぶりだったからなぁ
>>795 どっちが優れてるかはともかく、VBでWPF使う奴なんかいない
そもそも先に進めないからかこそVBに固執してるんだから
>>794 C#の入門サイトや本読んでC#から入るのがおすすめ
その上で必要ならVBに乗り換えるのがベスト
VBから入ると頭悪くなる
VBの解説サイト(C#を扱ってないVB専門のサイト)って 書いてる本人もよく分かってなかったりする 特にオブジェクト指向の学習なんて全く望めない
.NETのライブラリでVB6の構文解析するやつありませんか? 出来ればタダのライブラリがいいです
知らんけど多分パーサジェネレータにBNF記法で表現したVB6構文を与えてパーサを生成する流れかと
ANTLRでも使えば ランタイムは.NET版あるし文法ファイルも探せばどっかに転がってるでしょ
勿論、俺は、C#なんか学ばず、VB.NETから入門しますた^^
フォームをダブルクリックして自動生成される Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load End Sub の部分って、不要になったらエディタで削除してしまってもかまいませんか? それとも削除する為に必要な特別な手順などあるでしょうか?
意味が解らん自由にやりゃ良いじゃねーか そもそも不要なダブルクリックとかするなよとは思うが
大体Loadって不要にならないよな
BackgroundWorkerのProgressChangedって ProgressChangedの処理が終わる前に新しいReportProgressで呼ばれた場合どうなるの? ProgressChangedの処理が終了してから逐次実行?
そだよ
>>797 俺使ってるけど、何を根拠に言ってんの?
>>811 ネットで調べるときほとんどC#のコードしかないのは自分でよくわかってるだろ?
無理しなくていいんだぞ
>>813 だから誰も使ってないって何を根拠に言ってんの?
ググれはWPF+VB.NETのコードなんか当たり前に出てくるけど
C#とVBの脳内変換くらいはタイムラグ無しに出来ないと辛いだろう 別にネットの文献がC#だけでも困らないよ普通
まさか
>>814 はVB専の情報源だけでWPF使ってるんだろうか
むしろ凄いと思うわ
>>814 どっちが優れてるかはともかく、VBでWPF使う奴なんか殆どいない
こうすれば良かったのか?
自然言語なんだから空気や行間読んで欲しい
その前に根拠は書いてあるじゃん
>そもそも先に進めないからかこそVBに固執してるんだから
思い込みだけど否定は出来んな
>>815-817 のヤツはC#だけしか使えないのか
仕事だったらVBごりってくる客もいるしどっちも使うわ、どっちも使った上で言うけど差なんかねぇよ
C#に夢見過ぎてんじゃねぇの?
「VB6土方の受け皿がVB.Netだからそういった人達がWPFってのは考えにくいよね」 一般論としては正解だと思う その実、C#とVBは本質的には同じだから、プログラマならどちらでもいけるだろう というのも正しい はい論破
WPFってVBと微妙に相性がよくないのは確かだったような... 俺はカーリーブラケットでブロックを表す書き方が好きじゃないからVBには頑張って欲しかったんだが、 2005のジェネリックとかまでは我慢して使ってたけど、2008のラムダが決定的だけど、 最近では何を書くにも冗長なVBの悪いところが目立つ間違った方向に進歩しちゃった印象が強いな。 VB6からのマイグレーションという役割はもう十分果たしたし、初心者にとって C#より優しいかと言えばそれもない(むしろレガシーを引きずってる分カオスで分かりにくい) わけで、もうVBは打ち切りでもいいかもと思ってる。
一時期VB側はラムダに制限があったけど2010以降(.NET4以降か)は同じように書ける とはいえ、VBのラムダ式って分かりやすいけど・・・ソースの見栄え悪いw MS的には差をなくそうとがんばってるような気がしなくもない
型推論とか理解してない奴が脊髄反射してレビューで絶対叩かれるよな Dim使うんじゃなくてAutoとかキーワード変えればよかったのに
形推論は邪悪だろ Objectと大差ない 可読性最悪になるし解析もやりにくくなる
LINQとかラムダとか使ってたら型推論使わないとそれこそノイズだらけで意味不明なコードになるわ まあ、だからこそVBには不要とも言えるわけだが...
型推論はソース読む分にはObjectと大差ないけど 書く分には推論された型による入力支援とか型チェックとか大きな差があるぞ 俺は型推論専用の型を作るべきだったんじゃないかと思うが、フレームワークの型との整合性を考えてそうしてないのかな
Grepとかもやりにくい 保守性最悪になるよ
C#とVB.NETの翻訳ツールもあるし大して変わらんのだろ
VBはもう一度バカでもチョンでも楽々プログラミングな言語に戻るべき
すいません。VBの入門サイトを教えてください C#じゃないやつでお願いします
VB.NET2013のプロジェクトの中に、 拡張子 .sdf というファイルが知らないうちに出てきたんですが、 これはなんでしょうか? 消しても勝手に作られます。
>>831 SQL Server Compact Edition のデータファイルらしいぞ
>>835 45MBもあるんですが、消しても消しても作られます。
何か設定をいじった記憶も無いし、出てくる理由が分からなくて、
困っています。
VB.NETの単純なFormアプリなのでSQLサーバーなんか、全く
関係ありません。困りました。
インテリセンス用のDBじゃなかったかそれ C++のやつとか平気で100MB超えるぞ そのファイル生成しないってのはたぶんできない
>>837 コメントありがとうございます。
その.sdfファイルは、ある日突然作られるようになったのです。
私が何かの設定を知らないうちに有効にしてしまったのかもしれません。
困りました。
ほっとけばいいと思うんだが、何に困ってるのさ
>>832 Collection.RemoveAll(Function(a) a=True)
でいいやん
841 :
832 :2013/12/31(火) 02:17:15.44
解決しました List Of Tってめっちゃ便利ですね
やっぱり、YAHooo知恵遅れはクズだなw
>>840 みたいなのはVBerには難しいだろうから仕方ない
RemoveAllがDataTableでも使えたらいいのにな
できるよ
846 :
デフォルトの名無しさん :2014/01/04(土) 03:28:38.39
VB.NETのソースをたくさん読んで勉強したいです どこを探せばいいですか?
MSDNに腐る程有るだろ つかVSはまずMSDN見ろよ ググるのはその後だ
848 :
某社内SE :2014/01/04(土) 20:29:56.40
基本的な質問ですみません。 VB.netではaccessでいうサブフォームがないのですが、 カスタムコントロールというものでやるのでしょうか? やりたいことは、一つのもととなるものを作って継承したいのですが。
よくわからないけど、ユーザーコントロールでいいと思う。
必要な箇所を抜き出してよ いちいちリンクとか開きたくない
>>850 DoSomething内の話ね
arg1の参照先の内容を変更するのと、
arg1の参照先そのものを変更するのでは違うんだよ
例えると byvalは家を渡す byrefは住所を渡す そんなもんさ
>>850 参照型の変数(ref1)には、データが直接格納されず、データへの参照情報(実体のメモリ位置)が格納される。
それをByValで渡すと「データへの参照情報」のコピーが変数arg1に渡されることになる。
コピーしたものなので参照先を「バナナ」に書き換えても元のref1の参照先は変わらない。
図にするとこんな感じ
ttp://imgur.com/vlsaecd
855 :
某社内SE :2014/01/05(日) 04:45:09.26
849さんありがとう。 ユーザコントロールですか。
856 :
850 :2014/01/05(日) 11:30:41.15
みなさん、解説ありがとうございました。特に854さん、図解までして 頂きまして大変ありがとうございます。 朝からずっと図とソースコードを見比べながら考えていて、 8割くらい理解できたように思うのですが、 まだ完全には分かっていません。 DoSomethingの中で arg1 = New StringBuilder("バナナ") としても、呼び出し元のMain()には影響ないのに、 arg1.Append("!") でarg1に付けた『!』がどうしてMain()の中の『りんご』にくっ付くのでしょうか? ちなみに、StringBuilderではなくて、全部Stringで試してみたら、実行結果は、 StringBuilderの場合:りんご! / ぶどう Stringの場合: りんご / ぶどう となって『!』はりんごに付きません。だめだ分からない。
代入があるかどうか StringにAppendメソッドなんてないんだからStringで代用することはできないだろう
858 :
850 :2014/01/05(日) 11:44:51.58
>>857 >StringにAppendメソッドなんてないんだからStringで代用することはできないだろう
arg1 &= "!"
としてみました。
>>858 それは arg1 = arg1 & "!" と等価
この動作は、
1. 新しい文字列の領域を確保する
2. 1.で確保した場所にarg1をコピーし、続いてその後に"!"をコピーする
2. 1.で確保した領域の場所をarg1へ代入する
コピーして新しいのを作ってるだけなので、
もともとarg1に入っていた値(つまり元々のStringオブジェクトの場所)が指すStringオブジェクトには影響を及ぼさない
arg1.Append("!")の場合だと 1. Appendメソッドを呼び出す ただし、第一引数(隠し引数)にはarg1の値(つまりarg1が指すStringBuilderオブジェクトの場所)を渡し、 第二引数には文字列"!"の場所を渡す 2. Appendメソッドがarg1が指す場所を参照し、末尾に"!"を追加するようにその内容を変更する かな
VB2010で質問です ラジオボタン(8個)やチェックボックス(9個)上にフォーカスがある時にカーソルキーやスペースキーが押されると コントロールの選択状態が変わりますがこれを無効にしたいと思ってます ネット上でググると「KeyDownイベントを利用してKeyCodeを判定しe.HandledプロパティをTrueにする」 という方法が載ってたので Private Sub Controls_KeyDown(sender As System.Object, e As System.Windows.Forms.KeyEventArgs) Handles CheckBox1.KeyDown, _ CheckBox2.KeyDown, CheckBox3.KeyDown, CheckBox4.KeyDown, CheckBox5.KeyDown, CheckBox6.KeyDown, CheckBox7.KeyDown, _ CheckBox8.KeyDown, CheckBox9.KeyDown, RadioButton1.KeyDown, RadioButton2.KeyDown, RadioButton3.KeyDown, RadioButton4.KeyDown, _ RadioButton5.KeyDown, RadioButton6.KeyDown, RadioButton7.KeyDown, RadioButton8.KeyDown If (e.KeyCode = Keys.Down Or e.KeyCode = Keys.Up Or e.KeyCode = Keys.Right Or e.KeyCode = Keys.Left Or e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Space) Then e.Handled = True End If End Sub としてみたのですがうまくいきませんでした プロシージャを宣言した行にブレークポイントを設定後、デバッグしてチェックボックスをクリックした状態でスペースキーを押すとIfのところで実行が止まるので、 KeyDownイベントは発生するけれどキー入力が無効にされる前にチェックボックスのON/OFFが切り替わってるようです 一方でラジオボタンにフォーカスがある状態でカーソルキーを押した場合はブレークポイントで停止しないのでどうもKeyDownイベント自体が発生してない感じで ちょっとお手上げ状態です どうにかラジオボタンとチェックボックス上でのこれらのキー入力を無効にしたいので知恵を貸してもらえれば幸いです 長くなりましたがよろしくお願いします
逆にAutoCheckをFalseにしてクリックしたときに値が変更するようにイベントに書いたら?
うわぁ鬱陶しいUI FormのProcessDialogKeyをオーバーライドしてActiveControlが何か判断した上で 無効化したいときにTrue返すようにすれば良いけど うわぁ鬱陶しいUI
>>862-863 即レス感謝
AutoCheckをFalseにするのが簡単そうなのでちょっとやってみます
>うわぁ鬱陶しいUI
実際使ってみてキーボード操作でチェックボックスやラジオボタンを変更することはなかったので問題ないかなと
3次元空間で自機を操作するシミュレータで、カーソルキーもスペースキーも自機の操作で使い、チェックボックスと
ラジオボタンは視点変更や描画対象の選択に使うだけなので、自機を操作するたびに視点や描画対象が
コロコロ変わったりするのが鬱陶しかったので入力を無効にしたいと思った次第です
>>864 それならそもそも入力フォーカスを持たないようにするべきだろうね。
方法はCheckBoxを継承してコンストラクタかどこかでSetStyleを呼んでやるだけ。
866 :
864 :2014/01/05(日) 17:36:29.94
>>865 フォーカスを持たせないようにするのは最初に考えたのですが方法が分からなかったので挫折してました
ただ、チェックボックスについては
>>862 のやり方でうまくいったのですが、ラジオボタンはAutoCheckをFalseにすると
「複数の中から1つを選ぶ」という機能まで失われてしまってチェック状態の管理がいろいろとカオスになることが発覚
結局
>>865 のキーワードでググったところそのものずばりのやり方がヒットしたので、その方法でチェックボックスと
ラジオボタンを継承してフォーカスを受け付けないようにすることで解決できました
レスをくれた方々どうもサンクスでした
867 :
850 :2014/01/06(月) 12:26:24.50
>>859 ,860
たびたび詳しい説明ありがとうございました。
体調崩して休んでいました。
お礼遅くなりましてみすません。
StringとStringBuilderの場合での挙動のちがいも理解できました。
ありがとうございます。
868 :
デフォルトの名無しさん :2014/01/06(月) 22:56:34.85
VBメッセージボックスの「はい」「いいえ」などのボタンを、自分で指定したボタン名に変更できないでしょうか? やりたいことは、「変更内容を保存しますか?」という質問メッセージを表示して、 これから行うアクションを、例えば、「保存する」「保存しない」「キャンセル」などで表示したいです。
自分でダイアログを作ればいい
うむ。 これはアホな俺でもわかる。
すいません。ボタンをおした時、Textbox1.txtのURLを開くプログラムを作ってたんですが
System.Diagnostics.Process.Start("
http://url.com ")
↑編集前のモノ こっちは開く
System.Diagnostics.Process.Start(Textbox1.txt)
↑編集後のもの 開かない
これは何故でしょうか。ファイル名が指定されていないため、プロセスを開始できません。とメッセージが出ます。
Process.Startの行にブレークポイント貼って実行して、 該当行でブレークさせてTextbox1.txtとやらを確認してみれば
COMコンポーネントのデフォルトメンバを呼び出すVB.NETコードはどう書くの?
{{0,1},{2,3},{4,5},{6,7},{8,9},{10,11},{12,13},{14,15},{16,17},{18,19}} という文字列(String型)があってこれを Dim numbers(9, 1) As Integer に格納したいのですがどのようにすればいいでしょうか
日本語でおk
CSharpCodeProvider
コンパイルして実行すればいいよ
関数中で行いたいのですが
じゃあRegexで「{(\d+),(\d+)}」でも探せ
>>879 最初から関数の中でコンパイルするって言ってるんだが
だが
その程度なら一文字ずつ舐めるコードをゴリゴリ書けよ
C言語からやり直せ 今時の若者はjavaや.netを最初に学ぶから圧倒的に自力が足りない だからこんな簡単な問題も解くことが出来ない
ほれできたぞ Dim s As String = "{{0,1},{2,3},{4,5},{6,7},{8,9},{10,11},{12,13},{14,15},{16,17},{18,19}}" s = s.Replace("{", "").Replace("}", "") Dim numbers(9, 1) As Integer Dim i As Integer = 0 Dim j As Integer = 0 For Each a As String In s.Split(",") numbers(i, j) = a j += 1 If j > 1 Then j = 0 i += 1 End If Next
それ昔の俺だわ
パーサジェネレータ使えば
>>884 そもそも、こんな問題を解く必要がないんだよ
APIのひとつでも覚えたほうが、もしくはエクセルを正方形にする方法でも覚えたほうが役に立つ
>>887 サードパーティは使いたくないじゃん
.net fwに無いだろ?
>>888 >エクセルを正方形にする
この言い方をする人達に共通する面白い特徴が有るよね。
>>890 統計的に言ってるだよね?
母数はいかほど?
研ナオコ?
>>892 さん付けぐらいしなさいよ
仮に年上だとしても礼儀よ
>>890 全部俺じゃね?
俺ぐらいになると文章にオーラあるから
エクセルを正方形にしなくても文章みればすぐ俺だってわかるよ
24時間ずっとム板やマ板に張り付いてるし
エクセルの悪口はそこまでだ!
Enum に <Flags()> を付けるとビット・フィールドとして 扱えるということですが、例えば Public Enum myEnum A = &H0 B = &H1 C = &H2 End Enum とすると、<Flags()> を付けても付けなくても Dim x As Integer = myEnum.A Or myEnum.B のように計算できるのですが、<Flags()> を付けるのは何のためですか?
ToStringメソッドの挙動が変わる
さっそくのコメントありがとうごいます。 myEnum.A.ToString をdebug.printしてみたのですが、<Flags()>があっても無くても A と表示されます。挙動が変わらないんですが。 私何か勘違いしていますか?
>>898 Orしろよ
何のためのフラグだと思ってるんだ
>>899 おはようございます。
今、さっそくOrしてみたのですが、
Dim x As Integer = myEnum.A Or myEnum.B
Debug.Print("x.ToString={0}", x.ToString)
を実行すると
x.ToString=1
と表示されます。<Flags()> が有っても無くても変わりません。
まだ<Flags()> の意味が分かりません。教えてください。
IntegerをToStringしたらそりゃ数値だろ あと0 Or 1は1つまりmyEnum.BになるからmyEnum.Aが出現する余地はない
>>901 ありがとうございます。0,1,2ではなく1,2,4にして以下のようにやってみたら
<Flags()> _
Public Enum myEnum
A = &H1
B = &H2
C = &H4
End Enum
Debug.Print("A Or B Or C={0}", myEnum.A Or myEnum.B Or myEnum.C)
A Or B Or C=A, B, C <--<Flags()>あり
A Or B Or C=7 <--<Flags()>なし
となりました。これで良いのでしょうか?
Enumでもう一つ教えてほしいのですが、与えられたEnumに対して、 i番目のメンバーの名前や値を取り出すにはどうすれば良いのでしょうか? 例えばmyEnum に対して、3番目の "C" やその値4を取り出したいのですが。
メンバに順番は定義されてない Type::GetFieldsで配列は取れるけどどういう順番で格納されるかは未定義 なんでそんなことしたいのか書けば代案を提案できるかもね
>>903 enumを配列のように使うのは正しくないのだけども・・・
dim strArray() as string = myEnum,getValues()
dim thirdStr as string = strArray(2)
dim thirdKeyVal as integer = [Enum].parse(myEnum,thirdStr)
>>905 正しい正しくないと言い出したらgetValueの大文字小文字が正しくないし
String()じゃなくて変数名の方に()付けて配列にしてるのも正しくない
getValuesなんてインスタンスメソッド存在しないからきっと拡張メソッドなんだろうなぁ
大文字小文字をいい加減にするのって生粋のVBer独特の習性だよな
>>908 ideが自動でメソッド名補完するからいいんだよ。
口ばかりの無能が。
Array型じゃない配列なんか無いぞ 変数名に()付けられるのは単なるシンタックスシュガーで、VB.NETに配列変数は無い
FlagsAttributeってEnum.Parseにも影響するんだな <Flags> Enum ABC XX = 0 : AA = 1 : BB = 2 : CC = 4 : DD = 8 End Enum Sub Main() Dim huga = CType(System.Enum.Parse(GetType(ABC), "AA, CC"), ABC) Console.WriteLine("{0:D} : {0}", huga) End Sub
Namespaceって、どういうふうに使ったらよいかよくわかりません。 Classで分けていればNamespaceで分ける必要があまり感じられないのですが、 一般に、どういう場面で使うのでしょうか?大規模な開発でしか使わないのでしょうか?
ある程度以上汎用性のあるライブラリ作るときには使うかな アプリケーション作るときはあまり気にしない
C#やVBはnamespaceとアセンブリが別の概念だから、 名前がかぶらないように分類しとく程度の意味しかないな。
真に受けない方がいいと思うけどねw 少なくとも開発が身内で閉じてる場合について言えば、 名前空間は名前のバッティングを防ぐためというより、ファイルシステムのディレクトリと同じように 型を意味論的に分類する目的で使う。 (だからC#ではcsファイルを新規作成した時、自動生成されるスケルトンの 名前空間はそのファイルの入っているフォルダの階層になる)
>>917 それはVSの機能であってC#の機能ではないんだが
意味的に分類してるからフォルダ構造にそうわけでもないし
フォルダ構造にそってるから意味的に分類されてるわけではない
意味論的に分類しようが何的に分類しようが好きにしたまえ
何言ってるのか意味がわからん
internalの範囲がnamaspaceじゃなくてアセンブリだしな javaメインの奴が迷ってた VBの場合、moduleをnamespaceに押し込める役割があるかな
VB.NETでもnamespaceの理解しているなら使った方が良いと思うけどな
>>920 internalじゃなくてVBはFriend・・・別に友達じゃないがな。
Dim objList As New List(Of Object) objList.Add("first") objList.Add("second") objList.Add("third") の時に、objListをString配列に変換したいのですが、 スマートな方法ありますか? objListがList(Of String)ならobjList.toArrayで出来たのですが List(Of Object)だとうまく行きません。
List(Of String)でいいじゃん
>>923 MSDNライブラリのList<T>のメンバー一覧見た?
それともまだ.NET2.0使ってるの?
objList.Cast(Of String)().ToArray()
みなさんありがとうございます。
>>925 >MSDNライブラリのList<T>のメンバー一覧見た?
ふだん調べるときはググッてサンプルコードを探すことが多いのですが、
MSDNの説明は難しいのであまり見ません。やはり皆さんは何か調べる時には
MSDNの説明をまず最初にチェックするのでしょうか?
>>926 ありがとうございました。無事出来ました。ところで
()
を取っても動いたのですが、この()はどういう意味があるのでしょか?
追加 .NET3.5使っています。
List(Of Object)使ってるってことはString以外のものが入ることが想定されてるんだよな String以外が入ってたらどうするんだろう
片っ端からToStringで
型名が羅列されるっていう落ち
例外が発生しなければ良しってか
MSDNが難しいって言ってる人の作るものだから……
Try Catch End Try というのは、安全のためには全ての関数に入れておくべきでしょうか? 例外が出そうにない関数にまでTry〜Catchを入れると何か弊害はありますか?
「出そうにない」レベルの認識しかできてないならとりあえず入れとけ。 弊害とか気にするのはもっとまともに使えるようになってからでいい
Mainに入れときゃ良いんじゃね 特殊な例外以外はキャッチできるでしょ フォーム開始にしてるような奴はしらん
>>934 例外は回復可能なところでキャッチが基本
対処できないならキャッチしてはいけない
On Error Resume Next が最強ね! これ考えだしたやつをロ兄いたい 更にVB.NETでも使えるようにしたやつもロ兄いたい
常に現在のスタックフレームが例外発生で吹っ飛ぶことを
考慮に入れて作ってあれば
>>937 でいいんだけど、VBだからなあ
CloseするのにUsingやFinally使ってないなんて普通だし、
とりあえずエラーが出ても継続したほうがまだマシかもしれない
どんなお馬鹿思考よそれ。 捕捉されない例外があればプログラムは強制終了されるのだからDisposeも糞もない。 というか例外という機構のそもそもの目的はこれなんですが。
>>940 例えば深いところの例外をフォームのイベントハンドラでキャッチすれば
エラーメッセージ出して処理続行できるでしょ
深いところのGUIと無関係な箇所でメッセージボックス出したりすると
汎用性が下がってしまう
適切に処理できる場所まで戻って回復できるのが例外の利点だよ
そのためには、例外に直接関知しないコードも例外安全でないといけない
>>941 何を言ってるのかよくわからないが、俺(940)は
>>939 がいわゆる「例外の握りつぶし」
を推奨するようなことを言ってるから、それは間違ってるよと指摘しただけ。
想定外のエクセプションはちゃんと上にあげてほしいね
>>942 例外安全って例外を無視するってことじゃないぞ?
>>940 が例外安全は無意味だと読めてしまうようなことを言ってるから、
それは間違ってるよと指摘しただけ。
上の方でキャッチして適切に回復するには、
その途中経路は例外が起こって突然終了しても問題が残ったままにならないようにしておく必要がある
何を言ってるのかさっぱり分からない。 これだけ会話が成立しない人も珍しいな
君がUsingやFinallyの意味を理解してないだけ
お前がな。 プログラムが終了してもリソースが解放されないとでも思ってるのかよ馬鹿だね
Sub A Try B() Catch ex As HogeException エラーメッセージ出す(ex) End Try Sub B アンマネージリソース確保() C() アンマネージリソース解放() なんで常にプログラムが強制終了する前提になってるの? これでCがHogeExceptionを投げたらリソースがリークしたまま続行してしまう だからBのリソース解放はFinallyでやる必要がある なんか難しいか?
何の話をしてるんだよ馬鹿か。 想定してない例外が発生した場合にそれを握りつぶしてよいかどうかって話をしてるんだけど。 想定してない例外を無理に補足してどうする。 そんなものは放置してプログラムが強制終了されるに任せるべき。 もちろんユーザーにその旨を通知するのは問題ないが、それ以上の処理は何もすべきでない。
>>941 はプログラム全体で想定してない回復不能な例外についての話をしていて
>>944 はプログラムのどこかでは回復可能だがその場では処理するべきでない例外についての話をしている
だから話が噛み合わない
951 :
950 :2014/01/25(土) 15:06:33.06
訂正
>>940 はプログラム全体で想定してない回復不能な例外についての話をしていて
ボタンクリックのハンドラまで上がってくれば
大抵の例外はエラーメッセージ出して続行しても本来問題ないはずだけどな
>>948 のコードみたいなことをしないできちんと作ってあればの話だけど
本当に最悪なのは呼び出し階層の深いところでのいいかげんな握り潰し
とりあえずTry〜Catch〜End Tryは呼び出しの最上位の関数の中に だけ入れておくようにします。 ありがとうございました。
まぁ、イベントのとこにとりあえず入れておくだけでいいよ
955 :
デフォルトの名無しさん :2014/01/26(日) 20:28:07.65
>>948 さすがhoge厨
低品質なコード晒す知恵遅れ
反省捕鯨団体こんなところにも出張してるのか
Dim a As String = "全角”,”" という文字列を代入したいのですが、うまく行きません。 どうしたら良いでしょうか?
基礎からやれ
Dim a As String = "全角"","""
vbは全角ダブルクオートも演算子なのか
バグっぽいお節介機能だよね。 1.1の頃から気になってたけど、たぶん今更もう直せないんだろう。
質問もうしわけない。教えてください。 業務でエクセル使ってカーブフィッティングして 多項式の係数をはじき出すようなVBAを使っていて それをVB.netに移植したいのだけど エクセルにあるようなグラフや解析の機能って VB.netにはあるでしょうか?それとも自作必須ですか?
グラフはMS公式のライブラリがある カーブフィッティングくらい自分で実装しろ
関連付けられたアプリを起動する方法で、終了まで待たないのはどういう方法なんでしょうか? Process.Start('ファイルパス') 上記だと、終了まで待機しないような記事もありますが、実行すると終了するまで待機してしまいます。
待たないよ? プロセス起こすのに時間掛かってるだけとかじゃない?
>>965 あぁっ!?ぬあんだと!
こちとら何回確認したと思ってんだ!!
って憤慨しつつもレス見たんで仕方なしに改めて再度確認したら待機していませんでした。。
ええ、まったく。
ありがとうございます。
ちょっと不愉快な気分になった^_^;
Dim Y As Double Y = 1.0 / X XがいくらよりしたになったらYは1.#infになりますか?
Select Caseを使うときにCase Elseを付けるかどうかでいつも迷います。 明らかにCase Elseの場合は起こらないときには省くべきかなと思いますが、 それが勘違いで、もし万一Case Elseの場合が起きるとバグの原因になりますし。 どうすべきでしょうか?
バグにはならんよ 以降のコードが対応できないだけだろう。
そんな程度のことで悩むぐらいなら、単純に最後のCaseをCaseElseにして自分をごまかしとけばいいんじゃねーの どの道勘違いしてたらバグで氏ぬことには変わらないんだから
Case Elseに合致する条件が起こるかどうかじゃなくて、起こったときにやりたい処理があるかどうか、ってだけの話なんだが やりたい処理があるなら書けばいいし、やりたい処理がないなら、Case Else書く必要はないだろ
>もし万一Case Elseの場合が起きるとバグの原因になりますし って書いてるんだから、Elseだったらバグ出さないためにはやりたくなくてもやらなきゃいけない処理があるんだろう多分
>>973 は?w
勘違いで起こるって書いてあるにゃんよ
そろそろエスパーが必要だな
Case Elseで throw new NotImplementedException("○○の値が××の時の処理は実装されていません。") みたいな例外を投げたら? Caseを書き忘れていた場合など予想していなかった状態になったら その場で処理を中断させたほうがいいと思う。
どうせそういう例外処理付けるのがめんどくさいとか、動作が重くなるかもとか思ってるんだろ
その場合は未実装の例外じゃないだろ アサートしろアサート 基本だろうが
誰でも答えれる事を、抽象的に質問されると 全員釣られるなw
>>978 アサートってデバッグビルドのときだけだろ?
あ
ね
も
Module Module1 Enum enum1 As Integer a = 1 b = 2 c = 3 End Enum Sub Main() Dim x As enum1 = 4 test(x) End Sub Sub test(ByVal x As enum1) Select Case x Case enum1.a '処理 a Case enum1.b '処理 b Case enum1.c '処理 c End Select End Sub End Module 例えばこういう場合、どうでしょうか? 予期していない4が来た場合に備えて、Case Elseを使って何かメッセージなど 出すべきでしょうか?
まだ言ってるのかよ。 そんなこと一般論でどうすべきなんて言えない。 ケースバイケースで自分の頭で何が最善か考えろよ馬鹿臭い。
同じモジュール(というかクラス)内で列挙型もメソッドも両方定義されてるなら
列挙型のメンバだけ弄ってメソッドの修正を忘れるというのはまあ無いだろうからどっちでもいいんじゃないの
大事なのは
>>987 の言ってるように目的を理解して頭で考えることだよ
まあ「〜するべき」という話でいうなら
クラスの下に列挙型をネストしてクラス外に見せるのはそもそもMSのルールに違反するんだが
引数のNULLチェックと同じテーマだな。 責任の境界線がどこにあるかで決まる。 sub testがライブラリの外から使うような代物ならチェックしてしかるべきだろうし、 自分しか使わんとかモジュールの中で完結するようならいちいちチェックはしない。 開発途中ならassertはよい方法。
ほ
も
げ
ぶ
た
ろ
う
ん
998 :
デフォルトの名無しさん :2014/02/02(日) 18:03:44.69
とんでもなく初心者なんですが、ご質問があります。 プログラムを上げた場合、ご教示願えますか?
背中がすすけてるぜ! さあ、鳴いて晒すんだ!りゅうよ〜
ツモ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。