VB.Timer は.NETには存在しないの?
えっ
System.Windows.Forms.Timer ただし精度は全く当てにならないから時間計測には使っちゃダメ
MonthCalendarを複数月表示にしている場合、 表示範囲を取得するのはどうすればいい? たとえば12ヶ月分ドーンと出てるときに、2010/01〜2010/12が今表示されてるー、みたいな感じ SelectionRangeで取れるのは選択中の日付なんだよな…
9 :
デフォルトの名無しさん :2010/01/18(月) 19:28:53
vb2008にてプロジェクトに対してユーザースコープでプロパティ(例:propA)を設定しました。 このpropAの規定値(My.Settings.Reset()で設定される値)を取得する方法は用意されているのでしょうか?
前スレ
>>999 さん
ありがとうございます。
やっぱりネットに向けてポートを開放するのは危険ですよね。
以前、勤めていた会社では本社にあるサーバーから、支店のパソコンの
Windowsフォームアプリにマスタのデータを引っ張っていました。
そんなシステムを自作したいと思っているのです。
その時はISDN回線でした。
似たようなことをするには、どういったプログラムを組めば
よろしいのでしょうか?ヒントが掲載されたサイトだけでも
ご教示いただければ幸いです。どうかよろしくお願いいたします。
>>9 My.Settings.Properties("プロパティ名").DefaultValueとか
>>12 おお!ありがとうございます!
ライブラリの中を探しまくったのに、こんな近くにあったなんて。。
15 :
デフォルトの名無しさん :2010/01/19(火) 08:23:27
String変数に a,b,c d,e,f g,h,i が格納されています。つまり、カンマ区切りの行が3行、それが1つの変数に入っています。 これを、DataTableオブジェクトに入れるシンプルな方法はありますか?
>>15 俺にはこれが限界。
For Each r As String In 元の変数.Split(Microsoft.VisualBasic.ChrW(&HD))
If r.Trim() = "" Then
Exit For
End If
Dim row As DataRow = テーブル.NewRow()
row.ItemArray = r.Split(","c)
テーブル.Rows.Add(row)
Next
区切りが CR じゃなく CR+LF だと、最初の Split がもちっと面倒。
>>18 ありがとうございます。うまく動きました。
&HDがvbCrですね。
20 :
デフォルトの名無しさん :2010/01/19(火) 10:32:14
これまでWindowsXp+VS2005でやって来ていて、そのときは、ソリューション をソースで実行(Debug)しても、それからそれでできたExeファイル を直接ダブルクリックで実行しても、同じ動作をしていました。 ところが、WindowsVista+VS2005にしてやってみると、ソースで実行(Debug) すると動くのに、できたExeファイルを直接ダブルクリックして動かすと Xmlファイルの読み込みで失敗するのですが、こういったことはXpでは 経験がありません。これ解決したいのですが、Vistaでは何か新しい制約 があるのでしょうか。(使用Framework=2.0) これはVS2005からVS2008に移行すると解決するでしょうか?よろしく お願いします!
権限で引っかかってるだけじゃねーの
>>20 ・UACで怒られる
・32bit⇔64bitでエラー
とか?
23 :
デフォルトの名無しさん :2010/01/19(火) 18:28:14
>>21-22 ご指導ありがとうございます。数回試したのですが、
>>20 のような状況で
そのときのメッセージでは確かに「アクセス許可がない」といったものが
出ていました。
その後でまたやってみたところ、今度は該当のXmlファイルの中の特定の箇所
の文字(0x01)がNGだという内容のメッセージがソースでのデバッグでも出る
ようになり、それがどうやっても取れないのであきらめて、新しくファイルを
削除して初期からやり直してみたところ、今度はソースでもExeファイルでも
正常に読み込みできるようになりました。状況がはっきりわからず完全対策が
打てないのですが、またやっていく中で調べてみます。よくわからずすみません
です。ありがとうございます。
すみませんの直後にありがとうございますと書く人は たいていうつ病。 早目の精神科受診を勧める。
VB2008を使ってます。 印刷するときのページサイズ、印刷可能範囲、ページ余白とかはプロパティで取得できますが 具体的にその値ってどこから得られるのでしょうか?
プリンタドライバから。
27 :
デフォルトの名無しさん :2010/01/21(木) 00:54:07
ASP.NETで質問です。
開発環境のVisualStudio2005上で実行した場合、
つまりVS内蔵の(?)WEBサーバー機能で動かした場合は意図したように動き、
Webサイトのコピーを使って本番環境(Windows2008)に丸ごとコピーし、
ブラウザに
http://サーバー名/と打ち込んで実行させると 動きが変わります。
どのようなアプリかというとImageとButtonコントロールが配置されてあり、
ImageのImageURLプロパティで画像へのパスを設定し、表示させています。
Buttonに関しては配置しているだけでコードを追加していないため
押されるとPostBackが発生し、画像が最新のものに更新されます。
つまりある定期的に差し替えられるファイルをブラウザで最新のものを見たいので
更新ボタンを付けただけのアプリです。
本番環境ではなぜかファイルを差し替えた後更新ボタンを押すと
カチッと音がしてリロードされるのですがなぜか画像は差し替え前のままで更新されません。
F5キーを押すと更新されます。
画像のフルパスへ直接アクセスした場合は新しいものが表示され、
その後にASP上のボタンを押したら画像も更新されます。
本番環境は勝手に画像をキャッシュしてボタンを押してもキャッシュを表示しているように見えます。
ちなみに本番環境をWebに公開設定し、携帯から利用した場合はなぜか正常に動作します。
Imageコントロールがキャッシュしてるのかと思いコントロールではなく
ただのImageタグに変えても結果は同じでした。
本番環境とVSの環境で何が違うために挙動が変わるのでしょうか。
また、どうやって対処すべきでしょうか。
DataTable.Select メソッド (String, String) filterExpression 行にフィルタをかけるために使用する基準。 sort 列と並べ替え方向を指定する文字列。 -------------------- だと行はしぼれてもすべての列が抽出されちゃうけど 特定の列だけ得るにはどうすれば
>>29 カラム構成が変わったら、それはもう別のテーブルなわけで
「新規テーブル作成、必要なカラムを作成、行のコピー」を
自分で書くしかない。
自分で
>>27 >>32 の言うように↓の一行追加で直ると思うよ
<meta http-equiv="Pragma" content="no-cache" />
>>27 <img src="/images/hoge.jpg?20100121155100">
とかすればいいよ
ABC: Do dim Sum1 as integer ・・・@ Sum1=Sum1+1 go to ABC Loop だとSum1の値が@の部分で0にならないけどなんで
まずはそんな糞コードを捨てるところから始めろ
dim Sum1 as integer = 0 にしないとだめだよ
どうせブレークポイントを@の行に付けてるとかだろ。
Dim sum1 As Integer
Dim sum1 As Integer
同じ変数のDim文が複数あるとエラーになるのに
>>35 みたいなのがエラーにならないのは変だよね。
過去のしがらみというやつです
いや違うだろ。スコープから勉強し直せハゲ。
42 :
27 :2010/01/21(木) 23:27:03
>>32 >>33 試してみましたが症状は変わりませんでした。
念のため下記3行を追加しましたが同じでした。
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Expires" content="-1">
>>34 "20100121155100"がどこから来るのかわかりませんでしたが
画像のパスに日時をパラメータと入れることで更新前ファイルと更新後ファイルの
ファイル名が変わり、ブラウザがキャッシュを利用しなくなるという理屈ですね。
これでうまくいきました。
ありがとうございます。
開発環境(VS上)ではなぜキャッシュを使わなかったかは置いておいて、
ボタンによるpostbackとF5の更新では動きが違うんですね。
postbackだとキャッシュを利用し、F5だとキャッシュが非利用のため画像が更新されます。
一応ブラウザ(IE8)のキャッシュをOFFにするとファイル名にパラメータを入れるようなコードは不要になりますが、
そもそも今回の減少はサーバー側のキャッシュが効いている事が問題でしょうか。
それともクライアントのブラウザ側でしょうか。
画像ファイルにパラメータつけることで問題自体は回避できましたが
正攻法はどのようにすべきでしょうか。
HTTPをちゃんと勉強した方がいい。 304が帰ってきてるだけだろ。
proxyがキャッシュしてるならパラメータをつけるしかない
専用帳票への印字位置調整値を app.config の中に書いてます。 スコープはアプリケーションです。 My.Settings 〜 で値を取得して利用していますが、 exe 実行中にメモ帳で app.config の中身を書き換えても 起動時の情報がキャッシュされているのか即座には反映されません。 一旦 exe を落として再起動かけると大丈夫ですが。 印字位置の調整だもんで、数値を弄って印刷させてみて〜 の繰り返しになるんですけど、exe の再起動を伴うと大変です。 My.Settings.Reload とか My.Settings.Reset とか怪しいと思って app.config の中の値を利用する前に呼び出してみたんですが変化ありません。 何か一発で効くメソッドとかありませんか?
>>45 >app.config の中身を書き換えても
それは Visual Studio で実行する直前に、
bin\Debug\(exeファイル名).config または
bin\Release\(exeファイル名).config にコピーされる元ファイル。
実際 (上記いずれか) の .config ファイルの方を書き換えないと。
47 :
デフォルトの名無しさん :2010/01/22(金) 13:52:05
いろいろ調べたのですが、わからないので質問させてください。 VB.net、VisualStudio2008で制作しています。 半透明の丸い形のフォームを作ったのですが、 フォームの縁にジャギーが残ってしまい、 フォームの縁にアンチエイリアス処理を行いたいと考えています。 アンチエイリアス処理を行った円形の描画はできたのですが、 それをフォームにしようとすると、 アンチエイリアスの効果がフォームのBackColorに適応されてしまいます。 パスにアンチエイリアス処理をかけることは難しそうで、 パスを使ってフォームの形自体を変える事もできませんでした。
SplitContainerでPanel1Collapsedにしてる時にパネル2に Fillしてるコントロールがサイズ変更に追従しないのだけど どうすればいいでしょ
HttpWebRequestクラスとGttpWebResponseクラスで某サイト専用のブラウザのようなものを作っているのですが、
あらかじめ登録したIDとパスワードでログインをしてからアクセスしないとだめなのですが、
どうもうまくいきません。
ヤフーでログインを試みたら正常にログインしてその後のアクセスも正常にできたので
リクエストのPORTやクッキーの使い方は致命的には間違っていないようなのですが
何がわるいのかわかりません。
ログインしようとしているサイトは親ドメインでログインを一括して受け付けているようなのですが、
実際アクセスしたいドメインとは違うため、クッキーコンテナから必要なクッキーを選び出す段階で
必要なクッキーが得られていないのではないかと思うのですが、そういう場合はどうしたらよいでしょうか?
(POST後にいくつかのクッキーは帰ってきています。)
IDやパスワードをPOSTするアドレスは
ttps://www.google.com/accounts/ServiceLogin? なのですが、
実際にアクセスしたいのは
ttp://www.youtube.com/ のアドレスです。
service=youtubeを付けてPOSTしています。
ieHttpHeadersやらWiresharkやらで、送受信されてる内容を 比較してみろよ。
>>49 今のとこのソースとユーザーIDとパスワードをうpしてくれたら
直してあげるよ。
とりあえずそこまでが面倒くさいから。
webbrowserでログインさせるんじゃだめ?
53 :
49 :2010/01/23(土) 17:13:47
レスありがとうございます。
>>50 httpの閲覧ツールは使っているのですが、内容から原因は特定できませんでした。
httpの閲覧ツールでも一回のポストででログインが成功しているので
クッキーの使い方に問題があるような気がしてきました。
>>51 IDとパスワードはちょっとまずいような気がするのですが・・・
>>52 それだとログイン後のクッキーをローカルから持ってきて
HttpWebRequestで使える型の変数に入れるところまでが難しそうです。
(その後のアクセスはクッキーを使ってHttpWebRequestクラスとGttpWebResponseクラスを使いたいため)
まあCookieContainerの使い方が間違ってるだけだろうね
だから比較してみろ、って言ってんだよ。
リモートホストとサーバーネームの違いは?
Microsoft Visual Studio 2008とかSQL Serverとかをいったんアンインストールしたいんだけども、どう自動アンインストールツールをダウンロードすればいいのでしょうか?
にほごんでおk
フォーマットすればいいんじゃね?
>>57 まともにインストールできてるなら
「プログラムの追加と削除」からアンインストールするね、普通の人は。
62 :
デフォルトの名無しさん :2010/01/24(日) 23:18:01
知的障害者相手にするの止めようよ。
メディアプレイヤコントロールをフォームに貼り付けたアプリは 配布した相手のパソコンがどんなのでもちゃんと音なる?
相手のパソコンにサウンドボードやスピーカーが装備されていなければ 音は鳴らないだろうなJK
あいてがwmpもってないとどうなるやら
フォーム2を、フォームのプロパティでFromBoderStyleを「None」にした状態で Alt+Tabキーで表示されるウインドー切り替え画面に表示させたくないのですが どうしたらよろしいでしょうか 調べてみたんですけどFromBoderStyleを「FixedToolWindow」にすればいいのらしいですが FromBoderStyleは「None」のままにしたいです 教えてくださいエロい人
FromBorderStyleは分かりません
FromBoderStyleを「FixedToolWindow」にする
CreateParamsをオーバーライドして、 MyBaseから取ってきたCreateParamsのExStyleにWS_EX_TOOLWINDOWを追加 ShowInTaskbarもFalseにしとかないと効かないっぽいが
VB2008からACCESS2007のマクロを実行するにはどうすればいいんでしょうか。 comのMicrosoft Access 12.0 Objcet Libraryを参照追加してもAccess.ApplicationClassが使えません
(1)Form1上のボタンをクリックして、Form2クラスのFormをインスタンス化して、名前(Text)を付けて開く。 ↓ (2)デスクトップ上に開いているFornの名前(Text)をListBox1にすべて表示する。 ←ここまでは出来る。 ↓ (3)ListBox1で選択したFormを閉じる。 (3)を実行するにはListBox1で選択された名前のForm(Text)を閉じるようにすればいいと思うんですが Formの名前(Text)を指定して閉じるってどうすればいいのでしょうか?
どうやって取得してるんだよ? 取得方法がわかるんだったら、(3)の方法も思いつきそうなもんだけどな。
>>72 の言うことはもっともなわけだが・・・
例えば取得してるところでフォームのインスタンスと名前をもつ情報をListBoxのデータに結びつけて
それで処理するっちゅうのはいかが?
(2) で Application.OpenForms を使ってるなら (3) は Application.OpenForms("name").Close() でやればいいだけの話であって。
それって何が返るんだ?
argオブジェクト
Dim Encoder As System.Text.Encoding = System.Text.Encoding.GetEncoding("shift-jis") Dim req As HttpWebRequest = CType(WebRequest.Create(ItaUrl), HttpWebRequest) Dim res As WebResponse = req.GetResponse() Dim resStream As Stream = res.GetResponseStream() Dim sr As StreamReader = New StreamReader(resStream, Encoder) Dim result As String result = sr.ReadToEnd() この方法でhtmlを受け取っているのですが、時々最後の行で 「負の値ではない数値が必要です。」というエラーが出るのですが これの対処方法を教えて頂きたいです。リクエストをやり直すかレスポンスを待つなどの方法で エラーを単純に飛ばさずにhtmlを取得したいです。
1つのサイトならWindowsXPでも外部に公開できるASP.NET用無料Webサーバーソフトがあるだろうがそれ使え
それじゃセキュリティの弱い自分を 世の中の皆様にさらけだしてしまうだろうがw ハードのセキュリティを考えずに自分の作ったシステムを 代理で稼動してくれるところに意義があるのに。
こけつをえずばこじをえずっていう
いわない こけつはいらない こじもいらないが
「おケツに入れずんばイボ痔も癒えず」と言ったのはタマネギ何号だったか…
3。 はい次の方ー
ComponentOne って全然話題にならないな。 みんな使ってないのか?
MS製でないライブラリはそもそもスレ違い
VB6以前に比べると、コンポーネントの拡張もしやすくなったし、そもそもいろいろ準備されてるし。 あんまり、サードパーティ製のコンポーネントを買おう、とも思わなくなったなぁ。
88 :
デフォルトの名無しさん :2010/02/01(月) 23:26:33
キッチンタイマーのような物を作っています テキストボックスを作り、クリックすれば今の時間+5分としたいのですが、うまくいきません 戻り値は"hh:mm:ss"になります。 どうすればいいんでしょうか・・ Private Sub TextBox1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles TextBox1.Click TextBox1.Text = Format(CDate(Now) + CDate("00:05:00"), "hh:mm:ss") End Sub また↓だとstring型で結合されちゃいます。超初心者でごめんなさい。全然出きなくて泣きそうです。お願いします。 TextBox1.Text = CDate(Now) + CDate("00:05:00")
おい例えば今日に今日を足すってどんな計算なんだ?
>>88 釣りじゃないよね?
はい、どうぞ
TextBox1.Text = DateAdd(DateInterval.Minute, 5, Now)
TextBox1.Text = Date.Now.AddMinutes(5).ToString("hh:mm:ss")
92 :
デフォルトの名無しさん :2010/02/01(月) 23:53:37
Now+Now と思っているのですが違うみたいですね。文字列で連結されちゃいました date型って計算する時はdouble型に変換されると思ってたんですが、あれはvbaだけの仕様なのですね now+1だと翌日になったりしてたと思うのですが VBになって仕様が変わったようで、見た目が似てるだけに、混乱しております。おたすけ下さい
93 :
デフォルトの名無しさん :2010/02/02(火) 00:05:07
>>92 それぐらい調べる能力もないのかしら・・・?
VB使いの底辺って恐るべし・・・www
助け舟が2艘出てるのにスルーだしな・・・
95 :
デフォルトの名無しさん :2010/02/02(火) 00:21:05
>>88 です
>>90 ありがとうございました!
>>93 精進します!
もうVBAの子とはしばらくわすれて、1から勉強し直します
余談ですが、vbaだとnow+nowで2120/3/8になりました。単純にシリアル値同士足してるのでしょう
96 :
デフォルトの名無しさん :2010/02/02(火) 00:30:07
余談なんてどうでもいいこと書くくらいなら、
>>91 にも目を通せよ。
97 :
90 :2010/02/02(火) 01:09:21
>>95 釣りじゃなかったのね。
ちなみに表示は91みたいにする場合は
TextBox1.Text = DateAdd(DateInterval.Minute, 5, Now).ToString("HH:mm:ss")
です。年月日も入れるときはToString("yyyy/MM/dd HH:mm:ss")
93の人が言うように『DOBON.NET』や『VBレスキュー(花ちゃん)』などが分かりやすいので
人に聞く前に調べた方が早いですよ。
VBAやVB6は、適当に書いても何となく動いちゃいますが、正確に書かないとOSや環境に
よって違う動きになったりしますよ。
俺も大昔同じ失敗をしたことがあるな 原因は+演算子のオーバーロードの仕様が違うってことでok?
それ以外何かあるか
Date.Now.AddMinutes(5).ToString("hh:mm:ss") と DateAdd(DateInterval.Minute, 5, Now).ToString("HH:mm:ss") は、どちらの記述が望ましいの?
DateTime同士の加算は意味的に間違ってる 減算やTimeSpanとの加算は可能
常にDateTimeのメソッドを使うのが望ましい
>>101 加算が間違ってて、減算はまちがってないのか?
その意味的違いとやらを教えて欲しいが
よく分からんが多分言いたいのは 時刻-時刻=時間 時刻+時間=時刻 だが 時刻+時刻=無意味 ってことだろ。
DateTimeは時刻しか表せないからな 昔みたいに時間を兼ねてない 時間を表すのはTimeSpan
時刻と時間をあらわすものが同じという仕様がそもそも狂ってたわけで
>>103 絶対量である 2007/01/05 12:30 に
2010/02/02 16:35を足すとか
2倍するとか
そういう演算に意味があるというなら
むしろこっちが教えて欲しいくらいだ。
108 :
デフォルトの名無しさん :2010/02/02(火) 19:49:12
hhhh
>>107 時刻を絶対_量_って言うとそれはそれでちょっと問題があるとおもうが...
絶対量に対する演算が無意味だっていうなら
加算でも減算でも同じく無意味だろ
加算か減算かが意味をもってるんじゃなくて
>>104 が言うように
+と-という演算子の表す意味が違ってるって話だろう
>>104 には時刻-時間=時刻ってのも書いといてほしかったな
時刻が座標で、時間がベクトルだと考えれば 時刻+時間 も 時刻-時間 も同じ事だな
基数と序数の違い 2番目+3番目<>5番目
位置に位置は足せない
時刻-時刻=時間なんだから、時刻+時刻=時間で整合性がとれるんだろうけど 実際は時刻+時刻は時間にならないのがおかしいんだろうな でも、時刻-時刻は直感的にも時間なんだが 時刻+時刻は直感的には時間にならないよなぁ
114 :
デフォルトの名無しさん :2010/02/03(水) 01:22:12
もういいよ、それ
負の時刻なんて概念が一般的には存在しないって事と、ここがVBスレだって事考えてから書けボケ
紀元前
質問させて下さい。 DataSetから特定の1行だけを別のDataSetに入れる方法を教えて頂ければ と思います。 FromDataSet.Tables(0).Rows(0)=ToDataSet.Tables(0).Rows(0) こんな感じでやると勿論エラーが出ました。 VB6から.netに挑戦しようと思うのですが躓く事ばかりです。。。
ホットキーを使ってF12を押したときにフォームが非アクティブな時にフォームをアクティブにするようにしたんですが フォームがアクティブなときにF12を押すとフォームが非アクティブになるようにするにはどうすればよいですか?
>>117 既存行を別のテーブルに新しい行として追加したいなら
追加先テーブル.Rows.Add(元の行.ItemArray)
120 :
デフォルトの名無しさん :2010/02/03(水) 20:19:11
それ以前に、負の時刻なんて概念をだれが持ち出してるんだよ
俺俺、俺だよ!
125 :
デフォルトの名無しさん :2010/02/04(木) 23:29:44
VBの質問かどうか微妙なんですが、 WindowsXP上であるアプリA(例えばWindows MediaPlayer)のウインドウが開いていて 自作のアプリBから、そのAのウインドウのハンドルを調べて、BからAのウインドウ に図形を描画させてみようとしたのですが、何も描けませんでした。 そこでお聞きしたいのですが、そういうことは技術的に可能でしょうか? 原理的に不可能なら、諦めます。よろしく
微妙どころか100%スレ違いです
可能 相手が再描画したら終了
助けてくださいな FieldInfo..::.GetValue メソッドを使って構造体の中の構造体をとってきた ※A構造体インスタンスの中のB構造体インスタンス そして、取ってきたB構造体を編集してみたら A構造体の中のB構造体には変化がなく 取ってきたB構造体だけが変わっていた FieldInfo..::.GetValueで、Aインスタンスの中のBインスタンスを取ってきて 編集するだけでOKって感じにはならないもんなんでしょうか
うん、ならない 構造体は値型だから
VB2003/2005 2000/XP 普通にエクスプローラーから起動した場合はいいのだけど、スタートアップ から起動するとtopmostが効かないのは何故? 内部からどんだけtopmost=trueやbringtofrontしてもダメなんだけど
132 :
デフォルトの名無しさん :2010/02/06(土) 17:33:25
最近.netへ移行した者ですが、どこからも参照されなくなったオブジェクトは消えますよね? コード長いので割愛しますが、あるユーザーコントロールをtabpageに入れて tabpageをtabpagesに入れた奴をtabpages.removeで削除すると、 当然タブの表示が消えるんですが、ユーザーコントロールのファイナライズが呼び出されていませんでした。 アプリケーションを終了するときに呼び出されてしまいます。これはどこからか参照されているままだろうということなんでしょうか? tabを中クリックしたときにremoveを呼び出しているので、その時にnothingすればいいんだとおもいますが・・。
133 :
デフォルトの名無しさん :2010/02/06(土) 17:39:39
nothingではなく、disposeですね。
ファイナライザなんていつか勝手に呼ばれるものに過ぎん
大抵の実装ではDisposeするとファイナライザの呼び出しは不要になるので呼び出されなくなる
プロセスが終了すれば解放されるっしょ。 ちょっとしたツールなら気にする必要もなし。
137 :
132 :2010/02/06(土) 23:33:55
いつか勝手に呼び出されるものだったんですね。すぐに呼ばれると勘違いしていました。 やりたいことはタブを中クリックされたときに、タブに張り付けてあるユーザーコントロール内の データグリッドビューコントロールのある値が空白のときに、タブを閉じないで警告を出すという動作をさせたかったんですが、 タブを閉じようとする操作はtabcontrolが受け取ってタブをRemoveさせています。 ユーザーコントロールにはtabcontrolから何らかの方法で知らせる必要があるようですね。ありがとうございました。
フォームデザイナの画面でポトペタしたコントロールだったら、 Form1.Designer.vbにフィールドが作られていて、そこに参照が残っている。
disposeのイデオムはややこしいからねぇ。 VBのはC++/CLIのようにもうちっとラップして欲しかった。
わかんないんだったらそのへんに手を出しちゃだめ かえってパフォーマンスが落ちたり余計な問題を抱えたりするだけ C++/CLIは言語の目的上リソース管理が重要だからちょっと親切になってるけど VBみたいに分かってない人でも使えるようにするためじゃない
何がイデオムだw イデオムって言いたいだけだろw
ここでアニオタ浮上。古すぎ?
まあIDEがコメント付きのスケルトン自動生成してくれるし、 そうややこしいということはないと俺は思うけどね。 ところであのスケルトン、既に呼ばれたかどうかのフラグをフィールドにしてるのが 個人的にはダサいと思う。 せっかくVBではメソッド内static変数が使えるんだから、そっちを使って欲しかった。
144 :
132 :2010/02/07(日) 01:20:12
>>138 ポトペタではないです。自前のコードでユーザーコントロールをnewして
tabpage.controlsに入れて、
tabcontrol.tabpagesにtabpageを入れてます。
オレはSQLサーバー好きなんだが クライアントでちまちまやるだけならまだしも サーバーで公開するには高額なライセンスが発生するから なにかおすすめの無料データベースは?
なるほど
VB初心者です。 VBでWindowsフォームアプリケーションを2つ作りました。 1つ目はテキストボックスに入力されたデータを変換して、またテキストボックスに出力するというもの 2つ目はWebclientでhtmlデータを持ってきて解析してDatagridviewに出力するというものです これが2つともすごいメモリ使用量なんです! OSはXPなんですが、1つ目のは14,000K、2つ目にいたっては最大で23,000K程使ってます! これって自然ですか? なにかメモリ使用量を節約する方法などありましたら教えてください。
そんなもん。気にすんな。
実際にそれだけ使ってるわけじゃないから気にするな ウィンドウを最小化したりすると大幅に減ったりする意味のない数値
そうですか・・・。メモリの解放など全く気にせず作ってたもので、 それが原因かもと思ったのですが。 あまり気にしないようにします。 ありがとうございます。
ワーキングセットはむしろOS的には実際にそれだけ使ってる数字だと思うが。 まあいいたいことは分かるけど。
154 :
デフォルトの名無しさん :2010/02/08(月) 10:56:54
>>149 PictureBoxに画像を表示して消して表示してを繰り返すと、あっという間に
メモリ使用量が100MBを超えます。
メモリを自動的に解放するのが待てないときは、GC.Collect() で手動で
解放するといいと思ってます。
IDisposableはDisposeしろよ
156 :
デフォルトの名無しさん :2010/02/08(月) 23:24:56
iniファイルから読み込んだ数値を表示させる、というプログラムを組んでみたのですがうまく動きません セクションは"[ini]"でキーは"ko"です。5が返ってきて欲しいのですが0になります どこが悪いのでしょうか? カレントフォルダで表示される C:\Documents and Settings\名前\デスクトップ\aaa\bosstimer\bosstimer\bin\Debug の中にiniは入っています。 iniファイルの中身は [ini] ko=5 の二行だけです。ファイル名は bosstimer.ini です。 コードは↓です Public Class Form1 Public Shared Function GetPrivateProfileInt( _ ByVal lpAppName As String, _ ByVal lpKeyName As String, ByVal nDefault As Integer, _ ByVal lpFileName As String) As Integer End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'Iniファイルから指定したキーの値をGET(整数値) Dim aaa aaa = GetPrivateProfileInt("ini", "ko", 0, CurDir() & "bosstimer.ini") MsgBox(aaa) End Sub End Class
Declareはどこいった?
158 :
デフォルトの名無しさん :2010/02/08(月) 23:45:37
159 :
デフォルトの名無しさん :2010/02/09(火) 00:12:40
>>157 ありがとうございます。とりあえずコードを拾ってきて、iniもC直下において
下のように変えたら
8972063213919141888
と返ってきました。何故でしょう
iniファイルは上の二行だけで5の後には改行も入っていません
integerにするとエラーが来たので大きい数が入ってるような感じはしますが、なんだかわかりません
分かる方おしえてください、お願いします・・・
Public Class Form1
Public Declare Function GetPrivateProfileInt Lib "kernel32" Alias "GetPrivateProfileIntA" ( _
ByVal lpApplicationName As String, _
ByVal lpKeyName As String, _
ByVal nDefault As Long, _
ByVal lpFileName As String) As Long
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim aaa As Long
aaa = GetPrivateProfileInt("ini", "ko", 0, "c:\bosstimer.ini")
MsgBox(aaa)
End Sub
End Class
>>158 なんでDllImportの行すっ飛ばしてるんだよ…
161 :
デフォルトの名無しさん :2010/02/09(火) 00:20:51
>CurDir() & "bosstimer.ini" CurDirって終端の \ を含んでないんじゃないかい
163 :
デフォルトの名無しさん :2010/02/09(火) 00:23:10
うおおおおすいませんそれでぐぐったら感性しました
Imports System.Runtime.InteropServices
をincludeするんですね。MSさん・・サンプルにも書いといてほしいですぜ・・
>>162 ありがとうございます。そちらは確認済みでした
そんなレベルでDllImportとか恐ろしすぎるな
負の時刻で思い出したが、Vistaのエクスプローラでステータスバーに表示されるファイルサイズがマイナスになるんだけど、負のファイルサイズってなんだ?
実際のファイルサイズじゃなくて、 それより前に選択したファイルとの差が出るやつか。たまになるな。 気にはなってるんだが実害がないので、どういう時に起こるかとか調べた事ないな
Try 〜 Catch でエラーを検出したとき、 そのエラーがどこのステートメントで発生したかの ログを取りたいのですが、どうしたらよいでしょうか? 障害の原因の早期発見のためです。
好きにしろよ
>>167 Catchの中でStackTraceを吐けばおk
実行ファイルと同じ場所にpdbファイルを配置するのを忘れずに
単にToStringでもいろいろ吐いてくれる
171 :
デフォルトの名無しさん :2010/02/09(火) 21:33:38
デバック中にウォッチ式は使えないんでしょうか 変数に何が格納されているか知りたいときは、どこかのtextbox辺りに出力するのが゛一般的ですか?
ブレークポイントか一時停止で止めれば見放題
173 :
デフォルトの名無しさん :2010/02/09(火) 21:44:38
一時停止状態でウォッチ式の追加を選んでも無反応なんですよ なんででしょう
そりゃ現在実行中のコードの位置から見える範囲しか見えないから
一般的なvb.netでの考え方を教えてください。 フィールドA〜フィールドEまで5項目あるデータを百件から千件程度 プログラム内部に持ちたいと思ってます。 これをプログラムで実現するにはどういう方法がベストなんでしょうか。 ・DataGridViewで保持 ・arraylistで保持? 他の方法すらわからないので、普通はこう作る!というような作法が あればご教授頂ければ幸いです。 参考になるかわかりませんがデータ容量は小さく、現在800件ほどで60kb程度です
使い方やデータの出処による。 コレクションを使う場合はArrayListは時代遅れなので使わない。List(Of T)を使う。
何に使うか次第だな。
> ・DataGridViewで保持 Viewなんだからデータ保持させんな
>>176 ,
>>177 ,
>>178 ありがとうございます。
個人で出納帳(というか家計簿)のようなものを作ってみたく、
日付、金額などを明細で持つようにしたいのです。
画面にはひと月分表示させてあとは内部に持っておこうと
考えてます。
この考え方自体もvb.netに合わないんでしょうか。
arraylistは時代遅れなんですか、勉強になります。
DataGridViewでデータ保持してゴリゴリやればなんとかなると
思ったのですがぜんぜん考え方が違うようですね、すいません。
変だな。そんなの、DBにでも突っ込んどけばいいじゃん。
まあ家計簿くらいならコレクションで持ってもいいんじゃないかな その方が練習になるし
別にいいけど、入出力はどうすんのよ?
>>180 ,
>>181 ,
>>182 ありがとうございます。
本格的にするならそうするのですが、
まずは小さなアプリでvb.netの勉強したいので
内部に保持しようと考えました。
入出力はとりあえずcsvにしておいて、
ステップアップする時に他へ乗り換えようかと思ってます。
勉強なら配列の配列とか使わずにちゃんと行クラス作って保持しなよ
型付きデータセット
excelでvba使った方がいいんじゃない?
勉強って言ってるじゃん
型付きデータセット使うなら先に
>>184 の考え方を理解するべきだとおもう
そのサイトのやり方は古い 2005なのにそんなことやってるとかもうそのサイト見ないほうがいいよ VB2005以上ではそんなもん必要ない ジェネリックコレクションでググれ
そのサイト、コントロールの使い方とか調べるくらいならいいかもしれないけど
>>188 のような基礎的な記事は当てにしないほうがいいよ
書いてる本人がわかってない
初心者なんだからとりあえず動けばいいって
Compact Frameworkなどで要素数が少ない時はArrayListの方が有効な場合もありえる
じゃあそもそもコレクション自作したりしないで ArrayListでダウンキャストすればいいでしょう ちゃんとオブジェクト指向意識しようとしてる割には Publicフィールド使いまくりだったり俺用語俺解釈だらけだったり メソッドをオーバーライドするときの大文字小文字が無茶苦茶だったりわけわからん
>>192 Silverlightでは非ジェネリックコレクションは完全に撤廃されてジェネリックのみになってるよ
WM7ではSilverlightはCFに代わって標準APIになります
DataGridViewを使っています。 フォームロード時にセルの高さをColumnHeaderの高さと同じにしたいと考えています。 ColumnHeader.Heightの値は'16'に設定しているのですが、 ShownイベントハンドラからColumnHeader.Heightを見ると'23'になっています。 さらにShownイベントハンドラ内で Me.DataGridView.ColumnHeadersHeight = 18 としても値が変わりません。 これはなぜなんでしょうか。
テキストボックスに半角数字とバックスペースとエンターキーと「-」マイナス「.」小数点のみを入力できるようにしたいのですが 半角数字とバックスペースとエンターキーはすぐに見つけられたのですが マイナスと小数点はどのようにすればいいのでしょうか?
教えてください! プログレスバーについてなんですが、XPではValueの値を設定するだけで 正常に表示されるんですが、Win7だとモッサリ動いて100%まで到達する前に処理が終わります。 Win7で動作させる場合、モッサリ感をなくすような方法はありますか? あるいは、XPのプログレスバーが使えればいいんですが。
VB.NETも終わったな・・・ ASP.NETが昔のASP並みに、社内システムの開発程度にしか 使いどころがなくなった今、.NET Framework のネット可用性は激減だもんな。 今更デスクトップアプリって時代でもないしな。
ウェブアプリの時代ってことっすか?
ウェブはphpの独壇場
COBOLが今でも残っているように、 デスクトップアプリはずっと残る。 しかし、COBOLプログラミングに魅力を感じないように、 デスクトップアプリプログラミングも魅力を感じることはなくなるだろう。 パソコンは、一般人にとって不要な機能が多すぎる。 最低限の機能を残し、 誰でも気軽に買えるよう、低価格化し、 素人が使っても壊れないようにシステムの安定化を図れば、 いずれ、ブラウザ一枚が起動するだけのマシンが売られるだろう。 そしてそれは今のパソコンにとって変わるほどに普及するだろう。 メーラーもメモ帳もすべて包括的なWebサービスに変わる。 Windows Azure のようなOSが標準化され、 ソフトウェア使用のライセンス違反の問題も解消する。 高価なパソコンでOSを合わせ、.NET Framework などのコンポーネントを 用意しなきゃ動かないソフトなんて、開発にも利用にも金がかかりすぎる代物は たぶん俺には会っていない。
>>198 1.VisualStyleをオフにする
2.プログレスバーの分解度を大きめにして、1大きい値を設定した後、本来の値にする。
どっちかくらいかな?
2の場合、最後の値では1大きい値にできないので、
最後だけは、最大値を設定後、最大値-1をセットすることになる。
なので、最大値-1を設定しても表示に影響がないように、
最大値を大きめにして補正しないといけない。
>>198 やってみたら確かに再現しますね。
とりあえず不本意なやり方ですが、プログレスバーがMAXになった後に500〜1000msecの
Waitを入れることでMAX表示はできました。
>>203-204 ありがとうございます。
試してみます。
ちなみに、100%時にSleepをしたら表示さえとまってしまいました。。
Wait関数があるんですね?試してみます。
あるいは、VisualStyleをオフにできるんですね?やってみます。
206 :
204 :2010/02/11(木) 16:18:41
精度が不要な場合は自分は@のようにしています。 ある程度精度を気にする場合はAのようにしています。 @Sleep 10msecを100回 For j As Integer = 1 To 100 System.Threading.Thread.Sleep(10) Application.DoEvents() Next j A msecWait(1000) '1秒Wait Public Sub msecWait(ByVal WaitTime As Long) Dim l As Long l = System.Environment.TickCount Do While System.Environment.TickCount - l < WaitTime Windows.Forms.Application.DoEvents() System.Threading.Thread.Sleep(10) Loop End Sub
バグってるぜそれ。 まあ稀に返ってこなくなるだけだけど。
バグってるぜそれ。
あ、ミスったけどもういいや。
あ、逃げた。
Declare Function midiOutShortMsg Lib "winmm.dll" ( _ ByVal hMidiOut As Integer, ByVal dwMsg As Integer) As Integer を使ってキーボードを鍵盤のようにして音を出すアプリを作ってみたのですが、 発音するタイミングが遅く連打するとキーを放した時に音が鳴っているような感じになるのですが もっとリアルタイムで音を出すにはどんな方法でやれば良いでしょうか?
ListViewに同一のデータが追加されるのを防ぐ方法はありますでしょうか。
>>212 せめてキー判断をどうしてるかわからないとね
>>213 そもそもどうやってデータ追加してるのかね?
何らかのID等を振っておいて追加時に今までのと比較すれば?
初歩的だけど応用は効くやり方だと思う。
215 :
212 :2010/02/12(金) 19:11:07
レスどうもです。 説明不足ですみません。発音が遅れている原因はキーの判別ではないみたいです。 KeyPressイベントで音を出していますが、どのキーでも同じ音というようにKeyCodeの判別部分を削除しても 発音のタイミングは変化がないようです。
なんでまず遅延がどこで発生してるのか確認しようとか思わないんだろう。 とりあえずラベルの背景色なりなんなりをキーに連動させるとかすれば 目視でだいたいどこに問題があるのか見当ぐらいつくだろうに。 頭悪いんじゃないの本当。
>>214 具体的に申しますと、Twitterのpostをライブラリ経由でListViewに表示させています。
その際に、ColumnA(ユーザ名)、ColumnB(投稿内容)、のようにしてItemsを追加しています。
現状の処理だと
A B
hoge huga
hoge huga
xxxx yyyy
のように、一部の投稿内容が重複して表示されてしまうので、それをListViewに追加する段階で弾けないか、と考えている次第です。
正直、弾けばいいじゃんとしか言い様がないぜ
ビューにそんな責務を持たせるのが間違いだろ。
>>217 そんなのListViewの全ての行を追加したい文字列と比較して重複してたら追加しなけりゃいいじゃん
>>221 新しいItemを{ユーザ名.投稿内容}といった形で追加しているのですが既存のItemsと比較する方法がわかりません
申し訳ないです。
なんか一意になるものを探す。URLとかいいやね。
>>223 ありがとうございます。
投稿ごとに割り当てられたIDを取得して取捨選択をしてみようかと思います。
>>224 A = ListView1.Items(行番号).Text
B = ListView1.Items(行番号).SubItems(1).Text
とするとAにユーザーID、Bに投稿内容が取得出来るよね。
後は追加する時に、それぞれの項目チェックして追加するしないを決めればいいんじゃない?
それを、Dictionary にでも突っ込んどくんだよ。 そんで、ListView はあくまでもその Dictionary の表示用と割り切る。 ほら簡単。
>>226 ありがとうございます。
試してみます。
礼言ってる暇あったら、さっさとやってこいカスが
そうカリカリしなさんなや
学生の頃からプログラムを組み、 会社でもプログラマー、SEを経験しました。 今、何か大きいことをしたいのですが、 どうしてもプログラムが手につきません。 何かプログラムを組もうと思って紙に設計などをするのですが、 実際にプログラムを組むところまでいかず、 どうしてもVisual Studioを起動できません。 こんな自分はどうしたらいいでしょうか。 偉大な先輩方、何かアドバイスがありましたら ご教示下さい。
向いてないからあきらめろ。
諦めてしにます。 ありがとうございました。
自己解決しました。
235 :
デフォルトの名無しさん :2010/02/14(日) 19:28:24
.NETになって色々な物が新しく追加されたようなのですが、 基本的には新しいものを使って行った方が良いのでしょうか??
好きにしろ
好きにしろ
追加じゃない。刷新。昔のVBっぽい部分はおまけ。
しかし、2010にもなって今頃 「.NETになって色々な物が新しく追加されたようなのですが」 ってどうなの。
全くの別物で、VBでよく使われる基本的な操作に対しては 昔のVBに似せたバージョンもオマケで用意されてるだけ
Visual C++の.NET質問スレが無かったので、ここで質問させて戴きます。 下のようにIMEモードをNoControlにしているのですが、自作アプリケーションで全角にした後に 他のウィンドウにフォーカスを移して、また戻すと半角に戻ってしまっています。 ユーザーが設定した情報をフォーカスを変えても保持するようにするにはどうしたら良いのでしょうか? よろしくお願いします。 this->ImeMode = System::Windows::Forms::ImeMode::NoControl;
243 :
241 :2010/02/15(月) 03:21:59
>>242 テンプレに.NETのURLがあるようなので、そちらに移動してみます。
誘導ありがとうございました。
>>241 は取下げます。
ちょっとまえまでは、VB6でのノウハウやその資産をどう移植するかが
テーマであったけれど、今後は、VBAとの関係をどうするかがテーマに
なっていくのかな?
>>235 あたりの流れを読んでいてそう思ったんだけど、ここの住人は
そのあたりはどう考えてるのでしょうか?
VSTOって知ってる?
それは、VSTOがあればすべてが解決するという理論?
そりゃ理論上は
>>239 俺も最近VB6から乗り換えた組みだが、ここまで変わってるとは思わなかった
VB.NETって「VB風C#」だし
ちょっと待った! それは無い
かつてVisual Basicとか使ってた人には良いかもだけど ずぶの初心者にはおススメできない>VB C#だと int a;でいいところが Dim a as integerってなんやねん。10文字近くも多くなってるわー。インテリセンスを使ってもこれは時間かかる。
なんだ、要は自分もよく知らないけど、 とりあえず英文字出しておけば相手を馬鹿にできる という理論か。
>>253 お前が馬鹿に間違いないことだけはわかった
vb .netにFindFirstFileみたいなやつってありますか?
>>255 に追加
DirectoryInfoのGetFilesは嫌なのです。
ない。
今日もインテリセンスうめえ
なんで意見を言っている人をけなす意見しか出ないのだろうか。 VBAとVSTOについての比較などの話、もしくは別スレへの誘導はしないの?
単なるCOMだから一緒だし
261 :
デフォルトの名無しさん :2010/02/16(火) 19:45:10
画面で実行ボタンを押すと、ストアドプロシージャを呼び出して DBを更新するソフトを作っていて、更新処理に時間が掛かるので、 プログレスバーで進捗状況を表示させたいと思っています。 予めデータの件数が分かっていて、プログラムの中で1件ずつ処理しているような場合なら、 ループの中でカウントアップして行けばいいと思うのですが、 DB関連の処理は全てストアドに丸投げしてしまうので、その手が使えません。 何かいい方法はないでしょうか?
非同期にしてプロシージャの終了を待てばいいことではあるが、 なんにせよプログレスバーでやるんだったら 最大値(=終了時刻)がわかってないとできないぞ
>>262 レスありがとうございます。
何らかの方法で、現在値や最大値を取得することってできるんでしょうか?
トータル件数と処理済み件数を返すストアドを作って もう一個コネクションを貼って読みだす
>>257 レスありがとうございます
おとなしく FindFirstFile 使います。
>>264 頭悪い!その手があったか。
頭悪いアドバイスありがとうございます!
クラスを作成しようと考えてみますが、サンプルや参考になる所ありますか?
VBでaccessのテーブルにアクセスしてデータを取得しようとしてるんですけど OleDbDataReaderで取得するときにうまく取得できません openメソッドは動いているのでDBは開いているとおもうんですけどそこからが進みません ほかにもOleDbDataAdapterなどで値を取得しようとするとOleDbExceptionでダメでした 誰か教えてください
269 :
268 :2010/02/17(水) 06:48:28
自己解決
死ね
271 :
268 :2010/02/17(水) 06:52:04
ミスです 自己解決したんですけど SQL文がダメ見たいでした テーブル名が欲しくて SELECT Name FROM MsysObjects WHERE Left([Name],4) <> "Msys" AND Type = 1 ORDER BY Name; を実行するとエラーでだめでした Accessのクエリでは問題なくテーブル名がかえってきますが、VB側で実行するとダメ見たいです
272 :
268 :2010/02/17(水) 07:15:34
自己解決しました
原因がわからず悩んでいます。ぜひ教えてください。 form1からform2をShowDialog()してるのですが、 form2で実装しているボタンを押下したとき、1回押しただけでは 画面が戻ってくれません。 form2にはボタンを2つ設けてあり、どちらのclickイベントにも Me.Close()をいれているのですが、一度でcloseされないのは 何が原因と考えられるのでしょうか。 form2の各イベント処理の先頭にmessageboxを入れてみたのですが 1回のボタン操作で1回だけしか表示されず、どういう動きになってるのか わかりません。 form2には new ,BtnOk.click,BtnCancel.click が実装されています。
ありえない
とりあえずform2の全ソースをさらしてみろ
asp.netで、表示する値が無い場合、行をつめて表示する方法はありますか? 例えば、Labelコントロールを配置して、そこに値が無い場合、 Visible = false にしても、空行がとられてしまい、行をつめてくれません・・・
>>274-
>>276 さん、
ありがとうございました。解決しました。
form1側で
a = new form2()のあとで
a.ShowDialog()
となってましたorz
||┃||||||
|(-_-)||| スミマセン
|(∩∩)━━━━
えっ
280 :
デフォルトの名無しさん :2010/02/17(水) 23:46:13
2ちゃんねる依存の人が必死になって過疎防止のネタを書き込むのがウザイ。
>>277 普通につめて表示されないか?
.text = "" としてみた?
当方VS2005。
>>281 うまくいきませんでした。
こちらは、VS2008でASP.NET3.5です。
Label1
Label2
Label3
と配置して、Label2.text = "" としましたが、表示したのは、
Label1
Label3
と空行が発生してしまいます。
こうなってるんでしょ?<br />もLabelのテキストとして渡さないと。 <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> <br /> <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label> <br />
>>283 すみません、もう少し詳しく教えてください。
余分な改行は発生してしまっているのに、
さらに<br />もLabelのテキストとして渡す、
というのはどういうことでしょうか。
.text ="<br />" とすると、
ラベルの文字に<br />と表示されてしまうだけのような・・・。
それとも、html 編集をする必要があるということでしょうか。
ブラウザで生成されたソースを表示する習慣は無いのかな?
生成されたソースっていうか、VSで.aspxのソースみれ わからんかったら、runat="server" つけた<div>でそれぞれのラベルを囲んで <div>を非表示にしてしまえ 不要な改行は全部けしとけよ
287 :
282 :2010/02/18(木) 17:44:40
>>283 ありがとうございます。
デザイン画面では、
Label1Label2Labe3
と配置しておいて、表示するときに
Label1.Text = "Label1<br />"
Label2.Text = ""
Label3.Text = "Label3<br />"
とするのですね。うまくいきました。
つーか、.netのコントロールなんか使うなよー
.NETを使うなじゃなくて、コントロールを使うなですか じゃあ何を使うの?おすすめを言ってくれ
290 :
268 :2010/02/19(金) 23:02:19
<% Response.Write() %>
<%=なんとか%>
失礼します VBでソケット通信をするにはどうしたらいいのでしょうか? 利用するクラスすらわかりません。 具体的にはニコニコ生放送のコメントを取得したいのですが簡単にでいいのでお願いいたします
>>289 コントロールなんか使ったら糞重いWEBアプリしかできんぞ
さくさくのWebアプリにしたったら<% %>のみにするべき
runat=serverとか最悪すぎる
拡張子を htmlにして動的なことはいっさいしない。これ最強。
298 :
デフォルトの名無しさん :2010/02/20(土) 17:17:03
変数の定義について、初歩的な質問です。。。 下記のように、ボタン1がクリックされるとYasaiクラスからYasaiDateインスタンスを11個 生成したいと考えています。 その後、別のボタン2をクリックしたときにこれらのインスタンスを利用したいため、 Public修飾句でインスタンスを宣言したのですが、 ’Pubulic’はローカル変数宣言では有効では在りません などというポップアップが出ます。ためしに 1行目のPrivateをPublicにしても同じでした。 プライベート宣言したプロ―ジャ内では、パブリック変数の宣言はできないものなのでしょうか? どなたかアドバイスいただけると助かります。 01 Private Sub Button1_Click(Byval ・・・・・・・・ 02 Public YasaiDate(10) As Yasai 03 YasaiDate(i)=New Yasai() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ’クラスを定義 01 Public Class Youso 02 省略
アドバイスねえ。 そんなレベルの話でいちいち人に頼るぐらいならプログラミングなんてしない方がいいと思うよマジで。 なんで、例えば入門書の一冊もまず読んでみようとか思わないんだろうこういう人って。 っていうか、そんな愚問をかいた文章をつらつら書いてる暇に自分で問題解決できないか普通。 20年前ならともかく、このwebの時代に精神病んでるとしか思えん。
プログラミングしてるというよりOffice製品使ってる感覚なんでしょ
最近は基礎は勉強したくない ものができればいいっていう感じだからな
302 :
268 :2010/02/20(土) 17:46:54
Public -> Dim
303 :
298 :2010/02/20(土) 17:48:00
質問スレだから質問したんだよ。本読むより聞いたほうが早いだろうが。 無意味な投稿すんなバーカ バーカ
いや、正直このレベルのは質問するより本とか入門サイト読んだほうが早いよ?
305 :
298 :2010/02/20(土) 17:58:50
そうですか。 今は02 Public YasaiDate(10) As Yasai を ソースファイルの先頭付近(Privateプロ―ジャの外)で宣言して 使おうとしてます。 ただ、プライベート宣言内でパブリック宣言ができないと なんか不便だなぁという気がして。仮にそういう仕様だったとしたら 何か意味があるんでしょうけど。
アクセス修飾子の問題じゃない、スコープの問題 最低限のものは身につけないと質問回答すら満足にできないわけよ
307 :
298 :2010/02/20(土) 18:05:19
スコープですか。そのあたりを調べてみますね。 ありがとうございました。
( ゚Д゚)ポカーン
野菜日時ってなんだよポカーン
グローバルでおk
文字列検索で質問です。ある文字列(スレのURL)で6つ目の"/"が何文字目にあるか
知りたいのですが、そういった関数はありますか?
現在は↓のようにforでループさせていますが、他に簡単な方法があれば教えてください
Dim i As Long
urlstr = "
http://pc12.2ch.net/test/read.cgi/tech/1263738929/ "
sla(0) = urlstr.IndexOf("/", 0)
For i = 1 To 6
sla(i) = urlstr.IndexOf("/", sla(i - 1) + 1)
Next
312 :
268 :2010/02/21(日) 18:41:34
ないから適当に作れ。
正規表現とかで書けんでもないが、まあループで問題なかろ
>>311 まあ、無理にIndexOfなんか使わずにベタに書いた方が分かりやすそうとは思う。
InStrとかただの遺物
番号を指定できるようにしといて関数化しとけば便利だな ある文字列の○番目の〜〜が何文字目にあるのかを返す
>>315 そうじゃなくて、単純に文字列の中の文字を先頭から対象の文字("/")と
比較した方が分かりやすいんじゃないのってこと。
Shared Function GetIndexOf6th(ByVal text As String, ByVal wanted As Char) As Integer
Dim foundCount As Integer = 0
For i As Integer = 0 To text.Length - 1
If text(i) = wanted Then
foundCount += 1
If foundCount = 6 Then
Return i
End If
End If
Next
Return -1
End Function
click onceって自分が管理してるサーバー必須なの? update機能が便利だと思って使いたかったんだけどレンタルじゃだめぽ サーバーない人は普通にexe配布してバージョンアップしてもDLした人に気づいて貰うしかないの?
自分で自動アップデートする仕組み作ればいいだけだろ
323 :
268 :2010/02/21(日) 21:37:36
必須だよ
どっちだお・・・ とりあえずclick onceで自動update通知機能を付けるならサーバが必要ってことかい? update機能付けれないならsetup.exeとdataフォルダをまとめてupっても意味ないよね 普通にexeを配布で我慢するのがベターかな?
いらんよ。やってみればいいじゃん。
あ。いらんって、自前のサーバーね。 レンタルでもちゃんとできます。
発行フォルダの場所にレンタルを指定したんだけど 次のエラーにより、<レンタルURL> に接続できませんでした: Web サイト <レンタルURL> を作成できません。 Web サーバーに FrontPage Server Extensions がインストールされていない可能性があります。 って出るからサーバー側が何かしらの設定してくれてないと出来ないのかなって判断したんだけど っていうかどことも知れないURLをpassとかも聞かれずに設定するのはおかしいからどこかで許可する設定がいると思うんだけど
直接発行はできない。 ダウンロードURLにレンタルサーバーのURLを入れて、ローカルに発行。 そんで、FTPとかでアップすればOK。
MIMEの話かと思った。手動でコピーすりゃいいの。
>>329 親切にどうも
VB2008expressなんだけど発行フォルダの場所をローカル(適当)に設定して
インストールフォルダのURL(上記と異なる場合) って項目にファイルうpった場所のURLを入れた
setup.exeを起動したら アプリケーションがダウンロードできません。アプリケーションに必要なファイルが不足しています。
うpったファイル
setup.exe
<ファイル名>.application
Application Files[フォルダ]
ちなみに発行をローカルにして、インストールフォルダを未入力にするとsetupはうまくいくけどそもそもネットを介してないんで論外
ヘルプ嫁よ。
うまくいったわ 後世のためにもここで技術提供させてもらうわ 発行フォルダ:setup.exeとかが作られるところ どこでもおk インストールフォルダ:setup.exe実行したときにデータを取りに行くところ サーバにセットアップファイルを置いとくURLを指定 ↑の通りにやってるのになんでかセットアップ行かない人はこっからが重要ね プロパティ > アプリケーション > アセンブリ名 ここを半角表記にすること! 全角の名前にしとくとセットアップファイルも全角になる インストールする際にその全角のファイルをURLで指定するからおかしくなるんじゃないかな 半角にしたら上手くインストールできましたv(^q^)v 助言thx
お恥ずかしい質問なのですが、 新規プロッジェクトを作って新規フォームを作成後、 pictureboxを1つ貼り付けて、 form_loadに以下を記述したのですが、画像(というか四角形)が 表示されません。 Dim g As Graphics = PictureBox1.CreateGraphics() Dim p As New Pen(Color.Black, 1) g.DrawRectangle(p, 10, 20, 100, 80) g.Dispose() 他に何か記述するものがあるのでしょうか。 画像関連は全くさわったことないのでorz状態です。
onpaintに書かないと
CreateGraphicsはいい加減EditorBrowsable(Never)にすべきだな
>>335 さん、ありがとうございます。
以下で表示できました。
Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles PictureBox1.Paint
Dim p As New Pen(Color.Black, 6)
e.Graphics.DrawRectangle(p, 10, 20, 100, 80)
e.Dispose()
End Sub
onpaintで書いてみたのですが、一瞬それっぽいのが表示されて消えたので
ググってみると、かなり昔のvb6スレにあったのを参考にしてみました。
VBのサンプルではよく見かけるけどDisposeを普通に呼び出すのは間違いだよ Finallyブロックの中で呼ぶか、直接書かずにUsingを使って自動で呼び出してもらう
いやこの場合そもそももらっただけのeをDisposeしちゃ駄目だってところから pの方をこそUsingしないと
そういえばCloseとDispose両方ある場合ってみんなどうしてる? UsingでDispose呼ばれて勝手にCloseもやってくれると信じてやってるけど
両方呼んでる。
実際呼ばれるからそれでおk あえて明示的に呼ぶ場合にOpenと対応した方が気持ちいいからDisposeの別名として用意してある
呼ばれるかどうかはクラスによる。
それはガイドライン的には不適切な実装だから考えても仕方ない それを言うならCloseとDisposeを両方呼ぶと大抵の実装では結果的にDisposeが2回呼ばれることになる ガイドラインによれば複数回呼んでも問題のない実装にしろということになってるけど それを信用できないなら両方呼ぶのも問題があるかもしれない
不適切な実装てw いや普通に考えればそういうことじゃなくて、例えばStreamの派生クラスなんかは メソッドの名前の対称性を考えるとOpenに対してDisposeではおかしいからCloseがあるわけだし、 C#(.NETのクラスライブラリはC#で書かれてる)ではVBみたいにインターフェイスの実装を 別の名前で公開できないからDisposeもあると。 単純にそういう事情だと思うけどね。
あ、でもStremにはOpenメソッドはなかったかw
Dim Ary(9) as integer として、 Aryの要素数は10 というのを関数で導き出すにはどんな関数を使えば
Lengthかなんかがあるだろ
そう
やべぇな・・・今の時間まで仕事やってる俺は負け組だ そして息抜きがこことは・・・・ へっへっへ・・・・orz
実はArrayListで.countなんじゃないかとなんとなくおもった
むぅ
close はデスクトラクタの実行みたいなもので、 dispose はメモリ開放じゃないの?
メモリの解放はあくまでもGC。 System.IO系など、Close = Disposeの実装が多いが例外もある。 ShowDialogした場合のFormがそれ。
CloseはあくまでOpenと対で使うものとして disposableなものは必ずDispose()で終わるようにしている
いやUsing使えよ
Module Module1 Public WMPList() As String Public Sub WMPListAdd() WMPList(0) = "a" WMPList(1) = "b" End Sub End Module なんでこれ↑だとエラーで -------------- Public WMPList(1) As String にしたこれ↓はエラーにならないのか -------------------- Module Module1 Public WMPList(1) As String Public Sub WMPListAdd() WMPList(0) = "a" WMPList(1) = "b" End Sub End Module
配列の長さが不定ならList(Of T)かArrayListでも使っとけ msdnにあるプログラミングリファレンスに、配列についての基礎を説明してるページがあるから読んできなさい。
むむむ
Redim無しでテキトーに使いたい気持ちは分かる
Redimとか過去の遺物
では何を使うんだね
要素数を変える可能性があるなら最初からList(Of T)を使うべきだし 単に配列を作り直すなら.NETらしく WMPList = New String(3) { }とすればいい
ReDim Hoge(3) 相当のものは一応こう書ける。 Hoge = New Object(3) { }
変数名() As New 型 の形の配列宣言(というか初期化の構文糖衣)は.NETになるときに撤廃するべきだった
これだな、非互換は ' VB6 Dim i As Integer, j As Integer For i = 0 To 9 Dim t(9) As Integer t(i) = i For j = 0 To 9: Debug.Print t(j);: Next: Debug.Print Next ' VB.NET Dim i, j As Integer For i = 0 To 9 Dim t(9) As Integer t(i) = i For j = 0 To 9: Console.Write(t(j)): Next: Console.WriteLine() Next
それは大昔のVisualじゃないBASICには 配列の要素数が10個以下の場合は配列宣言は不要 とかいう決まりがあったからだと思った
数値ってintegerとlongどちらで宣言するのが良いのでしょうか
どっちでもいいよ
370 :
デフォルトの名無しさん :2010/02/25(木) 13:46:04
ありがとうございます!!
でもまあ必要ない限りはIntegerだろ
integer で事足りるなら integer。 不要なメモリは使わないようにすること。
VB6のIntegerは.NETのShort。VB6のLongは.NETのInteger。.NETのLongは64bit整数。
ろくまんごせんなんたらはなにがた?
16bitの型だ .netはushort short
VS2008でASP.NET3.5の開発をしています。 複数のWebページから共通の処理(SubとかFunction)を 呼び出すにはどのようにしたらよいでしょうか? aaa.aspx から処理Xを呼び出す。 bbb.aspx から処理Xを呼び出す。 module.vbを使おうと思ったのですが、これをWebで使おうとすると ここで宣言された変数や関数は、すべてのセッションで共用され てしまうため、セッション同士で値の書き換えをしてしまって 異常な結果を返す可能性があると聞きました。 どうしたらよいでしょうか?
まずWEBサイトなのかWEBアプリなのかも明記した明記したほうがいいと思う SyncLock(つづり忘れた)かけるとかでいいんであればそうすればいいだろうし どんな使い方するかによるんじゃね? 例えばアクセスカウンタなんかは簡単なサンプルになるんじゃないかな?と思うけど
378 :
376 :2010/02/25(木) 18:25:56
>>377 Webアプリです。
WebアプリとWebサイトでは、やり方が異なるのでしょうか?
アクセスカウンタでサンプルを作ってみます。
381 :
376 :2010/02/25(木) 20:43:58
>>380 たしかに聞いた話と違いました・・・ガセだったのか・・・?
Module Module1
Function cntup(ByVal cnt As Integer, ByVal sleeptime As Integer) As Integer
Dim x As Integer
x = cnt + 5
System.Threading.Thread.Sleep(sleeptime)
cntup = x
End Function
End Module
カウンターとはちょっと違うけど、ローカル変数x が上書きされるか
試す処理を書いてみました。
ブラウザを2つ立ち上げることで2つのセッッションから、この処理
を同時処理させてみました。
セッション1 cntup(1,1000)
これは、x = 1+5 = 6 を1秒後に戻します。
セッション2 cntup(8,10000)
これは、x = 8+5=13 を10秒後に戻します。
まず、セッション2を実行して、10秒経過する間にセッション1を実行しました。
噂どおりならセッション2のxの値は、セッション1でセットした6が
返るはずです。
しかし、結果は、両セッションとも正しい数値を返しました。
ローカル変数が勝手に書き換わるとか怖すぎるだろ 問題になるのはモジュールのフィールドの話 モジュールじゃなくてもSharedフィールドなら同じ問題が起こる
383 :
376 :2010/02/25(木) 21:15:28
>>382 そうですよね・・・Webの開発では、Moduleを使わない方がいいと
聞いたのですが、大丈夫みたいですね。
ちなみにセッション変数でも試してみましたが、問題なかったです。
Module Module1
Function cntup2(ByVal sleeptime As Integer) As Integer
HttpContext.Current.Session("cnt") = HttpContext.Current.Session("cnt") + 5
System.Threading.Thread.Sleep(sleeptime)
cntup2 = HttpContext.Current.Session("cnt")
End Function
End Module
なんかいろいろ間違ってる悪寒。
386 :
376 :2010/02/25(木) 21:35:06
>>384 Moduleの中でセッション変数を使ってるところ?
その辺もそうだし、そもそも渡し方も変だし。 あと、俺なら、共通ライブラリにして参照設定すると思う。
>>383 お前みたいなやつが問題ないって言いながら
いつの間にかフィールド使ってぶち壊すんだよ。
しかもModule使いたがるやつは大抵旧VB使いで グローバル変数を平気で使う習慣があったりして 見事にはまったりする。
>>385 ポストデータではなく、クッキー(txtファイル)に「;tepo=don」を追加したら書き込めたよ。
391 :
376 :2010/02/26(金) 06:30:20
共通ライブラリも1つの手ですが、
1つのプロジェクトの中で、複数のWebページから
共通に利用する関数は、どこに配置するのでしょうか?
>>389 そういう意見もいくつか聞いています。
module.vbを使わないとしたら、class.vbですか?
どうしているのでしょうか?
Webサイトなら App_Code、Webアプリなら、普通にクラス。
クラスだろうがモジュールだろうが関係なくね? 問題は変数のスコープを理解してるかどうかで
スコープの話なんかプログラミング以前の準備運動レベルだぞ 最低限の基礎的な「プログラミングの感覚」は落ち着いて本読んで身に付けようよ
>>376 もう少しASP.NETアプリがIISとともにどう動くのかマイクロサイトのサイトでも何でもいいからきっちりドキュメント読むべき
何も分からずにやると
「高負荷になるとセッションがなくなってしまうんです><」
みたいに絶対言いだすやつがいるから
IISのセッションを無限時間にするには Session.TimeOut=60*24*365*100 と書いておけばいいの?
>>392 その言い方は語弊がありそうだ
WebサイトならApp_Codeにclass.vbつっこむ
Webアプリなら、アセンブリ(dll)つくってbinにつっこむ
なんにしても使うのはクラス
今のVB.NETでModuleとかもう存在を忘れろ
つかASP.NETのWEBサイトでモジュールが動くことにびっくりしたわ
400 :
デフォルトの名無しさん :2010/02/26(金) 15:20:57
401 :
376 :2010/02/26(金) 16:27:57
ありがとうございます。 やはり、クラスなのですね。 スコープを意識してまとめるとこんな感じでしょうか。 Applicationレベル 変数:Application変数、shared、Module内でフィールド宣言 関数:Module内に記述 セッションレベル 変数:セッション変数 関数:(セッションレベルのスコープでの関数の概念は無し) ページレベル(Webフォーム) 変数:Webフォームクラス内で宣言 関数:Webフォームクラス内に記述 クラス(class.vb)は、どのレベルからでも使える。 クラスから生成したインスタンスは、呼び出した側のスコープが範囲内となる。 但し、クラス内でsharedしているものは、アプリ全体で同じクラスのインスタンスは 値を共有する。従って、セッションを意識するWeb系の開発では取扱い注意。
402 :
376 :2010/02/26(金) 16:38:05
>>397 Webアプリなのですが、プロジェクトの直下にclass.vbを配置して使えてます。
別途、dllを作った方がよいのでしょうか?
試しに
>>381 をクラスで作ってみました。
Webフォームでこのクラスのインスタンスを作成して処理を実行しました。
実験のため、変数xは、わざとFunctionの外で宣言しています。
Public Class Class1
Private x As Integer
Public Function cntup3(ByVal cnt As Integer, ByVal sleeptime As Integer)
x = cnt + 5
System.Threading.Thread.Sleep(sleeptime)
cntup3 = x
End Function
End Class
>>381 と同じテストをして、複数セッションからの同時処理でも各々のセッションで
正しい結果を受け取ることを確認しました。
403 :
376 :2010/02/26(金) 16:38:51
次に、xをSharedしてみました。 Public Class Class1 Private Shared x As Integer Public Function cntup3(ByVal cnt As Integer, ByVal sleeptime As Integer) x = cnt + 5 System.Threading.Thread.Sleep(sleeptime) cntup3 = x End Function End Class これは、複数セッションでxを書き換えてしまうため、正しくない結果となりました。 「正しくない」とは、最後にこのクラスを実行したときの値が他のセッションでも 反映されるというものです。
その程度の事で検証が終わってるとは思えないが… 問題は 仮に共通の部分がXだとして X=1として AがXを読み込みする BがXを読み込みする Aが読み込んだXを+1して書き終えてから Bが読み込んだXを+1して書き終えた 本来であればXが3になる予定のものが2になってる こういうことが起こりえると言いたいと思うんだわ
>>399 サイトの紹介ありがとうございます。
javaとの関連文章を探すのであれば、C#を見た方がよさそうですね。
406 :
376 :2010/02/26(金) 17:39:53
>>404 いえ、「起こりえるといいたい」のではなく、
「起こるはずがないと思うが、一部の人がModuleではそれが
起こるといってるが本当ですか?」
というものです。
これに対する回答は
>>382 さんのフィールドの話でした。
Module内で記述した関数の中の変数までは影響しないということです。
それで、376が一番したいことは、複数のWebフォームで同じ処理が
あるので、これを1つの関数として共通して呼び出したい。
この処理が、各セッションで潰しあうことなく独立して動作してほしいが、
どこにどうやって記述するのですか?
というものです。
これに対する回答は、dllを別途作成して参照するか、class.vbに記述するというものでした。
>>404 さんが示した処理では、
セッションAの戻り値は、2、セッションBの戻り値も2になってほしい。
しかし、x=3になるのであれば、Applicatonレベルの変数になっているということで
セッション毎に独立していないということになります。
407 :
デフォルトの名無しさん :2010/02/26(金) 18:50:43
変数のスコープが関数の中に閉じてる限りはどこでもいい。 ローカル変数は必ず「関数に入るとき」に毎回新しく作られる。 実行環境は全く関係ない。 もうちょっと複雑な処理で状態を持ちたい場合はクラスにして インスタンスをセッションごとに作ればいい。
Classなら自分で明示的にSharedにしなきゃ、 意図せずフィールドが共有されてるなんてことは起こらないが、 Moduleを使うと意図せずSharedなフィールドを使ってることがある。 っていうかあまり意識せずにそういうことをしてしまう奴がいる。 だから使わない方が無難というだけ。
悪いことしてない人はセキュリティ気にする必要ないんだが
誤爆?
C#相談室とかじゃないか?
412 :
397 :2010/02/26(金) 23:56:38
すまん、Webアプリだって書いてたな。Webサイトと勘違いしてたわ まあ、Webアプリだとビルドすると全てのコードはdllになってbinフォルダに格納されるわけで... 今の.NETでは関数は普通、何かのクラスのメソッド(Sub,Function)として実装される メソッドや変数がどの範囲からアクセスできるかは、そのメソッドと変数の定義による この考え方を一般に変数のスコープっていうんだ。VB.NETだとアクセスレベルとも言われる モジュールってのは特殊なスコープと寿命をもつ特殊なクラスっぽいもの 過去のVBとの互換以外に使う理由も必要性もありません 変数のスコープや寿命についての考え方は今の言語ならほぼ必須の考え方なので 頑張って理解してくれ ちなみにアプリケーションやセッションっていうのは、 .NETの変数のスコープの概念ではない。ASP.NET固有の概念 ApplicatinはASP.NETの実行単位なんで、ほぼグローバルと同意と考えていいが Sessionは.NETに該当する概念はない。 Sessionとはその単位で独立したものではなくて、ページ単位で独立しているものを 関連付けるものだ
アクセスレベルとスコープは違うぞ アクセスレベルで決まるスコープもあるけどそうでないスコープもある
ところでみんなはどっち使ってる? サイト?アプリ?
Webアプリだなぁ。
アプリのがクラス使うときとか楽だよね
サイト使ってるなー クラスとか使うときは普通に別dllにしちゃうしねー
>>413 とあるスコープ内で、そのスコープ外で定義されたものが
使えるかどうかがアクセスレベル、って感じか
まあとりあえずアクセスレベルもスコープの一種として覚えてても問題ないんじゃない
>>414 ASP.NET 1.1からの俺はWEBアプリ派
ちょろっとしたクラスとか使いたいときにはApp_Codeが欲しくなることもある
というかWebアプリ作ってたはずなのにApp_Code使いだして、気がつくと
WebアプリとWebサイトの混在したわけのわからんサイト作ってたりw
質問 独学でVB.NETを勉強しているのですが、例外クラスが 準備されている理由やその使い方などがぼんやりと しか把握できませんでしたので、その理解が正しいかの 確認をしたいと思い、ここで質問してみました。 例外クラスは、アプリが予期せぬエラーが出て終了して しまった際、それがどの部分の処理であるかの確認を するために準備されているものである。 (あくまで、デバッグをしやすくする為のものであり、 エラーが起きにくくする為に準備されたクラスではない) なので、独自のアプリを作る際は、例外を継承した 独自例外クラスを作っておいて、アプリの内部の処理の部分で エラーが起きると想定される部分で、その独自例外クラスが 実行されるようにしておくと、デバッグもしやすくなる。 このような理解でよろしいのでしょうか。 間違いや不足点などがありましたらよろしくお願いします。
いや、別に例外クラスはデバッグのためにあるのではない たんに、エラーが起きたときにエラーを通知するためにあるだけで アプリ内で例外を検知してしかるべき処理をするために使うのが本来の目的 つまり、予期できるエラーの予期と処理につかう アプリが終了したときに使うのなら、アプリでハンドリングできる形にする必要はないわな
例外クラスって何?
通常、独自の型の例外を投げる場合は「キャッチして適切に処理してほしい」という意味なので デバッグ目的で独自の例外を投げるのは良くない。適当にInvalidOperationExceptionなどを投げた方がいい。
423 :
419 :2010/02/27(土) 16:39:16
>>420 >>422 レスありがとうございます。
レスを読むことで、イメージが明確になってきたような気がします。
例外クラスが無いプログラミング言語において、
関数を書く際、返り値が必要ない場合であっても、途中で
エラーが起きて処理が続行出来なくなったかを返す意味合いで
返り値があるように書く場合がありますが、それの延長のものが
例外クラスと考えるとよろしいのでしょうか。
正常に処理が終了したら0で、引数の値がおかしい場合は1で
それ以外の予期しない場合は2で・・・という感じで定義して
書いたりするのを例外クラス名で表記すると分かりやすいよね、
みたいな。
メソッドの使い方が間違ってる場合(規約違反)と、予期できて回復可能かもしれないエラーは区別する。 前者はアサートを使ってもいいし例外を投げてもいいけど通常その例外をキャッチしてはいけない。 ArgumentExceptionやInvalidOperationExceptionがその例。キャッチさせるために投げてるわけじゃなく コードを修正しろという意味なので独自の例外クラスを作る必要もない。 後者は利用側に適切に処理させるために例外を投げるので、具体的な独自の型の例外を作ったほうがよい。
例外の取り扱いについては解説してる本とか少ないんだよな ちょっと古くて基本的にASP.NETの本なんだが .NETエンタープライズWebアプリケーション開発技術大全 って本がある それのVol.3に例外処理の考え方について書いてあるので 入手できるなら読んでみれば参考になるかと
ただ一つ言えることは Try 例外が出そうな処理 Catch ex As Exception Console.WriteLine(ex) End Try こればっかり書く奴は死ねってこと
>>423 なんかナンセンスなこと書いてる人が多いのであまり真に受けない方がいいと思う。
まあ意味不明なので真に受けようもないかw
例外なんてそんな難しく考えることはない。
コンピュータの処理(手続きとか関数とか言ってもいいけど)とは、何らかの入力にたいして
何らかの結果を出力すること。
例外とかエラーとかは、要するにこの何らかの理由でこの入力に対して出力を吐き出す操作が
正常に遂行できない事態のこと。
「例外機構」の存在意義と「例外オブジェクト」の存在意義は分けて理解した方がいいと思う。
前者の存在意義は、プログラマが想定していない例外が発生した場合(要するにバグがある)
プログラムを強制終了させるため。
後者の存在意義は、単なるエラーコードより、エラーに関するさまざまな情報が
一つのオブジェクトに一元化されている方が扱いやすいから。
>>428 は例外処理しないの?
ファイルアクセスに失敗したら強制終了するんだろうか
>>429 短い文章なんだから、反論する前にちゃんと読んだらどう?
431 :
419 :2010/02/27(土) 20:01:24
みなさん、親切な解説や情報ありがとうございます。
>>424 > メソッドの使い方が間違ってる場合(規約違反)と、予期できて回復可能かもしれないエラーは区別する。
私の中では、この区別の概念がありませんでした。しかし、聞いてみるとその通りだと思います。
このような考え方を持つと独自で例外クラスを作った方が良いかの区別がしやすいですね。
>>425 その書籍は、購入しようか迷った事があり、タイトルだけ知っています。
ちょっと古い上に、全部そろえようとすると結構するんですよね。
さらに、@ITにも記事が一部載ってたり・・・
>>426 URL読んで見ます。
>>427 いいたい事は伝わってきました。
どういう類のエラーなのかを書かないと、デバッグの際は分からないですもんね。
>>428 > 「例外機構」の存在意義と「例外オブジェクト」の存在意義は分けて理解した方がいいと思う。
ここの部分は凄く参考になると思いました。
レスを読み返しながらこれまで読んできたサイトを読み返してみたいと思います。
VB.NETにおけるおまじないとは
>>428 は10年前の例外処理から進歩してない気がするな
どの辺がナンセンスでどの辺が意味不明なのか詳しく教えてくれないか
まず君の方からどのあたりが「10年前の例外処理から進歩してない」のか説明してみたら?
まぁこれは荒れるよなw
例外機構の存在意義が、バグがあったときにプログラムを強制終了させるためだって言ってるんだぜ 構造化例外処理が一般的になる前の意見だぜ、それは。だから10年前だって言われてるんだろ (要するにバグがある)って要約がなければ、最大限好意的に解釈すれば プログラマが想定していない例外が、ってくだりで想定された例外がある=構造化例外処理で 処理すべき例外とは別の話だ、と取れなくもないが... その場合、自分以外の人間が作成したプログラムモジュールで例外(それはバグかもしれないし そうでないかもしれない)が発生したときにプログラムを強制終了したくないかもしれない 例外がでたからプログラムを強制終了とかいうのは、プログラムの全てを自前で作ってた時代の話だな ほんとに10年前かどうかはわからんが、昔の考え方には違いないわな で、どの辺がナンセンスでどこが意味不明なんだ?
>>436 おはよう。
なんか、変な寝言口走っていたよ?
例外って言うのは 停電 とか予期せぬ事の事?
>>436 悪いけど全部がナンセンス。
自分の頭で物事をちゃんと咀嚼してないからそういう事になる。
俺はちゃんと「例外とはそもそも何なのか」を説明した後、「例外そのもの」と
「例外機構」と「例外オブジェクト」を峻別した上で、
「例外機構の存在意義はプログラマが想定していない例外が発生した時プログラムを
強制終了させる事にある」
と言っているのに、もうこんな簡単なことすら君は理解してない。
こういう頭の悪い人との議論はたぶん無駄にしかならないと思うが、では逆に
聞く。
俺の説明が「昔の考え」と言うなら、では現在では例外をどのように定義し、
例外機構の存在意義はどのように考えられているというのか。
まあ無理しなくていいよ本当に。
一人開発なら思う様にやれば良いじゃない コードの書き方に完璧な答えなんて無いのさ
例外機構は異常が発生した時に処理を中断して別の処理を行わせるもの 中断→別の処理 の流れを作るのが目的なんであって中断だけを存在意義と言ってるのがおかしい
S="a" & vbcrlf & "b" & vbcrlf として、 Dim Ary() as string Ary=split(S,vbcrlf) の結果は Ary(2)はそんざいするのだろうかするならどんな値だろうか
やてみればいいじゃん。
3だな
>>443 Split関数とか今更使うなとは言わないが、使うならMSDNに書いてある仕様ぐらい
読めばいいのに。
っていうか、プログラマなら読まなくてもだいたい見当つかないか?
Split("a\b\c\", "\")とSplit("a\b\c", "\")の結果が同じになるような仕様だったら
いろいろ不便だとは思わない?
こういうのもあるな。 str.Split(seps, StringSplitOptions.RemoveEmptyEntries)
文字列を一行ずつ処理したかったらStringReader使った方がやりやすい
Splitって VisualBasic.Splitってながながかかないとつかえないと
>449 Microsoft.VisualBasicは2008ならデフォでインポートされてるが
>440 いや、>436はお前の意見を理解したうえで、 >「例外機構の存在意義はプログラマが想定していない例外が発生した時プログラムを>強制終了させる事にある」 という考え方が、昔の考え方だといってるんだろ? なぜそれが昔の考え方なのかお前に理解できてないんじゃないのか? 現在の例外は、通常の処理ではない状態が起こったときに発生する(させる)んだよ 単にバグでエラーが出たときにだけ発生するんじゃないんだ そして例外をキャプチャし例外の種類に応じて適切な処理をする このための機構が構造化例外処理機構 例外=(プログラムを終了させるべき)エラーって考え方はそれこそナンセンスだぜ では逆に聞く、とか言わないで、素直に現在の例外処理機構を教えてくださいって言えよ
もうめんどくさいからon error resume next でいいよ
>>451 悪いけど全然理解してないから。
誰が「例外=(プログラムを終了させるべき)エラー」なんて言ってるんだ。
本当に頭わるいな。
もう「例外」と「例外機構」をちゃんと区別しましょう、
っていう話の段階から理解してないようだしw
しかし、いきなり「お前」呼ばわりか。
馬鹿の特徴の一つだねw
ちなみに、
「例外機構の存在意義はプログラマが想定していない例外が発生した時プログラムを
強制終了させる事にある」
という、当たり前のことが理解できないのは、そもそも「例外」って何なのかが
理解できてないからだ。
経験上そういう人間が多いことを知っているから、
>>428 でそういうそもそも論から始めてるんだけど、お馬鹿さんに限ってこういう
「そもそも論」が苦手だから困っちゃうな。
VB.NETに関係ないし、よそでやってくれ。
横から見てるとすげえ笑えるけどなw
そもそも前提が間違ってるんだが なんでそんな自信満々に語れるんだろう
なんとなく言いたいことは分かるけど説明に突っ込みどころが多すぎる 人が自分の話をわかってくれないのは周りの頭が悪いからだと思い込んでる人なんだろうな
>>453 どうでもいいがお前も馬鹿がにじみ出てる書き方にしか見えないぞ率直に言って。
議論以前に、428の言ってることを理解できてる人は多分いないから無駄だと思うよ 428以外みんな頭悪いらしいからどうしようもないw
馬鹿がにじみ出てるって、いいよな。ほんとに。 やっぱり、鼻の穴とか目の涙腺とか、頬の皮膚呼吸の穴なんかから、 エキスのようなものがじわーっと顔に広がり、 挙句の果てには、書き込む文章にまでしたたりこんできてるんだろ。 これが人に伝染する病原菌とかだったら怖い話だが、 ただの馬鹿ってところが、なんだかほんわかしてていいよな。
ログを読んでいると、必死に話を脱線させようと頑張っている 一人のむなしい努力に見えてしまうんだが・・・
つーかIDの出ない板でくだらない煽りあいしても不毛なだけ
例外機構や例外クラスの定義は別として、ちょっと確認したいのだが、 メソッドには、その引数の値がおかしいとか、計算処理中でおかしな 値になってしまっていたとか、そういう類になった場合、exceptionを 返してくるので、その種類に応じて適切な処理(messageboxを使って 警告を出して、異常終了しないような処理)をした方がいい、 ということでおk? さらにいうと、自作クラスでメソッドを書く場合も同様な考えで exceptionを出すような設計で考えると、それを使う人が分かりやすくなる。
>>465 基本例外は発生させないようにするべき と俺は思ってる
トレースやなんやらで処理も重くなるし
例えばファイルなんか開く場合だと FileNotFoundExceptionが発生するだろうけど
事前にExistしてエラーメッセージを出す。
例えばチェックしたけど、チェック完了からファイルオープンまでの僅かな間に
ファイルが消された場合は例外発生は致し方ないかと
自分は基本的にエラートラップは
Application.ApplicationExit
とか
Application.ThreadException
で一括でトラップする。
いちいち処理の中に例外処理でログとったりとか書いてるのもめんどくさくない?
修正もめんどくさいし。
他の人は知らないけど俺は基本的に特殊な例を除いて例外は独自にトラップしたりはしない。
クラスの設計に関しては、それでいいと思う。
int返すメソッドとかで勝手にキャッチしてリターンが-1とかになるのも困るし。
クラス設計は使う側が引数とかを事前にチェックしているべきだと思う。
467 :
デフォルトの名無しさん :2010/03/01(月) 12:43:08
結局ドキュメントをちゃんと読めちゃんと書けってこと。 ドキュメントに0から100までの値を指定しろ範囲外なら ArgumentOutOfRangeExceptionを投げるぞと書いてあるなら それは事前にチェックしておくべきでキャッチしたらダメ。例外が出るのは利用側のミス。 ドキュメントに、事前に予測できないような条件で IOExceptionが発生すると書かれてるなら、対処可能ならキャッチして適切に処理するだけ。
事前にチェックしてしかるべき処理をしろってのはまあ本筋なんだろうけど たとえば、範囲が0から100まででなければそれ専用の例外が発生する設計なら 事前チェックするより、投げて例外が発生するかどうかでチェックした方がいいような気もしないでもない どうせ投げられた側でチェックするんだから、2回もチェックするのが冗長に思えるんだよなぁ
確かにそうだな。 文字変数に数字以外が含まれているかどうかは、 数値変数に代入してエラーが発生するかどうかで 判定してるしな。
はじめまして
プログラミングを始めてみようと思い
VB2008 Express EditionをダウンロードしMSDNを参考にして
http://msdn.microsoft.com/ja-jp/library/xk24xdbe.aspx ここら辺りは勉強したのですがこの後どういう知識をつけていけばいいのかわかりません
ひとつ勉強がてらに作ってみたいと思っているのが
オンラインゲームなどの自動ログインツールで
ブラウザでID、PWを入力しログイン、ゲームスタートなどの動作を
プログラムで自動化し、そのプログラムにID、PWを入力すると
プログラムからゲームが直接起動できるようなものを作りたいと考えています
こういうのを勉強すればいいよなど
なにかアドバイス、指摘等頂ければ幸いです
よろしくお願いします
なんでいきなりそんな難しいものつくるんだよw
基本的に他のアプリケーションに影響を与えるってのは難易度が高い部類
VBがどうというよりWindowsについての知識の問題だしな 全くプログラミングの勉強にはならない
> こういうのを勉強すればいいよなど HTTP
475 :
470 :2010/03/02(火) 21:45:23
なるほど・・・やはり難しいのですね・・・ とりあえず今チュートリアル的なものを見ながらブラウザを作ってみているのですが フォームタイトル(?)フォームのtext部分を変更することは出来ないのでしょうか? 連続の質問となりますがよろしくお願いします
ゲームはUIが独自だから余計に難しい 一般的な方法は無いので個別にゲームを解析するしかない
>>475 できるよ。やり方は、ヘルプに書いてある。
478 :
470 :2010/03/02(火) 21:55:40
479 :
470 :2010/03/02(火) 21:58:23
>>477 ちょっと情報不足だったかもしれないのですが
アプリケーションを起動中にTextboxなどに入れた文字をタイトルとして変更する
という事をしたいのですが
Form1.text = TextBox1.text
では
'WindowsApplication1.Form1' は、既定のインスタンスからそれ自体を参照できません。'Me' を使用してください。
のようなエラーが出てしまうのです・・・
>>478 ログインはできるだろうけど、その先の Flash でどうしようもなくなると思うよ。
>>479 Me を使え、って書いてあるんだから、使えばいいだろ。
>>481 ありがとうございます
Meはてっきり
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
の部分でしか使えないと勝手に思い込んでしまっていました
自分の頭の出来に呆れるほどです・・・
本当申し訳ないです
ここで1から10まで聞くな
ggrks まあ意味も無い議論で埋まるよりはマシかもしれないが
自演乙
fuck u
oh. miss spell
VBでボタンを押したときサウンドを鳴らせたいのですが 相手にファイルを送ったとき人によってファイル位置が変わってしまいますが 再生させることはできるのでしょうか? どこのページ見ても音声ファイルの場所を〜とか書いてあって 自分用にしか作れない説明ばかりでわかりませんでした
言いたいことはなんとなくわかるけど もうちょっと他人に分かるよう話す努力をしてみてくれんか
アプリケーション直下の〜フォルダにサウンドを入れる、とか ルール決めればいいじゃない。 適切なフォルダ構成で展開されるよう圧縮するか インストーラ作ればいいじゃない。
ListViewについて質問です プログラム上からアイテムを選択するには ListView.items(*).selected = true/false にしてListView.select()とやるようなことを見つけたんですが 今テキストボックスで入力を受け付けて入力内容によって選択を変えるというのをやっています 問題はselect()を呼んだ瞬間にキーボードフォーカスがListViewに行って入力がさえぎられるんですが フォーカスを移動せずに選択場所を変えるにはどうすればいいんでしょうか? フォーカスが無くても選択を反転表示するプロパティを設定してるので テキストの入力でリアルタイムにその選択が移動するようにしたいのですが
Selectしなけりゃいい
パスしていするだけだろ? 送るってどうやって送ってるんだ? どの場所に保存してるかくらいわかりそうなもんだが・・・
そんな時のためのWebサービスだろ。 どのクライアントからでも同じ場所にアクセスすれば ファイルの位置の問題は解決する。馬鹿じゃねーの。
お前の方がよっぽど馬鹿だよw
500 :
デフォルトの名無しさん :2010/03/05(金) 02:31:14
あ?
しつもんなんですが GOMぷれいやーのようにデスクトップ右上あたりにもっていくと カチッ!って感じで画面端にくっ付くような事を実現するにはどうすればいいんですか? おねがいします
>>501 GOMぷれいやーがどんな動きするのか知らんけど
移動後の座標が一定範囲内だったら
強制的に移動すればいいのでは
1024*768の場合に
Rightの位置が1014より大きければ右に強制移動
Topの位置が10より小さければ上に強制移動
>>501 こういう動きするソフトけっこうあるけど個人的には好きじゃない
画面端とはちょっとスキマ空けときたい派なんだおれは
設定で画面端にフィットさせるとかいうチェックボックスがあれば良い
"<"と">"に囲まれた文字列を"<"と">"を含めて全て別の文字(とりあえず"a")に置換したいのですが、 どういうコードにすればよろしいでしょうか? "<あいう123abc>"→"a"といった感じです。よろしくお願いします。
>>505 Regex使って"<[^>]*>"を置換
>>506 ありがとうございます
ちなみにそういう記号?はなんというのでしょうか?
正規表現というんですね、失礼しました
asp.netです。 ListViewで作成した列タイトルを動的に設定したいのですが どのようにしたらよいでしょうか? WebFormの定義は下記のとおりです。(レイアウトの部分を抜粋) <asp:ListView ID="ListView1" runat="server"> <LayoutTemplate> <table ID="itemPlaceholderContainer" runat="server" border="1"> <tr id="Tr2" runat="server"><th id="Th1" runat="server"> <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> </th></tr> <tr ID="itemPlaceholder" runat="server"></tr> </table> </LayoutTemplate> ListView1の中のLabel1に列タイトルをセットすることで動的に変更しようとしています。 プログラムの部分は下記のとおりです。 Dim lblth1 As Label = CType(ListView1.FindControl("Label1"), Label) lblth1.Text = "項目1" これを実行すると、"項目1"を代入するところでエラーになります。 「オブジェクトインスタンスの作成にはnewキーワードを使用します」 どのように記述したらよいのでしょうか?
asp.netは、もう国内無料ホスティングも終わって これからは企業内開発でしか使われなくなる言語。 自分の所有スキルを磨きたいのなら、 javaかphpでプログラム組んだ方がいい。 vb.netはまだ無料で開発、公開できるからいいけど asp.netは無料で公開できなくなる。 asp.netは、vb.net でも c#でも組めるが 社内サーバなど自由に使えるサーバがないと意味がないよ。
WebProg板に移動して質問しなおした方がいいかもね。
Labelオブジェクトのインスタンスが取れてないんじゃね? とか思ったけど、それならヌルリかなぁ。
513 :
509 :2010/03/06(土) 13:01:54
>>510 そうですね。そう思います。社内環境でASP.NETしか使えない状況です。
>>511 ありがとうございます。
そうします。
>>512 どうやらそのようです。
配列で二種類の文字列でできるだけ高速で配列に格納したい場合、 arraylistとsplitを組み合わせるべきでしょうか? 具体的には2chのdatで、"<>"と改行を区切り文字にしたいのです よろしくお願いします
String.Splitのオーバーロードの中にStringの配列を引数に取るものがある
ありがとうございます!
tillとuntillは同じ意味だから Do Loop Till 〜 でも動くの?
試してみれば
死ぬよ?
raiseeventの使い方を教えてください。 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click raiseevent Button1.Click End Sub とコードを書くと 'Button1_Click' は 'WindowsApplication1.Form1' のイベントではありません。 とでます。Button2.ClickでButton1.Clickと同じ動作をさせたいのですが、どうすれば良いでしょうか
ありがとうございました
現在の状態をまるごと保存することってできますか? textboxの内容や、チェックボックス
すいません書き込んでしまいました textboxの内容や、チェックボックス、オブジェクトなどの状態もそのまんま保存したいのです 設定を個別にiniファイルやレジストリに書き込むしか無いのでしょうか
526 :
デフォルトの名無しさん :2010/03/09(火) 11:16:35
テンプレのサイトいくつかなくなってるね
527 :
デフォルトの名無しさん :2010/03/09(火) 13:17:50
チェックボックスやテキストボックスによって投影されてる元のデータを保存するんであって コントロールの状態を保存するというような考え方はしない
休止状態のようなことができれば便利かなー?と思ってましたが無理ですかー ありがとうございました
>>528 少なくともコントロールの状態については、アプリケーション設定とやらを使えば
2005以降はアホみたいに簡単に保存できるよ。
まあ基本は
>>527 の言うとおりで、本来はアプリケーション設定は
フォームのサイズとかコントロールの配置ぐらいにしか使うべきではないけど。
>>529 うおおおこれがほしかったんですーありがとうございました
休止状態で保存しなければいけないほど入力数が多いのだろうか・・・ なんつうか、思想的に微妙だと思うんだが
前回の状態で起動してほしいというのは結構ある要望だとおもうな うちではファイルに保存してるけど
>>532 表示位置とかはあると思うんだけどね
入力内容も結構あるのか・・・
うちはそう言った要望特にないからイイほうなのかな?
HDDクラッシュで実行ファイルだけ残ってしまったVB.NETのアプリがあるんだけど さくっとディスコンパイルしてくれるツール知りませんか? 探してみたけどうまく見つけられないです、お助けを
>>531 入力というよりタブブラウザのようなイメージじゃないかな
>>534 Reflector for .NET
とかじゃだめ?
最近使ってないからまだあるか知らんけど
難読化されてたらきびしそうだ気がする
失礼します。 Jpegファイルを読み込んで加工する為にビットマップに変換して保存しているのですが、2回目の保存でGDI+汎用エラーが出てしまいます。 ファイルが使用中になっている為と思われるのですが、使用中から解放するにはどのようにすれば良いのでしょうか? Dim _bmpJ As New Bitmap("d:\Blue.jpg") Dim _bmp As New Bitmap(640, 480) _bmpJ.Save("d:\tmp.bmp", System.Drawing.Imaging.ImageFormat.Bmp) _bmp = New System.Drawing.Bitmap("d:\tmp.bmp") _bmpJ.Save("d:\tmp.bmp", System.Drawing.Imaging.ImageFormat.Bmp) ' ←ここで「GDI+ で汎用エラーが発生しました。」 _bmp = New System.Drawing.Bitmap("d:\tmp.bmp") _bmp.Dispose() _bmpJ.Dispose()
もうこの手の質問秋田・・・・
>>537 ありがとう、難読化はしてません
DLしてちょっと試してみました、ウ〜〜ム
コンパイル可能なソースコードとして出てくるわけじゃあないんですね
もとのソースに近い状態まで復元するのはかなり骨が折れそうですが
もうちょっといじってみます
特定のポートを閉じたい(簡易ファイアーウォールを作りたい)場合はどうすれば良いのでしょうか?
VBってデリゲートの反変性サポートしてないんだっけ? なんか以前は普通に、 Funtion Hoge(sender as Object, e as EventArgs) を、例えばMouseClickイベントに紐付けできたような記憶があるんだが 今日試したら出来ないのな。 C#だと普通に出来るのに何だろうな。
エフェクトの多いゲームを作りたい場合、directxというものを使った方が良いのでしょうか
というか使わないと無理 どんだけ頑張ってもゲームになるほどのフレームレートは出ない
>>546 なるほど、ありがとうございます
ライブラリ探してやってみまする
DXライブラリのC#用が使えるよ 結構便利だけどvbのサンプルはあまり無いみたい
依存関係についての質問です。 AクラスからBクラスのプロパティ(Cクラスとして宣言)にアクセスする場合、 AクラスとCクラスの間に依存関係にあるのでしょうか? 例えば、Bクラス内にてCというプロパティがCクラスの方として宣言されていて、 Cクラス内にはtest1,test2をstring型のプロパティとして宣言している状態で、 AクラスからB.C.test1と記述しA内のフィールドに代入する場合です。 また、よく複雑な依存関係は良い設計ではないといいますが、 具体的にどのような設計が複雑な依存関係と言えるのでしょうか? 依存関係などに詳しい書籍、Webサイトなど教えていただけたら幸いです。 よろしくお願いします。
>>549 一度、コーディングなどから離れて、もっと広い視野になって、
オブジェクト指向の理論について学んだ方が良いと思う。
厳密なものは無い。
いろいろなプログラムで使う事が出来る汎用性のあるクラス設計が
出来る事、というのが目的なので、その目的を考えると答えが
見つかってくるんじゃないかな。
Me.BackColor()のRGB値を1ずつ下げたいのですがやり方がよくわかりません Me.BackColor.ToArgb() を System.Drawing.ColorTranslator.FromOle(RGB(1, 1, 1)) のRGB()の部分に入れれば何とかなりそう?な感じがするんですがエラーばっかりです どなたか助けて下さい〜
RとGとBからColor.FromArgb
そうするのですか、ありがとうございます
>>551 ありがとうございます。
オブジェクト指向を基礎から学びなおします。
bitmapクラスで読み書きしたファイルが解放されるタイミングがよくわからねぇ・・・。 連続で読むとエラーなのに、放置してたら解放されてるとか。
要するに使い終わったらDisposeしろってことさ
現在、イベントログを出力するプログラムを作成しているのですが、 一部のマシン上でイベントログが以下のように出力されてしまいます。 『イベント ID (50000) (ソース *** 内) に関する説明が見つかりませんでした。 リモート コンピュータからメッセージを表示するために必要なレジストリ情報またはメッセージ DLL ファイルが ローカル コンピュータにない可能性があります。 この説明を取得するために /AUXSOURCE= フラグを使用することができる可能性があります。 詳細については、ヘルプとサポートを参照してください。次の情報はイベントの一部です: ***』 インターネットで調査を行うと、『EventLogMessages.dll』というメッセージのDLLが インストールされていない場合に発生するようなのですが、 現象が発生するマシンにはインストールされているようでした。 (レジストリ内にも記載されていた) 開発言語及び現象が発生しているマシンのOSは以下です。 開発言語:VB.NET2005 発生中のOS:Windows2003Server ※WinXPのマシンでは正常にイベント出力される事を確認 他に何か原因はありますでしょうか?
HTML ドキュメン形式でチャットログが生成される素材を VBを使って整理してみたいと考えています (それを元に特定のキーワードに反応するように) ログはチャットの性質上、それなりのスピードで流れ 常に更新されていきます なのでログを最新な状態同期をとる方法に困っています 何かヒントがあれば教えて頂けると幸いです 開発言語:VB.NET2005
mdiで二つ質問です。 一つ目。form1からform2を呼び出すのですが、 エクセルのセルのように大きさを連動して変えたいのですが、そういったことは出来ますか? form1を正方形とすると、form2の一つ目を10:7、二つ目を10:3のように呼び出し、 真ん中の境界線をドラッグして10:5、10:5のように変えたりしたいと思います またこういうことがもっと簡単に実現できるコントロールが他にあれば、教えてください 二つ目。form2をform1のtextbox1に呼び出したすることは出来ますか? よろしくお願いします。
1つ目 そこまで明確にやりたいことが決定しているのに なぜやってみてから質問しない 設計書はあるんだからコーディングするだけだろうに あと、そんなことできるコントロールなんて標準ではないだろう 2つ目 TextBoxの中にフォームを表示するとかそんなこと? 日本語で頼む
>>561 ないですか、ありがとうございました
サイズ変更で何とかやってみます
2つめはそうです。
textbox等、フォーム以外のコントロールの中にフォームを表示したいのです
いろいろ説明めんどくさいからとりあえずコンテナとかで調べてみて・・・
ありがとうございます!
>>559 HTML ドキュメン形式なるものがどんなのか不明
生成される素材って、どこにどんな風に生成されるのか不明
そこにVBをどう絡めるのか不明
ログがどこに流れてどういう風に更新されているのか不明
ツッコミ切れねぇ
>>559 どんなデータ形式をどんなふうに整理しタイのかが判らないと無理じゃね?
何が聞きたいのかも不明瞭
何かヒントがあれば とは言ってるけどどんなヒントを出せばいいのかが判らない
なので今出せるヒントは もう少しkwsk
意味がわからないの俺だけかと思ったけど みんなわからなくてうれしー
>>563 おかげさまでTableLayoutPanelにたどり着きました
本当にありがとうございました
>>568 はフォームをパネルに出して何がしたいんだw
そういうのは99%、麻疹や中二病みたいなもんだ、気にしてやるな。
>>569 MDIのブラウザを作ってみたいと思ってまして、
それぞれのウィンドウが境界線を触るだけで表示サイズ変更できれば便利かと思ったんです
単体のブラウザはできているので、そのフォームごと呼び出せたら便利かな、と・・
どうもコントロールの中にフォームは呼び出せないようなので、
TableLayoutPanelとwebbrowserを組み合わせようと思います。
すいません便利というのは間違いですね。 そういうのが無いようなので作ってみたかったんです。
まてまて・・・・ 親フォームMDIにすりゃいいだけじゃねぇのか?
えっ
ユーザーコントロールをコンパイルしたDLLにプロテクト(自分以外の人が使えないように)を 簡単にかける方法を教えて下さい。 Releaseモードでコンパイルするときにプロテクトをかけることはできないのでしょうか? ツールはVisualStudio2008Proを使用しています。
無理。
質問です。 VB6に有ったIMEStatus関数はどこへ行ったんですか? 現在の入力モードを取得できる関数は無くなったんですか?
うん無くなった
>>578 ありがとうございます。
では、モードの取得はどうすればよいのでしょうか。
ImmGetConversionStatus関数
ありがとうございます。 API呼出が必要になったんですね。
>>575 です。
>>576 それでは、ユーザーコントロールのDLLをVS2008で
ツール→ツールボックスアイテムの選択
でDLLを指定したら追加されてしまうのは仕方が無いんですね?
うん。
>>583 そうしても嫌ならシリアル入力させるとかしないとダメだろ
どっちにしろ使うときにチェックかけれるだけで参照されるのは防げない
市販コントロールのDLL使い放題になってしまうからな。
VB 2008 Express Editionを使用して
http://dobon.net/vb/dotnet/programing/mysettings.html ここにあるような方法でテキストボックスの値を保存しています。
基本的に問題なく書込み読み込みできているのですが、
保存しようとした値が半角空白のみだった場合にうまく復元されません。
app.configを覗いてみると、半角空白のみだった場合は
<setting name="testString" serializeAs="String">
<value>
</value>
</setting>
このように保存されていて、読み込み時に</value>の前のインデントの空白が値として読み込まれてしまっているぽいのですが・・・
使い方や設定等に問題があるのでしょうか
そんなもんだから気にするな。 どうしても気になるなら、[] とかを付けて保存するようにして、復元するときに外す とかすればいいよ。
XMLと空白文字は相性がよろしくないしなー
URLエンコードして格納するとか
591 :
587 :2010/03/13(土) 17:57:34
なるほどそういうもんなんですね
まぁ
>>588 さんの例の様に自分でデータ弄れば回避はいくらでもできそうなのでその方向で何とかすることにします
>>587 そんな馬鹿なことあるか、と思って試したみたけど、
ちゃんと保存されるでしょ。
ただし、確かにMultiline = Trueの時には、存在しないはずの改行が入るバグがあるようだけど、
それにしても空文字になったりはしない。
そもそもアプリケーション設定の保存先ってapp.configじゃないしw
設定のスコープを「アプリケーション」にしてる、なんてオチだったりしない?
>>592 すいませんuser.configの間違いでした
スコープはユーザーにしてます
しかしMultilineはfalseのままですね・・・
やっぱり何かしら間違ってるのでしょうか
あとはVB固有の問題っていうか、アプリケーションフレームワークを使ってないのに Saveしてないとかね
595 :
587 :2010/03/13(土) 18:28:34
>>594 うーん、きちんと終了の度に保存されていますね
SplitContainerは二つにしかわけることができないんでしょうか
好きにネストすればいいよ
ありがとございます
textboxをプログラムの途中で作ってみたいのですが、 どうやればいいんでしょうか。↓だとインスタンスは作成されているようですが見つかりません。 Dim sss As New TextBox sss.Show()
ggr textbox一つだけ配置したフォーム作って保存してから、そのフォームの.Designer.vbをメモ帳で開いてみ。
おおなるほどありがとうございました
動的コントロール
webbrowserについて教えてください。 フォームに貼り付けただけのwebbrowserコントロールに 自動ログイン設定されているウェブサイトのURLを ドロップすると画面は表示されますが、ログイン情報は わたってないようでゲストさん扱いでした。 これは、自分でクッキーを探してセットしてnavigateメソッドを 呼び出さないといけないということですか? またコンテンツ内のmetaタグにrefreshが記述されていた場合は 自分でrefreshしないといけないということでしょうか。
おまんこ
おちんこ
>>603 クッキーはIEと共有だからIEでログインしとけばいいはず
>>606 さん、ありがとうございます。
さっそく実験してみたのですが、やはりゲストさん扱いでした。
テストしたのはIEでポイントサイトにログイン(というか自動でログイン済み)して、
次に新規formにwebbrowserコントロールを貼り付けただけの画面を起動し、
そこにURLをドロップしてみたのですが、ようこそゲストさんになってしまいました。
他のサイトはどうなの?例えばニコニコ動画とか 俺的にはニコニコは大丈夫だよ
>>608 ニコ動もやってみましたがダメでした。
IE側でログインしてそこのリンクをドロップしてみたら
ログイン画面が出てきましたorz
IEのバージョンの問題とか?
vb .netにもDanbling Pointer問題は発生するのでしょうか?
すみません、
>>612 は Dangling Pointerのタイポです
読み替えてください
>>610 .
>>611 さん
一度webbrowserコントロール内でログイン後、IEも開発画面も落として
再度起動し、IEからリンクをドロップしてみた所、無事ログインされた状態になりました。
この状況だとクッキーはIEと共用になってないということですよね?
OSはVistaでIEのバージョンは8.0.6001.18882となってます。
IEの「インターネットオプション」でゾーンの設定は「中」にしているのですが、
これが怪しいのかと思い「低」にしてみたのですが結果は変わりませんでした。
Web巡回アプリを作るとしたら、ログイン画面が出てるか判断して
IDやパスワードをプログラムから入力させて・・・という処理を加えないとダメってことですよね。
とりあえずクッキーが共有されないのは君だけなんで 何とも言えないな
VBの標準のWebBrowserはIEと共有だと思ったけどなぁ
直前にアクティブだったコントロール(textbox)を引数にし、そのtextbox.textを変えると言うプログラムを作っています ですが、 Public Function〜の行で 定数式が必要です とエラーが出てしまいます。何がダメなんでしょうか? Public Function yomi(Optional ByVal oCon As TextBox = TextBox15) 'ここでエラーが出ます End Function
そりゃー無理だろ。
DataTable内に格納されたDataRowをランダムで並換方法とかってありますか? NUMBER ______________ 1 2 3 ↓ランダムに並べ替えた結果 3 1 2 偏りが無く並び替えたいです。
これは新し……くもないの? このスレでも見たことないが
>>620 は
>>617 だた
>>619 新しいInteger列をDataTableに追加して、
行数分のInteger配列を用意して0から一つずつ埋めてそれをシャッフルして、
各行の追加した列に設定していって、
でDataView.Sortでその列でソートさせる
>>622 素早いレスに感謝します。どうもありがとうございます。
>>618 なんで無理なんでしょう?本当にわかりません・・
textbox15はもちろんあります。関数呼び出しの時、指定しなかった時はこれを指定したいんです
Optional ByVal oCon As TextBox =Nothingではエラーは出ませんが、これだと無いのと同じです
Optional を付けなければエラーは出ませんが、今までの関数呼び出し部分を全部変えることになりますし
そもそも何故ダメなのか分からないのがもどかしいので助けて下さい><
定数じゃないから。
Public Function yomi() End Function をもう一個作ればいいよ
>>625 なるほど分かりました、ありがとうございます!
コントロールはフォームの生成の後に作られるんですね。勉強になりました
>>626 ありがとうございます。解決出来そうな気がします
Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub hoge() MsgBox("hoge") End Sub Private Sub hoge(ByVal ocol As TextBox) MsgBox("hoge2") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call hoge(TextBox1) End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Call hoge(TextBox1) End Sub End Class
間違えた Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub hoge() Call hoge(TextBox1) End Sub Private Sub hoge(ByVal ocol As TextBox) MsgBox("hoge2") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Call hoge() End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Call hoge(TextBox1) End Sub End Class
よこやりすみません。初心者です。 VB2005から Call は記述しなくてもよくなったのでは なかったでしたっけ? トンチンカンなこと言ったらごめんなさい。
そうだね
そう言えばVB6でもCallなしで呼べたな
VB6だとカッコが勝手に取れたりしてうざかったので Call使ってたな
あれ前からだったのか
俺は関数を呼び出してるって目印に、毎回Callつけてる
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click Dim dtab As New DataTable Dim drow As DataRow dtab.Columns.Add("f0") dtab.Columns.Add("f1") dtab.Columns.Add("f2") drow = dtab.NewRow drow(0) = "a" drow(1) = "b" drow(2) = "c" dtab.Rows.Add(drow) drow = dtab.NewRow drow(0) = "d" drow(1) = "e" drow(2) = "f" dtab.Rows.Add(drow) Call objwatasi(dtab) GridView1.DataSource = dtab GridView1.DataBind() End Sub Protected Sub objwatasi(ByVal wtab As DataTable) wtab(0)("f0") = "x" End Sub
638 :
637 :2010/03/16(火) 18:42:13
これを実行した結果のGridViewは以下のとおりです。 f0 f1 f2 x b c d e f 呼出元が変わっています。ByVal wtabとしているのに参照渡しに。 そうなる理由は、wtabには値渡ししているが、オブジェクトが参照型であることから、その値は参照アドレスであり、事実上、参照渡ししているのと同じことになります。 ここで呼出元が変わらないようにするにはどうしたらよいでしょうか?
Copy()したのでも渡しとけば
class table (a as string........ b as integer....... c as integer.... d as string....... ) dim atable as new list (of table) というのがあって、このa、bをキーにソートしたいのですが、 IComparerを使わないとソートできないのでしょうか? SQLでいう select a,b,c,d from table order by a,b みたいなことをしたいのですが、簡単に実現できる方法は 他にないでしょうか。 DBに放り込むのがいいかもしれませんが、ソートするため だけに使うのは気が引けます。 ずるい方法でもあればありがたいのですが、VB初めてまだ1ヶ月では 何も思い浮かびませんでしたorz for each で取り出すときにキー順に並んでさえすればいいのですが 素直にIComparerを使わないといけないのでしょうか。
VB2005ならICopmpare(Of table)しかないな VB2008ならLinq OrderBy辺りで検索してみるとか
>>641 ,
>>642 さん、ありがとうございます。
listviewをヒントに探している途中でみつけたのですが、もしかして
もともとdatatableを使うように変更してselectしたら
OKってことでしょうか。
644 :
643 :2010/03/16(火) 22:38:45
よくよく調べてみたら3.5使っていいみたいなので、 LINQ使いました。 お昼ごろから悩んでたのがたった数行で解決しましたOrz
お昼頃から悩むぐらいならさっさとIComparer(Of T)実装してろよw なんでそんなに嫌がるんだw
LINQなんか余計に難しいと思うよ デリゲートとかきちっと理解してないと嵌まる
exeとdllを同じディレクトリ内におかなくても下記のエラーが出ないようにするにはどうすればよいのでしょうか? 「ファイルまたはアセンブリ 'a Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。」 どのようにすれば下記のようなディレクトリ構成でmain.exeを実行できるのでしょうか? ちなみに、DLLはDLL参照で参照しています。 TEST----main.exe | |--DLL |-----a.dll |-----b.dll
listboxでドロッグアンドドロップを実装しているのですが、 IEのお気に入りのようなものを実装したいのですが、どんな方法が良いでしょうか 表示されているものはものはページのタイトルですが、実際にはURLを追加や移動したいと言った感じです ・予め項目とURLを二次元配列に入れておいてmousedownの瞬間に入れ替え、戻す ・項目とURLの二種類のlistboxを表示させておき、mousedownの瞬間に表示・非表示 ・・・など変なことしか思いつかないです。ぐぐっても初心者向けのページ(IEお気に入りの使い方等)しか見つかりません。よければ助言下さい
650 :
648 :2010/03/16(火) 23:05:16
何か日本語変でした 3行目は 表示されているものはページのタイトルですが、実際にはURLのデータをリストに追加や移動・削除したいと言った感じです
>>648 VB6上がりの人かな?
ListBox.Itemsで取得されるObjectCollectionに追加できるのは文字列だけ、なんて思ってない?
違うよ。
例えばMSDNのObjectCollection.Addメソッドの説明見てみ?
Addの引数の型はObjectだ。つまり何でも入る。
ListBoxは、アイテムを表示するとき、各アイテムのObject.ToString()を呼び出して
表示している。
これだけ理解すればどうすればいいか自ずと見えてくるはず。
>>649 検索してすぐに見つけていただきありがとうございます^^
653 :
648 :2010/03/16(火) 23:38:21
>>651 おお、そういうシステムでしたか。ありがとうございました。何とかできると思います
スラッシュをつけないと無駄なリダイレクトが発生するよ
read.cgi以下はコマンドラインだからどっちも変わらない
658 :
デフォルトの名無しさん :2010/03/17(水) 12:58:45
質問です。 VB2008でADOを使ってmdbファイルにアクセスしようとしています。 SELECT * FROM hoge WHERE f = False ORDER BY a; だと動くのに、 SELECT a, b, c, d, e, f FROM hoge WHERE f = False ORDER BY a; だと動かないのはどうしてでしょう? フィールド名は全てチェックし、プログラム内で生成したSQL文を アクセスのクエリにコピペして動作も確認してみましたが、きちんと表示されています。 エラー内容は 「エラーを特定できません (HRESULT からの例外: 0x80004005 (E_FAIL))」 となっています。
659 :
658 :2010/03/17(水) 12:59:59
補足 エラーで止まるのは、RecordsetのOpen時です。
これとは関係ないけど SQLClientは確かセミコロンで区切ってDataSetを取得できたような気がする。
>>661 セミコロン抜いてみましたがダメでした。
色々試して自己解決しました。
一つずつフィールド名を試して、SECTION というフィールド名でエラーを
起こしているのが判明したので、POSTUNT と変えてみたら動きました。
何故 SECTION がダメなのかまでは分かりませんが、、、
ともあれ、ご回答ありがとうございました。
予約語なんじゃね?
sectionは予約語やん
つうか、サンプルにはSECTIONという単語が一つも出ていないな
666 :
648 :2010/03/17(水) 15:30:20
648です。すいません、やっぱり分かりません>< クラスを新しく作ってプロパティにurl(string)とタイトル(string) tostringをオーバーライドして・・ としようとしているのですが、他に楽な方法ってあるような気がしてなりません 二種類の文字列を格納でき、tostringでタイトルが帰ってくるような そんなクラスってありますか?
初心者な質問で申し訳ありません フォルダ内に DateTime型で 更新日時が 2010/03/15 23:16:52 のようなファイルが多数あると仮定して 最新のファイル名を取得するのに どのような方法があるでしょうか? Dim dt As DateTime Dim file_name_new As String = "ファイル名" dt = File.GetLastAccessTime(file_name_men) で 配列にdtを入れ dt(1) > dt(2) のようなソートの単純比較で最新ファイルを探し出せるのものでしょうか
ひとまずやってみればいいと思うよ でもアクセス日時なんてファイル開いたりして変わったりするから 例えばファイル名に日時でも入れておけばいいんじゃね? どんな用途に使うかによると思うんだけど・・・
ファイル名と更新日時をセットにしてソートする方法がわからないんだろ
要は
>>640 と同じ
とりあえずクラス作ってコレクションに入れて、ソートはIComparer(Of T)を使うのが
正解だけど
>>667 には難しいだろうからちゃんと勉強するのが嫌なら既出のいかにもVBらしい方法でごまかす
自作クラスの配列がうまくいきません。 threadtitledatクラスの配列thretai(3)をnewで作成した後、ボタン1クリックでthretai(0).datに代入したいと思っています thretai(0).dat = "e"の行で {"オブジェクト参照がオブジェクト インスタンスに設定されていません。"} と出ます。助けてください! Public Class Form1 ' threadtitledatクラスの配列thretai(3)をnewで作成 Dim thretai As threadtitledat() = New threadtitledat(3) {} 'クラス Class threadtitledat Private datstr As String Property dat() As String Get Return datstr End Get Set(ByVal value As String) datstr = value End Set End Property End Class 'ボタン1クリックでthretai(0).datに代入 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click thretai(0).dat = "e" End Sub End Class
クラスの配列だけ作成してもその中身はNothingだから 初期化した時に0,1,2の中に New threadtitledat でもして実体を入れないと・・・
>>671 おおできました!
Dim thretai As threadtitledat() = New threadtitledat(3) {New threadtitledat, New threadtitledat, New threadtitledat, New threadtitledat}
ちゃんと動きました。ありがとうございました
ちゃんと「配列型」の形式で配列宣言してる人このスレで初めて見た気がする 良いことだけど
>>668-669 回答ありがとうございます
単純に日付形式で
A>Bのようなモデルで
間違いなくソート出来るのか知りたかったのですが
便利な関数も教えていただき
さらに分かり易く指導を受けたことを感謝致します
>>667 初心者ならいきなり自作クラス作成ではなく
DataTable使っての管理が楽だと思う
DataTableのDefaultView使えばソートも抽出も出来るから
ソート後にDefaultViewの1つ目の要素で目的のものが取得できる
失礼します。 複数の関数があって、ソフト起動後に任意の順番で実行させるにはどのようにすれば良いのでしょうか? if文でやるのは綺麗では無いですよね・・・? Private sub aaa() End sub Private sub bbb() End sub Private sub ccc() End sub Private sub ddd() End sub Private sub eee() End sub aaa:3番目 bbb:2番目 ccc:1番目 ddd:5番目 eee:4番目 とか aaa:2番目 bbb:5番目 ccc:4番目 ddd:3番目 eee:1番目 など・・・
ものによるんじゃない? 少しの限られたレベルならそれでもいいと思うし デリゲート変数にでも突っ込んでリストで持てば?
何でどう順番が決まるの?
質問です。 現在、アプリケーションの設定を起動時に読み込み、 モジュールのpublic変数に格納しています。 いくつか検索してみて調べたのですが、 それはよくないので、設定用のクラスを作成し、 読取専用プロパティやフィールドに格納したほうがよいとありました。 試しに作成してみたのですが、 moduleの場合は、変数をhogeで参照できたのに、 クラスを作成した場合は、Class1.Instance.hogeとか 長くなってしまい、不便です。 すごく勘違いしてそうなんですが、 普通はどのようにアプリケーション設定を管理するのでしょうか? 必要な時はClass.Instance.hogeとか全部打ち込むものなんでしょうか? 基本すぎる事かもしれませんがどうぞよろしくお願いします。
Instance ってなんだよ。普通に、Class.hoge で参照できるだろ。
シングルトンならモジュールと変わらん VSのアプリケーション設定の機能使えばクラスを作ったり読み込んでくれたり全自動でやってくれる
VB.NETで ADOとFileSystemObjectを使うにはどうすれば
参照設定すれば普通に使える。
createobjecy
objecy
taipo
>>680 >>681 ありがとうございます。
newでインスタンスを作成してしまうとだめなんですよね?
設定クラスのプロパティをclass.hogeで参照するにはどうしたらいいのでしょうか?
sharedつければいいよ
>>688 つまりフィールドにもsharedをつけ
プロパティにもsharedをつける
とのことでしょうか?
というか値を保存するだけならsharedなフィールドだけでいいのでしょうか?…
ますます分からなくなってきました
いいよ
691 :
676 :2010/03/18(木) 00:29:53
>>678 とりあえずテキストボックスに順番を入力しようかなと
クラスを作ってプロパティをセッテいすると警告がきます プロパティも内部的な動作はメソッドにしろってことですかね
Jpeg形式で送られてきた動画をBitmapデータとして処理したいのですが、何か良い方法はありますか? 一番楽なのは取り込んだらBMPファイルとして保存し、それを読み込むことでしょうけど、これだと時間かかるので・・・。 すいませんが、よろしくお願いします。
> Jpeg形式で送られてきた動画 イミフ
BitMapオブジェクトではなくて?
696 :
693 :2010/03/18(木) 13:22:37
ありゃ、違ったかな? 送られてきたデータをバイト変換したら、0x89 0x50 0x4E 0x47... となってたので、Jpeg形式なのかなと とりあえず、BitmapクラスにはJpegデータとして格納されているので、これをBitmap形式に変換したいのですが、何か良い方法はありますでしょうか?
なんで変換する必要があるの? LockBitsやGetPixel使えば内部表現がどうだろうと普通にピクセルデータ取れるし 保存形式も好きなの選べるし
698 :
693 :2010/03/18(木) 14:05:33
追記 一度BitmapDataで取り込み、LockBitsを使用してBitmapにしています。 その時のフォーマットはPixelFormat.Format24bppRgbを使用しています。 (これでBitmap形式になっていなところも不思議ですが)
699 :
693 :2010/03/18(木) 14:08:09
>>697 GetPixelでは遅いので、Bitmap形式をバイト配列に変換して処理しているからです。
何が分からないのかさっぱり分からないが、取り敢えずMemoryStreamでも使えばいいよ
別のBitmapにGraphics.DrawImageしたら
なんで変換する必要があるのかわからん Lockbitsで出来ない処理なの?
>>698 が意味不明
普通にLockBitsすれば生のピクセル取れるはず
704 :
693 :2010/03/18(木) 15:32:31
>>703 ですよね・・・。
とりあえず描画は出来ているのですが、バイトの先頭が&H42,&h4Dになってない時点で何かおかしいですし。
試験的に同じ処理でJpegファイルを読んでみたところ、先頭のバイトが同じになったので、Jpegに変換されているのかなと。
要するにファイル形式とBitmapデータを混同してるってことでFA?
素直に考えろよw あと、思っただけじゃなくて少しは検証しろよ。もしもJpegになってたら圧縮されてるってことだから総バイト数減ってないとおかしいだろ 知識持ってない奴は始めっから手抜きなんか考えんな
707 :
693 :2010/03/18(木) 16:39:18
>>705 どうなんでしょう?
Bitmapクラスであっても、Jpeg形式のデータを入れればJpeg画像として処理されるってことですよね。
>>706 いろいろと検証しているのですが、少し混乱してます。
BitmapのWidthとHeightの値を見ると720×470のデータで、
出てくる総バイト数は593508Byteや540966Byteとカラーとして考えたら半分くらいに圧縮されてますね。
m_Bitmap.UnlockBits(m_BitmapData)
m_BitmapData = m_Bitmap.LockBits(New Rectangle(0, 0, getWidth, getHeight), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb)
m_Bitmap.UnlockBits(m_BitmapData)
や
m_Bitmap.UnlockBits(m_BitmapData)
m_Bit = m_Bitmap.Clone((New Rectangle(0, 0, getWidth, getHeight)), PixelFormat.Format24bppRgb)
の処理で無理矢理Bitmapにしようとしている時点で、確かに手抜きですね。
とりあえずbitmapクラスにヘッダを自力で入力して、GetPixelで画素を拾って再構築してみたところ動きましたが・・・処理が遅すぎ。
全く意味がわからない その最初のm_BitmapDataはどこから来た
つうかBMPだろうがPNGだろうが基本ピクセルの集まりでしかねぇのにwwww
710 :
693 :2010/03/18(木) 17:09:41
>>708 .SnapShot(m_BitmapData.Scan0, getSize(), 1)
で、データを取得してます。
>>709 ですよねー。
そこに圧縮が入ってるだけで、ここまで苦労するなんて思わなかった。
textboxのbackcolorですが、プロパティから選べるシステムタブの infoやmenubarなどを選ぶ方法はありますか? color.infoはありませんでした。
コードから指定したいってこと? 一度Form1の適当の奴の色をデザイナで設定して、 プロジェクトのあるフォルダのForm1.designer.vbを見てみると良いよ
>>712 これはとても便利です!ありがとうございました
714 :
693 :2010/03/19(金) 05:06:13
>>705 ああああああ、おもいっきり混同してたあああああああああああああ
pixelformatって圧縮形式だったのか
・・・そろそろ寝る
違う PixelFormatはピクセルごとの形式だから圧縮は関係ない
なんつうか、香ばしいな
関数を作ると 関数 'hoge' は、すべてのコード パス上では値を返しません。結果が使用されるときに、null 参照の例外が実行時に発生する可能性があります。 と警告が出てしまいます Public Function hoge() as void のように最初から値を返さないと決めて宣言することはできないでしょうか それとも関数の終わりを Return 0 End Function のようにするしかないでしょうか。できれば二行も使いたくないのですが・・
値返さないならSubにしろよ
>>718 ありがとうございます。私が余計な事をしていたのですね・・
警告条件から除外すればいいじゃない。
そんなこともできるのですか、ありがとうございます
まぁちゃんとした値を返さないFunctionなんかはバグの元だし 今はよくてもメンテを後でやるときに困る そういえば昔VB6の保守案件で見たソースがすべてFunctionで宣言されてたソースを見た やりづれぇことこの上なかったなぁ
書き換えちゃえばイイじゃない
>>723 書き換えると影響が出まくる可能性があるので怖くて手を出せなかった
時間もあんまりなかったので、同じ機能でも元のソースをコピペして関数作ったり
おかしいなりにキッチリ動いてたんでねorz
ちょっと質問ですが 下のC#をVBに変換するとしたら while((line = sr.Read()) != null){ if(line_ct++ < analy_line) contine } どんな感じになるでしょうか null がnothing に != が<> だとしても うーん
Nothingとの比較はIsな 代入と比較を条件節で書くのは無理だから分けるしかないね
カスタムコントロールについて詳しく載っているサイト知りませんか? もし、ご存じなら教えて下さい。よろしくお願いします。
あんまり無いんじゃないかな ユーザコントロールとは違って結構手強いのでMSDNを恐れてるようじゃ無理だ
カスタムコントロールっていうからおかしくなるわけで、単なるcontrolクラスの継承 INHARLITS 継承 クラス 辺りでぐぐって、textboxでも拡張してみるとイイ。textboxEX辺りでググると事細かに書かれているサイトもある あとはツールボックスに追加するだけ
>>728-729 ありがとうございました。
今、カスタムコントロールでapp.configファイルにバックカラー設定値の
ような値を持たせてInitializeComponetの後にapp.configのバックカラー設定値に
よって色を変えるロジックを書いていますが、なぜかバックカラーが
反映されないんです><
それカスタムコントロールじゃなくてユーザーコントロール 別物だから混同しないように コードがないのでわからないけど、一般にそういう処理はコントロールじゃなくて それを張り付けたフォームの方に書く コントロール側に書いちゃうと分けた意味が薄れるから
>>726 返答ありがとうございます
分離しかないですか
うーん
vbは比較と代入が=で統一されてるからな。仕方ない
比較演算の右辺値を使うのって個人的にあまり好きじゃないけど、
確かにVBだと
>>725 みたいのはスマートに書けないんだよな。
どうしてもWrite Trueなループを抜ける条件をループの中に書くような
ちょっと間抜けなコードになっちゃう。
まあそれはそれで必ずしも分かりにくくはないんだが、冗長な感じは否定できない。
ここまでReflectorなし
>どうしてもWrite Trueなループを抜ける条件をループの中に書くような >ちょっと間抜けなコードになっちゃう。 俺は結構使ってたりするんだが・・・ 別スレッド立ててデータをひたすら取得 取得間隔はThread.Sleep使ってループの中で止めてる メインスレッドからの停止フラグでWhileを抜けるような仕様 普通はどうやってるんだ・・・? なんか自分のやってることに自信がなくなってきた
動けばいいよ。 宗教論争しても無意味。
宗教論争っちゅーか効率のいいやり方聞いてるだけじゃね
俺は基本「動けば良い」かな パフォーマンスは余程の差がなければ「コードの見やすさ」優先で 結構ベタな書き方多いかも
古典的には先読みの1件。 同じ命令を2回書くのに抵抗がある人もいるかもしれないが、わりとスタンダードなやり方。 ただContinue Doで継続した場合に2つめのReadが実行されないので、If で代用。 あとif文中のline_ct++は扱いが面倒だな。 line = sr.Read() Do While line is Nothing line_ct += 1 ' If line_ct <= analy_line Then Continue Do If line_ct > analy_line Then : End If line = sr.Read() Loop
>>741 それなら普通に無限ループを抜ける条件をループの中に書いた方が
分かりやすいでしょ。
ちなみに、VB6じゃないからDoとかいらんし。
VB6でも両方かけるよっと。みんなどっち使ってる? While - Wend Do While - Loop
本当はdo untilと書きたかったのでdoを使ってみた。 今はこのケースでIsNot演算子が使えるのだな。
タブに動的コントロールを追加したときの質問です。 abrowser = new WebBrowser TabPage1.Text = "aaaa" Me.TabPage1.Controls.Add(awebbrowser) mytab = New TabPage mytab.Controls.Add(awebbrowser) mytab.Text = "bbbb" TabControl1.Controls.Add(mytab) Me.TabControl1.SelectedTab = TabPage1 としたときに、tabpage1(タブ名"aaaa") とmytab(タブ名"bbbb")の webbrowserコントロールへのアクセスはどうやって行うのでしょうか。 ボタンを押したらnavigateするようにしているのですが、 ふと思ったらどちらのコントロールかを指定していないのに気づいて、 どうやって指定するのか検索するキーワードすら枯渇してしまいました。
>>745 オブジェクトにアクセスする必要があるのなら、そのオブジェクトの参照を
握っておいたら?
さすがに頭悪すぎる質問じゃないの?
>>746 はじめて間もないのでとんちんかんな質問だったようです。すいません
それぞれのタブページに追加したオブジェクトがあって、
それを取得できる何らかの方法があるのかと思ってました。
TreeViewにNodes.AddRangeでarraylist.toarrayで項目を追加しようと思ったのですが 型 'System.Object[]' のオブジェクトを型 'System.Windows.Forms.TreeNode[]' にキャストできません。 といわれ代入できません。 object型をtreeview型に変換すれば解決すると思うのですが、そんな方法ありますか? それともarraylistを使わずに最初からtreeview型の配列を作った方がよいのでしょうか。 ↓kategoriはarraylistです。 TreeView1.Nodes.AddRange(kategori.ToArray())
ArrayListは時代遅れ。もう不要。忘れていい。 List(Of TreeNode)ならToArrayすればTreeNodeの配列になる。
>>749 arraylistは先ほど見つけてなんと便利なんだろうと思っていたのですが・・orz
ありがとうございました。list使います。
ctypeとかなかったっけ?
unk
外部フォーム名を取得する方法を教えて下さい クライアントの相対座標でキャプチャソフトを作ろうと考えていますが 親フォーム以外である 対象のフォーム名の取得方法にたどり着けません ヒントで構わないのでご協力下さいませ
対象のフォームって何? 誰が作った奴? 普通にP/Invokeでウィンドウハンドル取ればいいような気が。
フォーム名って何を指すんだろ 何のために必要なんだろ
大変助かりました フォームとはVBのコーディングの感覚で話していました 大変申し訳ありません 正式にはハンドルなんですね ヒントありがとうございました
正式にはウィンドウだろ?
特定のアプリについて、 非アクティブ時にも動かせるようにするアプリを作りたいのですが、 どういった勉強をすれば良いでしょうか? 具体的にどんなことかと言いますと、RPGツクールという製品で作ったゲームは 非アクティブになるとゲームが止まってしまいます それを非アクティブでも操作できるようにしたいと思っています
非アクティブの時に動くか動かないかはそのアプリ次第。 ということで、無理だろ。
アセンブリ言語でも勉強すれば
自作でツクールを作れば
ツクールに頼らないでVBなりPHPで作ればよろし
PHP!?
HSPじゃねーの?
そもそも既存ゲームをそういう風にしたいって要望なんだから もう何もかもが見当違いのアドバイスだな
オンゲのBOTを作りたいって言ってるようにしか見えんなぁ
>>767 ツクール製のオンゲあるのか
知らんかったわ
まあBOTならそのうちBANされて終わりじゃないの?
非アクティブで止まるONゲとかどんなのよw
770 :
762 :2010/03/22(月) 19:35:42
アプリケーション側でsendmessage等を止めていると思うのですが、
それを外部から触るには逆アセンブラで解析して・・という流れになりそうですね。諦めます
>>767 それはGetPixelとsendkeyで割と簡単に作れますね。画面を更新する必要も特に無いと思います。
>>769 ルシエルブルーというゲームは非アクティブにすると非同期になるわけではありませんが、画面が止まります。別サイト見ながらチャットするにはかなり不便です・・
こう書くとBOTを作っていると思われますね
なにこの半可通
チャット用のノートでも買えばいいと思う。 最近安いし
もう少しいろいろ勉強した方がいいよ。
vmwareとか
でどの辺がツクールゲームなんだ?
現在、常駐して使用するアプリを製作したのですが、 通常のアプリとして製作し、タスクスケジューラにて起動するようにしています。 しかし、この場合にログオフ⇒ログオンとすると アプリが終了した状態となってしまっています。 サービス化すれば解決するかと思うのですが、 アプリを改修することなく、このようなケースに対応することは可能でしょうか? (ログオフしてもアプリが終了せず、起動中のままとなるようにしたい) 使用言語はVB.NET2005です。 利用環境はWindowsServer2003になります。
>>776 entryserviceっていうソフト使ってそのアプリを
登録しとけば勝手にサービスになるよ
VB2005+WinServer2003とは・・・往年のタッグだな。 よしもっと流行らせようぜ、VB2005+WinSever2003
779 :
デフォルトの名無しさん :2010/03/24(水) 17:37:21
Dim objStreamReader As StreamReader objStreamReader = New StreamReader(入力FileNameパス付き) '一行読み込む strLine = objStreamReader.ReadLine 的なことをして、ファイルを一行ずつ読んでいるのですが、 途中で一行戻ったりすることは可能ですか? つまり、特定の文字列を一致する行を求めて、その行を含めてそれ以降の ファイルを取りだしたいので、一行戻るという小細工ができれば うれしいのですが。。。。。よろしく
strLineを残しとけばいいだけだろ
ボタンをクリックしたらエフェクトが出るというようなことをやりたいのですが、 参考になるサイトとかありますか? directxでフォームを使わないのが一般的でしょうか
WPF使う
WPF初めて聞きました。調べて使います。ありがとうございました!
784 :
デフォルトの名無しさん :2010/03/24(水) 22:15:36
DataGridViewを使用して、1行ごとに、 商品コード1、商品コード2、商品コード3・・・ といった項目を登録するようなプログラムを作っています。 「登録」のボタンを押した後、各項目についてフォーマットチェックを行い、 エラーがあった場合、メッセージを出力後、該当のセルにフォーカスさせたい のですが、やり方がわからず困っています。 DataGridView自体にはフォーカスできるのですが、その中のセルについては いつも決まったセル(例えば商品コード2)にしかフォーカスされません。 どうすれば好きなセルが選択された状態にできるでしょうか?
> 「登録」のボタンを押した後、各項目についてフォーマットチェックを行い、 CellValidatingとかRowValidatingとかでやれないの?
787 :
デフォルトの名無しさん :2010/03/25(木) 09:33:47
>780 ああ、そうでした。 2年ぶりにVB.NETを使ったら、 そんなことすら思いつきませんでした。
panelの中にpanelとbuttonを配置し、両方のdockをtopに設定しました 片方はpanelが上にくるのですが、片方はbuttonが上に来てしまいます dockの設定の順番かと思ったのですが、これは何が原因で変わるのでしょうか? と調べたら出てきました。Zオーダーですね。ありがとうございました。
どういたしまして。
791 :
デフォルトの名無しさん :2010/03/26(金) 10:53:15
VB.NETでWindowsXPの画面のプロパティの詳細設定の中の『DPI設定』の値 を取りだしたいのですが、方法知っている人押してください。
vb dpi でぐぐれば大量にヒットするけど
793 :
デフォルトの名無しさん :2010/03/26(金) 14:16:28
>792 ありがとうございました。ググッたら出てきました。 Dim dpi As Graphics = Me.CreateGraphics と宣言して、 dpi.DpiX dpi.DpiY で取りだしたら、両方ともに96でした。 ちなみに、このDpiXとDpiYは、いつも一致するのでしょうか? たとえば、 dpi.DpiX=96 dpi.DpiY=100 なんていうことは絶対にありえないのでしょうか?
一致しない
795 :
デフォルトの名無しさん :2010/03/26(金) 14:37:41
>794 でも画面のプロパティを開くと、DPI設定値は ディフォルトで 96 ちょっと大き目で 120 などの、単一の値しか設定できませんが、もしDpiXとDpiYが必ずしも一致しない ことがあるならば、画面のプロパティで設定できるDPIの値も、 DpiX DpiY のように二つの値を独立に設定できないとおかしいのではないのかなと 思ったりして、混乱しています。エキスパートの人、解説お願いします。
画面のプロパティはXしか表示していない
797 :
デフォルトの名無しさん :2010/03/26(金) 14:48:39
>796 解説ありがとうございます。 ということは、Yが表示されていないとしても、通常は、 DpiX=96 (こちらが表示されている) DpiY=96 あたりがディフォルト値だと思いますが、それを、 DpiX=96 DpiY=120 とかに、もし独立して設定できるのなら、 Windowsの画面が横に伸びるんでしょうか? そんなこと出来るのかな??
モニタ次第なんじゃないの?
ああ?
WPFとsilverlightは全く別個のものなのでしょうか?
別個の定義次第 取り敢えず記述するための言語は同じだな
その二つを比べるのが間違ってる WPFっていうのは.NET Frameworkの新しいGUIフレームワークのことで 今までのSystem.Windows.Formsに代わるもの。 Silverlightは「配布しやすい」ことに重点を置いた.NET Frameworkの弟分。 .NET Compact Frameworkを発展的に置き換えるもの。 馬鹿でかい.NET Frameworkをインストールしなくても 非常に小さなランタイムをインストールするだけで動作する。 Macにも対応していて、ブラウザやポータブル端末でも動く。 で、SilverlightのGUIフレームワークはWPFに似せて作ってある。
Dim S,S1,S2,S3 as string と Dim S,S2,S3,S4 as string どっちがいい?
どっちもダメ そんな意味のわからない変数名は付けない それか配列にする
あえて選ぶなら後者だな。 Sを暗黙のS1と解釈する方が、まだ分かり易い。
>>803 おれなら
Dim S0,S1,S2,S3 as string
または
Dim S1,S2,S3,S4 as string
にして
Dim S as string
は別の目的で使う。
今日、会社でプレゼン用の資料書いたら、「.NET」が「.NEET」になってて後輩が噴いた。
VB.netってヒアドキュメント書ける? 何かで書けるって見たような気がするのだけど
もともとVBにはエスケープシーケンスがないけど改行は書けない C#では"以外はエスケープせずに何でもそのまま書ける逐語的文字列リテラルという機能がある
>809 thx 文字列を "" & _ でくくったり外したりするエディタのマクロ使ってるけど VSにコーディング補助機能とかで付いてると良いのに
そんな赤ん坊の夜泣きの薬みたいな用語初めて聞いたw まあ、いちいち文字列に適切な名前を付けるのをいとわなければ リソースを使うのが簡単だと思う。 ただIDEのリソースエディタは複数行の文字列が見づらいんだよな。
や、SQLとか貼り付けるのがめんどくさいのよ。 エディタで作ったSQLを" " & _でくくって貼るとか 他人のVBのソース内のSQLを試したい時とかに " " & _ 外すのが。
俺ならブレイクポイント設定して中身コピペする
すいません、質問します。
TabControlについて研究していますが、
たとえば、JaneStyleにあるようなタブコントロールだと、
タブを左クリックすれば、すぐにそのタブが選択されますが、
一般的な.netのTabControlで、JaneStyleのようなFlatButtonの場合ですが、
マウスの右ボタンを押下(DOWN)した状態で→軽くボタンが浮き上がる表示(この状態ではまだ選択という状態になっていません)
そして、
マウスの右ボタンを離した(UP)した状態で→ボタンが押された表示(この状態で、タブが選択されたという状態になります)
となるのですが、
http://ghardzatudan6.es.land.to/up/img-box/img20100327070642.jpg Janeのように、マウスの右ボタンを押下(DOWN)した段階で、すぐに、そのタブが選択されるような処理をしたい
場合はどのようなコードを入れればいいのでしょうか?
Janeで実装できているのですから、VB.NETでも実装できないわけないと思い、調べていますが、
解決できません。
だれかご存知な方はいらっしゃいますか?
VB2010 では、行継続文字「_」が一部不要に・・・
なるの?
仕様を見てみたけど、かなり空気を読めてる感じで良いな。 大方の行継続文字は不要になりそうだ。
しばらくは前のでも動くように _ を付けた方がいいのかもしれないけど
VB 2008 Express Editionを使用しています。 下記で外部プログラムを立ち上げるのですが、 一瞬コマンドプロンプトが表示されてしまいます。 どうすれば表示しないようにできますか? System.Diagnostics.Process.Start("外部プログラム")
New ProcessしてStartInfoのCreateNoWindow
ProcessStartInfoを引数に取る方で色々試せばできそうな予感。
ありがと!
VB 2008 Express Editionを使用しています。 listboxにアイテムを登録します。 そのデータを次回起動時に初期表示させたいので保持したいです。 でapplicationsettingsで持たせたかったのですがitemsの項目がなく困ってます。 iniファイルに保存くらいしか思い浮かばないのですがVBの機能で記憶してもらうのは無理でしょうか? 個々人が使うツールを想定しているのでDBに保存というのは考えてません。
別にいいと思うけどな、DB 最近はローカル用のも増えたし プロジェクトのプロパティ>設定で StringCollection でも使えば? んでLoad辺りでDataSourceにMy.Settings.XXXXを設定する 要素の追加削除修正はMy.Settings.XXXXに対して行う
ありがとうございます。 コントロールのプロパティからでなくてもappって設定できたんですね ただ、この場合データの保存はcsv形式になるんですかね >要素の追加削除修正はMy.Settings.XXXXに対して行う 終了時にlistboxのアイテムをここに書き込むだけでいいかなと思ってるんですけど問題ありますかね
データとビューの分離という観点の問題があるな まあそれ以前にDataSourceに設定したらItemsに追加はできないし それにわざわざItemsに詰め直してたら保存するにも一々詰め戻さないとダメじゃないかめんどくさい あらかじめMy.Settings.XXXXを操作しとけば後はSave呼ぶだけだぜ
828 :
デフォルトの名無しさん :2010/03/27(土) 13:24:02
vb6経験者です Clickonceが理解できません express版にお勧めのインストーラ作成ソフトはなにがありますか? ターゲットにframeworkから入れさせたいのですが
clickonceはいまいち
830 :
デフォルトの名無しさん :2010/03/27(土) 19:32:29
828です。後出しですみません 配布したいのはVB 2008sp1で作ったソフトです。 PowerPackのDataRepeaterも使ってます。 dotNetFx3.5だけじゃだめだよね(多分)
うん。
>>814 Downした段階で、強制的にUpイベントを呼び出すロジックを組めば良さけだけど
俺も方法しらん
ジェーンは、最初からDelphiのコンポーネントとして付いているコントロールを使っているだけだよ。
833 :
814 :2010/03/28(日) 12:57:37
解決しました Captureを外して(false)、その後、SelectedIndexに選択するインデックスを 設定すれば、ワンクリックで選択されるようになりました。
予めフォームに設置してるパネルを自分で作ったクラスのメソッドで移動させたいんだけど パネルを宣言しろとエラーが出ます 文字列などの宣言方法は分かってますが予め用意されてるオブジェクトを宣言する方法が分かりません よろしくお願いします
System.Windows.Forms をインポートして、 Private p As Panel とかでいいだろ。
Form1.HogeのノリでPanel1.Hogeとか書いてるんだろうなぁ
できました ありがとうございました
VB.NET2005にて、テキストファイルへの書き込みを行うアプリを製作しているのですが、 同一テキストファイルに複数のプロセスから同時に書き込みを行うと エラーとなってしまいます。 テキストファイルへの書き込みについて、 排他制御は行えますでしょうか?
mutex
排他が取得出来ないから例外が発生する訳で… 2重に排他制御する必要あるのか? 発生した例外をどう処理するかが重要だと思うんだが
てか書き込むより前にオープン時点で例外出るよな?
まあテキストって言っても、ログ出力で追記とかならそういうのはある。 例外とかで排他したいんじゃなくて、待ち合わせしたいって場合。 まあMutexが一番単純かな。
非同期やってるような人が838みたいな質問するとは思えないんだが
非同期?
ODP.NETでBegintransactionすると暗黙のcommitしないんだよ。 知ってた?
へー
それはADO.NETでは普通ではないのか?
ふつうに考えて、明示的にトランザクション開始してるのに 暗黙的にコミットされるわけがないだろうが ADOとかODPとかの話ではないだろ ましてやVB.NETも関係ない。つまりスレ違いだ
そうでもないよ。
Begintransactionを入れないと暗黙のコミットするから注意が必要だ。
オートコミットをフォルスにしとけばええやん
マシンの買い替えに伴ってOSも新調しようかと 考えていますが VBでのコーディングするに辺り windows7の32と64どっちがいいですか? 文献、資料は32系が多いので32にするのが無難そうですが せっかくOSを載せ替えるなら メモリが大量に積めるWIN64も捨てがたいのです アドバイスをお願いします
32だな。 クライアント用途だと、動画編集とかしない限り、64ビット化の恩恵なんてないし。
俺は32BITにして4Gのうち1GをRAMディスクにしてる 64BITはテスト環境だけだなぁ 今んところ64メインで創れとは言われることはないんで 基本32で作成して、64でも普通に動くことを確認する程度 まぁ、そんなにメモリをずっと食うことがないって話が前提なんだけど
そもそもVSは32ビット版だし。
目安としては8G以上メモリを積むなら64ビット版、4G以下なら32ビット版。 4〜8Gの間は半端だな。
64ビットの方が両方テストできていいかもしれんね
64は一応WOW32なのに?
自分はx64だな x86のテストはVirtualPC上でやってる
VB.netを使ったWeb開発もここでOKですか?
いいんじゃないかと思うのですが・・・・ ASP.NETだけでいえば ネット関係 [WebProg]にスレがあると思う
タスクトレイに上がっているプログラムを一度に強制終了させるツールを作ろうと 考えていますが、どうすればタスクトレイに表示されているプログラムのプロセス名だけを 全て取得する事が出来ますか?
無理。
>>864 複数のプログラムを起動している時に
毎回そのアプリを一つずつ閉じるのがメンドクサイので
纏めてプロセスを落としたいのです。
なんとか皆さんのお知恵を拝借願いたいです。
だから無理だって。 あれは、単にShell_NotifyIconで登録してるだけだから、 Explorerしか情報持ってないだろうし。
WinFormアプリで例外を例外集約ハンドラでまとめて処理しようと思っています。 そして、そのハンドラ内で、例外が発生したメソッド名を 取得したいです。 で、UnhandledExceptionやThreadExceptionのEventArgsから取得した 例外オブジェクトからStackTraceを取り出したりしてみてるんですが、 例えば、 Button_Clickイベントハンドラ内でMethod1を呼び出し Method1からMethod2を呼び出し、そこで例外が発生した場合、 StackTraceからButton_Clickは取り出せるんですが 例外の発生箇所であるMethod2の情報が取り出せず困っています。 発生箇所を取得する方法ってあるんでしょうか? 読みにくい文章ですいませんが、アドバイスよろしくお願いします
StackFrameを辿っていけば取れるだろ
質問です。 VB2008で、Windowsフォームが多数あるアプリケーションを 作成しています。 後から、全てのWindowsフォームの背景色を一度に 付け替えるなければならなくなったのですが、 何か効率的な方法はありますでしょうか。 アドバイスの方、よろしくお願いします。
>>866 残念です。と諦めかけたのですが
>>868 さんが何か出来そうなことを話されているのですが具体的にはどうすれば良いのでしょか?
もし宜しければコードをお教えいただけませんか?
エディタで置換するのが一番早いんじゃね?
>>868 Debugビルドで作った実行ファイルだと例外が発生したメソッド名を
StackFrameから取り出せるんですが、Releaseビルドだとできないみたいなんです。
なにかやり方間違ってるのかなー
>>874 あー。それは無理。だってデバッグ用だから。
どうしてもやりたければ、関数の呼び出し履歴を自前のスタックに積んでくとかしかないでしょ。
もしくは、プロファイラ系のAPIを使えばいけるかもだけど。
>>875 そうなんですね。簡単にはできないかんじですね><
なにか他に例外の発生箇所を特定する方法がないか
考えてみます。ありがとうございました。
877 :
デフォルトの名無しさん :2010/04/05(月) 01:12:34
ん?エラーダイアログにはReleaseビルド版だろうがちゃんと表示されるのに 例外オブジェクトからは取得できないとかそんなことあるのかね。 ネイティブWin32アプリならともかく、.NETなんだから普通にできると思うけど。
最適化されてれば例外でも見えないことがある
フォームにつけるボタンをキャプションじゃなくて絵ボタンにしたいです。 imageプロパティにイメージ貼ればいいというのは分かったのですが、 VSのcommon7の下にあるpngファイルが、一枚のイメージの中に大中小と 絵が入っていて、使いたいのは中だけなのです。 足りない頭で考えると 1.適当に欲しい部分だけ切り取ってリソースにする。 2.imageプロパティのサブプロパティで欲しい部分を座標で指定する。 かなあとおもいますけど、これって普通どういう風に使うんでしょう?
好きにすればいいと思うよ。
>880 どもです。 したら、なんか慣習的に決まったやり方がある訳じゃないって感じでしょうか?
一般的には.icoを使うことが多いので、.pngについては あんまり慣習とかないんじゃないかなぁ。
ライセンス的にどうなのかは知らないけど pngがよかったらicoを自動的に全部pngに変換したり ほしい部分だけ切り出したりするようなツールを作ればいいだろ 何のためにプログラミングやってんの
885 :
デフォルトの名無しさん :2010/04/07(水) 13:52:13
Graphics.DrawLinesで線を引いて、その引いた線を ドラッグして伸ばしたり形を変更したりしたいのですが Graphics.DrawLines以外で線を引くのでしょうか? 教えてください。
頑張る としか答えようがないな ドラッグ中はマウスカーソルが動くたびにその座標を取得して描き直す
887 :
885 :2010/04/07(水) 14:30:14
>>886 DrawLinesで引いた線を取得する方法はどうすればいいんでしょうか?
PictureBox上に書いてたら線の色とかで判別するとかか?
DrawLinesで引いた線はあくまで絵の上のピクセルの集合なので 線を表すオブジェクトなどは存在しません 線分の二端の座標を自分で管理しておいて、変化するたびに毎回描き直します
890 :
885 :2010/04/07(水) 15:14:13
>>889 線の二端の座標からドラッグするということでしょうか。
線の真ん中ぐらいからドラッグしたいときはどうすればいいのでしょうか
>>890 その座標が線に含まれるか計算すればいいじゃん
ただある程度の幅見込まないと掴むの大変だろうけど
Windows付属のペイントの曲線を参考にすればいいんじゃね? クリックの1回目が起点、2回目が終点、3回目で中間点座標で調整、 みたいにクリック回数決めうちで、それ以降は修正不可って感じみたいね。
と、思ったらちょっと違ったw ドラッグで起点と終点、2回目、3回目で調整か。
894 :
885 :2010/04/07(水) 17:25:49
>>891 どう実現すればいいか全然浮かびませんが
ちょっと調べてみます
>>894 graphicspathに太い線引いてisvisibleは?
…と思ったらブラシ使えないか…
じゃaddpolygonで
ブラシじゃねえペンだ
環境はVS2005です Form1にデザイナで配置したDataGridViewの背景色を変更したいんですが Module1から変更しようとするとオブジェクト参照がインスタンスされていません、みたいなメッセージが出ます どうすればいいのでしょうか?
898 :
885 :2010/04/07(水) 19:48:44
それっぽい物ができました。ありがとうございました。
>>897 ぴったりの開発環境があるよ
つ VisualStudio6.0
意味がわからない
a
オブジェクト参照をインスタンスすればいいじゃない
>>897 Form1.DataGridView.BackColor
とかでできなかったっけ?
でもモジュールは早めに卒業した方がいいっぽい
この手のやつって頻繁に質問くるよな
どうせForm1のインスタンスが無いってパターンだろうけど
>>897 エラー箇所でブレークポイント設定して
中身を見てみれば何かが「Nothing」になっているはず
その何かのインスタンスを作成すればOK
SplitContainerでどっちかのパネル畳んだ状態でリサイズしても 中のコントロール動かないのは回避方法ある?
モジュールつかわないのって、 ClassにしてSharedにするの?
ClassのSharedのReadonlyプロパティから取得できるようにする、 というのが一つのやり方かな。
910 :
905 :2010/04/10(土) 00:27:45
正しい方向なのかは知らんけど、俺は最近こんな感じにする 別のClass1の中で Public Sub ex1(ByVal tb As TextBox) tb.Text = "ABC" End Sub FormのClassの中のイベントで Dim cl As New Class1 cl.ex1(TextBox1) みたいな感じで汎用的に使えるクラスを作ってる。
それのどこが汎用的なのかさっぱりわからん。 真面目な話、意味あるのかそんなの。 そんなものが正しい方向なわけが全くないよ。 これも真面目な話、フォームが持ってるコントロールをフォームの外部のクラスなり モジュールなりからから触りたい、なんて思う人はプログラマ向いてないよ根本的に。
なわけあるかい。
まあ
>>910 がいいかとは別の話だが。
スレ番号33記念カキコ
>>910 俺も
複数列コンボのデータソース設定する時とか
似た様なコントロールが複数のフォームに点在してる時とか
その方法使ってる
>>914 そんな馬鹿自慢をしてどうするよ。
>複数列コンボのデータソース設定する時とか
そんなコードはフォーム自身に書いてください。
別のクラスに分けて複雑性を増やしてどうするんだよ。
>似た様なコントロールが複数のフォームに点在してる時とか
そういう場合はイベントを使う。
フォームはデータを持っているクラスからイベントを受信して自分の持ってる
コントロールを更新する。
動けばいいよ
>>915 > そんなコードはフォーム自身に書いてください。
> 別のクラスに分けて複雑性を増やしてどうするんだよ。
フォーム自身に書いてたら修正の時に大変だろ
30個フォームがあったら全部修正するハメになるぞ
別のクラスで持っていれば1ヶ所修正するだけで済む
底辺同士の的外れなレスの付け合い どっちもレベルが低いな ハイレベルで高貴な私はパチンコに行って来る
>>915 >そういう場合はイベントを使う。
>フォームはデータを持っているクラスからイベントを受信して自分の持ってる
>コントロールを更新する。
横からすいません、煽りとかでは全くなく、純然たる初心者からの質問ですが
ぱっと見だと
>>917 の方が便利じゃないかと思ってしまいました
ていうかそのイベントを使ってどういう処理にすればいいのかイメージできませんでした
具体的にどんな設計にすればいいのか教えていただけませんでしょうか
>>920 引用してる箇所と
>>917 の話は直接は関係しないと思うけどさ。
とにかく、元の質問(
>>897 )に沿った話の肝は、コントロールの所有者(つまりフォーム)
以外のオブジェクトがコントロールを直接操作する、なんていう作り方は特別な理由がない限り
普通はまずしないってこと。
その理由は、コントロールを制御する責任を誰が負っているのか明確にするため。
複数のコントロールを制御するロジックを、複数のフォームで再利用したいとか、
よりコードの見通しをよくしたいといった理由でクラスにまとめたい場合は、
せっかく.NETにはユーザーコントロール(複合コントロール)を作る仕組みがあるんだから
それを使ってよ。
922 :
914 :2010/04/10(土) 18:11:53
>>915 > そんな馬鹿自慢をしてどうするよ。
自分以外の変わったコード書く奴を見下すのも大いに結構だけどよ
いきなりバカ呼ばわりする奴もどうかと思うぜ
これが、コントロールじゃないただのクラスとかならまた話が変わってくるんだが とりあえず、コントロールはその所有者のフォーム以外から操作しないほうがいい Windowsのコントロールってそういうものだと覚えておいたほうがいい
VS2008 + ASP.NET3.5 のWeb開発で質問です。 5種類の伝票のうちの1つをユーザが選択したとき、その明細データ(最大100件)を 表示するListViewを作りたいと考えています。 ポイントは以下のとおりです。 1.伝票毎に項目名が異なる→表の項目名表示を伝票に合わせて変える必要がある 2.同様に伝票毎明細の各列のAlign(左・中・右)が異なる まず、1.については、DataBoundイベントで動的に項目名称を設定しました。 問題は、2.ですが、どのようにAlign設定したらよいでしょうか? ListViewの該当箇所(ItemTemlate)は以下のとおりです。 <ItemTemplate> <tr> <td><%#Eval("fld1")%></td> <td><%#Eval("fld2")%></td> 中略 <td><%#Eval("fld30")%></td> </tr> <tr> <td colspan="4"><%#Eval("fld0")%></td> </tr> </ItemTemplate>
925 :
924 :2010/04/10(土) 20:13:38
1つ思いついた方法は、 ListViewにバインドするデータのSELECT文で、 SELECT '<div align=right'||fld2||'</div> as fld2x 〜 として、<%#Eval("fld2x")%> とする方法です。 このSELECT文を5種類の伝票に合わせて5つ用意しておきます。 この方法以外に何かありますか?
やっぱパチンコなんか行くもんじゃねぇな
まぁ、そんな感じじゃね? 俺はバインド使わんから、コードでテーブル(スタイル)生成しちゃうけど。
俺は拡張プロバイダ使うことが多いがな。 「フォーム以外」だからダメなんだろうな。
だけどユーティリティ的な操作をコントロールに対して行う機能を、 適当な別クラスに作る(別クラスって言ってもユーティリティ的な機能を切り出すだけだが) ってのは別に普通。 そのために複合コントロールなんて使いようがないし、 イベント使っても意味ないし。
ユーティリティの呼び出しではなくて自動で処理させたい場合や、 コントロール単位で操作をカスタマイズしたい場合は拡張プロバイダ。
931 :
デフォルトの名無しさん :2010/04/10(土) 21:41:03
関数を作っていたのですが、後から機能を増やしていったために引数の順番がひどくわかりにくいものとなりました これを訂正、修正する方法ってありますかね? 一度別の関数をかませて引数の順番をかえればいいのでしょうが、なんか回りくどい気がします 良い方法合ったら教えてください
リファクタリング
933 :
デフォルトの名無しさん :2010/04/10(土) 21:45:10
ありがとうございます!
>>929 全然普通じゃないしそんなの。
単に継承が理解できないからカスタムコントロールが作れないだけじゃないの?w
自分がやらない=普通じゃない
それでいいよ。好きにしな。
既存クラスの拡張に継承を使うのは悪っていうのが最近の流れ
自分がやる=最近の流れ
まあとにかく、継承(の乱用)の問題点を分かってる人が反省的にそれを
言うならいいんだけど、単に継承そのものがわかんないお方がそれをいうのは
いかにもVB厨的ではある。
「便利なものは便利に(以下略」って、お前便利だかその方法使ってるんじゃなくて
それしか出来ねえだけじゃん、っていうw
少なくともコントロールの機能拡張みたいなものは
>>929 が言ってるような方法で
普通はやらない。
コントロールの機能拡張ってのは多くの場合トッピング的に複数を組み合わせることが
難しいし、だいいちコードの可読性を捨ててまでそんなことしたい場面なんかほとんどないし。
Treeviewクラスに複数の値を持たせたいときに拡張したことあったな 割と便利だよ ただあんまりやらないと思うけど
>924 項目名ちがうってすでに別物だし 俺ならはじめからListView5個用意しといて、選択されたものだけ表示する テンプレートを動的にゴニョゴニョしてもできなくはないと思うが めんどいので俺ならやらない
>>939 ところでいつからコントロールの拡張の話になったんだい?
>まあとにかく、継承(の乱用)の問題点を分かってる人が反省的にそれを >言うならいいんだけど、単に継承そのものがわかんないお方がそれをいうのは >いかにもVB厨的ではある。 継承すら分からんあほが拡張プロバイダとか使えるかよ…
>「便利なものは便利に(以下略」って、お前便利だかその方法使ってるんじゃなくて >それしか出来ねえだけじゃん、っていうw まさに継承だよな。
例えば一時的に、フォーム配下の全てのコントロールのEnabledをFalseにしたいって事があったとする、単に一例だが。 これを実現するなら別に専用のクラスを作るかユーティリティ的なメソッドをどこかに作るか、 もし場合によっては除外したいコントロールがあり得るなら拡張プロバイダに実装する。 継承とかフォーム自信に実装なんてあり得ん。 イベントも復号コントロールもあり得ん。 フォーム自身だけEnabled=Falseにしたらいいじゃんてのはナシな、 単に一例なだけだし、実際それでは駄目なこともあるから。
でまあ、横断的な処理をしたいなら、まずなるべく継承を使わずにできないか考えるのは当たり前のこと。 あえて継承を使う場合はあるが、最初に最も慎重に判断するのが、まず継承を使ってもいいのかどうかってところ。
とりあえず、
>>929 に対しての
>>934 は意味不明。
操作する可能性のあるコントロール全部継承するって正気かよって話。
>>945 そんな実用的に意味のない例出しても仕方がないと思うけど。
そもそも何だよユーティリティー的な操作って。
君が自分で言ってるように、Form(コンテナ)のEnabledをいじれば済むことを
わざわざ愚直に全てのコントロールを再帰的に辿ってEnabledを設定するようなコードのこと?w
まあ、上のはただの煽りだけど、
>>921 で「特別な理由がない限り」と書いたように
確かに
>>945 の言う「ユーティリティ的なメソッド」が必要になる場合がないとまではいえない。
具体例を挙げると、メインメニューの項目を一時的にコンテクストメニューに
移すメソッドとかね。
ただ、こんなのは非常に例外的な稀なケースで、
こんなふうにコントロール(ToolStrip系はコントロールじゃないけどさw)
の参照を外部に渡していじらせる、なんてことは普通はしない。
というか、だからそもそものこの話題の始まりである
>>897 はそういうことを言ってるのかと。
明らかに違うでしょ。
どうでもいいけど逆コンパイルされないアプリを作る場合には .Netは捨ててネイティブC++で開発するしかない? 生産性を犠牲にしてまでもソースコードの盗難防止に力を注ぐべきか。
>そもそも何だよユーティリティー的な操作って。
>君が自分で言ってるように、Form(コンテナ)のEnabledをいじれば済むことを
>わざわざ愚直に全てのコントロールを再帰的に辿ってEnabledを設定するようなコードのこと?w
それで済まない事があるってわざわざ書いたのに、ってかやってみれば違いが分かるだろ。
明らかに動作が違って、フォームではなく子コントロールで設定することに意味があるんだよ。
まああくまで一例で書いただけだけどな。
>まあ、上のはただの煽りだけど、
>>921 で「特別な理由がない限り」と書いたように
>確かに
>>945 の言う「ユーティリティ的なメソッド」が必要になる場合がないとまではいえない。
だから
>>929 では最初からそういう話をしていて、ユーティリティ的な機能をって限定的な話してるのに、
>>934 みたいな反応しといて笑わせんな。
>ただ、こんなのは非常に例外的な稀なケースで、
>こんなふうにコントロール(ToolStrip系はコントロールじゃないけどさw)
>の参照を外部に渡していじらせる、なんてことは普通はしない。
お前にとってはユーティリティ的な操作は普通じゃないということは分かった。
別に普通にそういうことをすることもあると俺は言ってる。
>というか、だからそもそものこの話題の始まりである
>>897 はそういうことを言ってるのかと。
言ってないよ、俺は
>>929 から書いただけだから。
でもお前は
>>929 に対して
>>934 な反応してるんだ。
だから突っ込んだんだけ。
ていうか真面目な話、横断的にコントロールを扱うことって結構あると思うが、
全然そんな場面がないわけ?
例えばフォーカスがあたった場合に、テキストを全選択状態にする、というよくある動作をさせたかったとする。 お前はどう実装するんだ? Formに直接そういうコードを書くのか? 継承してカスタムコントロールにするのか? 俺はそんなことはしない。
ユーティリティ的な機能を、それ用のクラスを作るか、元のクラスを拡張するかなんて 設計の方針の問題で、やりたいように実装すればいいだけの話 システム規模とか全体の設計とか作成する技術者のスキルとか考慮しないでどっちがいいとか そんな話はただの宗教論だ まあ、とかく他人のやり方が自分と違うと許せない人が多いんだな これ以上は別にスレ立てるかなんかしてやってくれ
956 :
924 :2010/04/11(日) 06:31:56
>>941 ありがとうございます。
実はそれも試したのですが、必要の無いListViewをVisible=Falseに
設定してもその場所に空間ができて画面が不恰好になってしまうのです。
>>956 今試せないが、それはhtmlのスタイルの問題だと思うが
少なくとも今までのコントロールはVisble=Falseだとそこには何もレンダリングしない
だからその後ろの要素をちゃんと詰めるように指定しておけば空間が開いたりしないはず
>>948 えーっと、まず前提として変なアプリを作るがそこは否定するなよ。あくまで一例だからな(俺が昔気が触れて作ったものだ)
operaのようなMDIのブラウザを作るときに、どうしてもあれをtextboxで実現したい!
という時に、ユーティリティー的な操作+継承をすれば解決。
継承はtextboxクラスにURL(string)や前回更新時間(date)などを登録してた気がする。
ユーティリティー的な操作を具体的に言うと、まずArrayListにtextboxをaddする。Dim vu As New ArrayListとする。
そして必要に応じて For Each xxxxx In vuのようにし、ブラウザ替わりのtextboxだけに処理させるというもの
場合によっては必要な人もいるんじゃないか
なんだよアレって。
それはユーティリティとは言わん アプリケーションの本質的な動作じゃないか
>>958 継承使う必要ない
TextBoxやURLや前回更新時間を保持するクラスを作るほうが素直
>>952 そんなのはカスタムコントロールにするのが第一選択で、次がFormにベタに書く方法。
そんなものを実現するために別のクラスにTextBoxの参照を渡す、などは愚の骨頂だと思う。
一体どこに自分も自分の所有者でもない第三者を登場させて話を複雑にさせる合理性があるのかさっぱりわからない。
君は根本的にOOP的な思考ができないんじゃないの?
>>958 言ってる意味がわからない。
どうしてTextBoxの所有者であるMDI子ウィンドウではなく、それとは別にTextBoxだけを
集約したオブジェクトを用意する必要があるのか。
>>953 そういう考え方してるといつまでたっても大きなプログラムが書けるようにならないよ。
コントロールにちょっとした付加機能を付け加えるだけの訳のわからんクラスが
登場するようなアホなコードなんか、規模が大きくなると書いてる本人だって
訳がわからなくなる。
「えーとこのTextBoxは一体全体どうしてこんな振る舞いをするんだ?」と
思っても、TextBoxはカスタムコントロールでもなければ、所有者(Form)がイベントを
捕捉して制御してるわけでもないんだから。
その振る舞いを解明するには、そのTextBoxの参照を握ってる別のオブジェクトによって実現されているんだ、
ということを発見する必要がある。
そんなパズルみたいなコード読んでられっかよここのお馬鹿さんどもは。
はいはい。お前さんの言うとおりですよ。 すごいですね。
>>964 昨日から見てるけどさ
いい加減鬱陶しい
そろそろ、よそでやれ
ここはVBスレで皆まったりやって来てんだよ
上から目線で俺スゲーしたいならC#スレでも行って思う存分暴れてこい
>>966 なんで「論争」の片方の当事者だけにそういうこと言うわけ?
まあ、騙るに落ちてるなw
>>967 >> 910くらいから読み直して来い
どいつが原因なのか良く分かるから
じゃ、どっちもいい加減にしろ。 これでいいな。
何かアホが勘違いしてるみたいなので白状しておくけど
>>919 ,926,966,968 が俺
昨日パチンコ行く前にくだらねぇレス付け合ってる奴らがいるなぁと思って
それで、負けて帰って来たら、まだやってんのかよ
で、今日になってもまだやってるしよ
いいかVBスレはな
> クラスってなんですか〜?
> インスタンスってどうやって使うの?
こうゆうまったりした流れなんだよ
これからまたパチンコだ
帰って来るまでには、いつもの流れになってる事を期待する!
971 :
953 :2010/04/11(日) 14:19:48
俺が大きなプログラム書けるかどうかは大きなお世話です これ以上やりたいならよそでやってください OOPの設計に関して議論するスレでも立てたら? そこでならある程度お前の意見に同意してやるが 多人数のプログラマでシステム作成してるときに交じってほしくないタイプだな
パチするよりコーディングしてろよw せっかくの休みなのに朝鮮ゲームとかw
キムチくさ・・
>>970 あなたは配列やカプセル化などちゃんと使ってますか?
配列とカプセル化ってまた微妙な取り合わせだな…
俺が読んだ入門書にはセットで教えられたわけだが
クラス内部の配列をプロパティで直接公開するとカプセル化崩壊だよ
978 :
デフォルトの名無しさん :2010/04/11(日) 19:41:42
質問です。 オブジェクトの開放にはNothingを代入するって聞いたのてすが、 明示的にNothingを入れなくても、参照している変数がなければ、 ガベージコレクタが、適当なタイミングで開放してくれますか? ' あまり良い例ではありませんが Dim A As Object = New myClass1 … ' 何らかの操作 A = Nothing ' ← 必要ですか? A = New myClass2 … ' 何らかの操作 A = Nothing
>>978 >オブジェクトの開放にはNothingを代入する
そもそもこれが間違ってます
.NETではNothingを代入するのはほとんどの場合意味がありません
使わなくなったらほっとけばGCに回収されます
> .NETではNothingを代入するのはほとんどの場合意味がありません どういう場合で意味があるんですか?
981 :
978 :2010/04/11(日) 19:52:57
>>979 ありがとうございます。
つまり、参照元がなくなったオブジェクトは、
適当なタイミングでGCに回収されるから、
参照が終わったらNothingを代入するとかは必要ないんですね。
>>980 インスタンスAがフィールドとしてインスタンスBへの参照を持ってて
Aはまだ使うけどBはもういらない場合、Nothingを代入すればBをGC対象にできる
忘れちゃうから、常にNothingするようにしとこーっと。
それがいらないのがVBのいいとこなのに・・
>>980 VB的には、WithEvents付きの変数の場合は特に意味があるね。
というか、FormのフィールドをWithEvents付きにした場合でかつ
イベントハンドラでForm上のコントロールを弄ってる場合は(ほとんどの場合そうだと思うけど)
FormClosedとかでNothing入れておかないとまずいケースもある。
どうまずいの? ほとんどの場合、イベントハンドラはフォームのメソッドだろうし。 どっちかっていうとほとんどの場合はまずくないと思うが…
まあ、イベントハンドラの登録が盲点になりやすいのは同意するけどね。 現実にはそれで引っかかることって、普通に作ってればあまりないような気もするのよね。
>>985 普通はフォームとコントロールの寿命は一致するから問題ない
>>988 それは.NETの世界ではその通りなんだが、
コントロールみたいにWin32の世界ではそうじゃない。
現実問題、ハンドルが破棄されたコントロールを操作することになって例外が発生する場合がある。
イベントハンドラとGCの関係で一番注意が必要なのは Sharedイベントに登録したイベントハンドラの外し忘れ 参照を掴みっぱなしになるからNothingを代入しようが関係なく確実にメモリリークする
>>989 でもさ、フォームを閉じた後に、ハンドルが必要になるような操作を行うようなイベントが発行されるような操作を、
コントロールに対して行うことって普通あるかな?
そして、あったとして、それはコントロールにNothngを代入することでかいけつするような問題かな?
ってとこなんだよね。
むしろ問題があるなら、ハンドラ側で調整すべきな気もする。
>>990 それさ、確かに盲点的で気づきにくいのは確かなんだけどさ、
そこで問題になるほどリークが発生するような状態になることって
少ないと思うんだよね。
まず、静的イベントに大量に登録するのは、普通に組んでてやることって少ないと思うんだよね。
んで、イベントに登録するのは多くないけど、その登録される一個のオブジェクトが巨大だとか、
そういうことはあり得るけども、大量データを持ちつつ静的イベントに登録するなんてのは、
元々寿命が長いオブジェクトな事が多い気がするんだよね。
となると、後は大量データとかをメンバに保持しながら、静的イベントに登録して、
すぐに不要になるオブジェクトとかなんだけど、そういうのって普通に作ってるとあまりない気がする。
>>964 拡張プロバイダとかならそんなことにはならないよってかならないように作るわな、当たり前。
ToolTipが表示されたとき、このテキストボックスはなんでこんな動作をするんだ、
カスタムコントロールでもないのに、どこで制御してるんだ、発見できない、なんてことにはならないだろ?
まあ全選択状態にするとかはテキストボックス系のコントロールに限った話になるが、
要はいろんなコントロールに対して横断的な処理を行いたいとき、コントロールを拡張するって方法だと、
使うコントロールをみんな拡張する必要がある、そんなのはあまり好ましくないってこともある。
拡張した各コントロールでそれぞれそういう処理を書くことになるんだぜ?
だってまとめてどっかに書いたら、それはつまりユーティリティ的な機能を作るってことだからな、それはだめなんだろ?
ともかく、横断的な観点で何らかの処理を行いたいとき、 クラスを拡張して各クラスに書くってのは、もはや一般的にもあまり推奨されないやり方になってる。
>>992 静的イベントに限らないよ
メインフォームにサブフォームのイベントハンドラを登録したりすれば同じ
まあ静的イベントの話で書いたんで。 >メインフォームにサブフォームのイベントハンドラを登録したりすれば同じ これも確かにそうなんだけど、普通気づくんじゃないかなって気がする。 いや、気づかんかなー
WPFだとWeakEventパターンの登場だな。
.NETリリースする最初に気づいてればよかったのにな、WeakEventの必要性。
ちゃんとGCとイベントの仕組みを理解してないとわからないだろうな わかってなくても一つ覚えでこうすれば問題無いというような話じゃないんで
要するにデータベースの操作でOpenしたものを必ずCloseしろってのと同じで、 イベントハンドラも追加したら必ず削除しろってことでOK?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。