1 :
デフォルトの名無しさん :
2008/09/28(日) 23:34:40
ねえよ
6 :
デフォルトの名無しさん :2008/09/29(月) 00:58:13
おっ リンク増えた♪ どなたか存じませぬが、あなたに幸あらんことを。
8 :
デフォルトの名無しさん :2008/09/29(月) 11:33:17
クリスタルレポート詳しい方伺いたいのですが VB.NETでクリスタルレポートを使用した帳票を作成しています グループ化した後、詳細の項目を改行せず、同じ場所に表示していく方法はないでしょうか? 123 456 という感じで式で制御しています。それを同じ場所に表示したいのです。アンダーレイにチェックを入れても 1 2 3 といった感じに表示されてしまいます 知ってる方いらっしゃいましたら教えてください
9 :
デフォルトの名無しさん :2008/09/29(月) 19:16:18
Webサービスに関して伺いたいのですが javaで作られている型(decimal)のところを VB側で作成した場合にdecimalの項目がSOAPのdecimalから抜けてしまうという 現象が発生しました。何かご存知の方いらっしゃいましたらお知恵を拝借できますでしょうか。
ボタンをクリックするたびに新しいボタンを作成して、個々に一定時間ごとに テキストを変たいと考えています。この場合、単純にTimerコントロールでは 制御できないと思いますが、どうしたらよいでしょうか。 コードは、例えばこんな感じです(だいぶ簡略化してありますが) Private Sub Button1_Click(省略) Dim Sample As New Button() Sample.Text = "YES" Sample.Location = New Point(xxx, xxx) ←Button1をクリックするごとに位置が変わるようにしています Call Button_Text_Change(Sample) End Sub Private Sub Button_Text_Change(ByVal sample As Button) Me.Controls.Add(Sample) ここに、一定時間後にボタンのラベルを「NO」などに変えるコードを入れたいのです End Sub よろしくお願いします
>>8 外部(VBプログラム)から直接クリスタルレポートのテキストボックスに値を入れるのではダメ?
>>11 お返事ありがとうございます
項目がすごく多いので出来るだけクリスタルレポート上でやりたいと思っているのです
>>10 Timerを毎回NewしてAddHandlerでイベントハンドラ登録
TimerのTagにでもButtonを設定しとく
ハンドラでsenderをTimerにキャストしてTagとってきて適当に操作
>>10 何が聞きたいのか明確に書かないと
まともな人にほど回答して貰えないと思うけど。
っていうか、君がコードが書けない事と明確な文章が書けない事は
間違いなく根底で繋がっていて、同じ理由だろう。
.NETで作成したユーザーコントロールをMicrosoft Accessのフォームに貼り付けて使う方法ってありますか?
>>15 IE には貼れる。から、貼れるんじゃないかな。
COM で公開して試してみれば?
17 :
11 :2008/10/01(水) 01:02:18
Direct Showに関して質問があります. VB.net2005でDirect Show を使用し動画から音声を抽出→音声波形を作成 ということをしたいのですが,どのようにしたらよいのでしょうか? Direct Showの使い方もわからず,教えていただけないでしょうか?
>>19 ありがとうございます.すれ違いすいませんでした.
>>13 遅レスすいません。お返事ありがとうございました。
なんとかなりそうな感じです・・・助かりましたm(_ _)m
>>14 こういう奴って社会人になって、何も知らない客先からの
要求や質問になんて答えるんだろうな。
客w
というか、普通は(というかまともな社会人なら)客ならなおさら 要件は明確にしてもらうと思うけど。 日本はまだその辺り、意味不明な要件でも適当に忖度して想像で補完することが 親切だと勘違いしてる馬鹿が多くて困るね。
!! <これは> 断 固、追及 す る べ き だ ぞ ! <絶対だ!> !!
バカ麻生の年金全額税方式は、官僚による、年金基金を全額食い
潰してゼロにしてしまおうとする、大謀略だった !!!
~~~~~~~~
↓↓↓↓↓↓↓↓↓
↓↓↓↓↓↓↓↓↓
http://namidame.2ch.net/test/read.cgi/seiji/1202735334/ ↑↑↑↑↑↑↑↑↑
↑↑↑↑↑↑↑↑↑
この超、大、欺瞞!!!を、俺らが赦していいのか??!!!
なぜ自民党の議員どもが、年金のことになると官僚の味方をして
「消費税」 を上げて社会福祉だなどと煙に巻いてきたのか!?!? しっかり理由があったのだ!!!
それは、この食いつぶされてしまってきた年金の破綻が明るみに出る前に消費税を上げてしまうことで
官僚に食われてしまってもう残りがないのが明るみに出るのを隠すためだった !!!
官僚とバソオ猿メらが共謀し、この誤魔化し消費税上げ策謀をごり押ししてしまおうとしてきたのだ!!!
!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!! ここで騙されてはならんぞ !!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!
コピペ君って馬鹿だな、まで読んだ。
要件を明確にするために、仕様書に書いてあることが 分からなければ、掘り下げるなり想定したりするだろ普通
tr = コネクション.BeginTransaction() で作ったトランザクションの状態をを調べる方法ってありますか? コミットやロールバックした後に状態を調べて再度トランザクション状態にしたい場合や 2度BeginTransactionを実行したりとかを避けたいのですが VB6のトランザクション処理と多少使い勝手が違うので混乱しています
メール受信とかってできますか?
あまりにも質問が簡単すぎましたw 1、メールを受信(サーバーのメールは削除しない) 2、特定のアドレスのメールだけを受信し本文中のアドレスを抽出。(http・・・・など) 3、複数の違うアドレスを一定時間間隔で開いていく。このときブラウザで特定の文字が確認できたら タブを閉じる。 こんなことできますか?1ヶ月ぐらいまえに本を買ってとりあえず本に沿って計算機と透明にできるメモ帳なるものを 作ってみました。その程度のスキルなのですが。 この場合、ヘルプでメール受信などで検索してソースをゲットしてやってくのがいいのかなー? あまりに何もしらなすぎてどこから始めていいかまったく分かりません。('A`)
>>28 フラグとかで管理するのはだめ?
dim btrflg as boolean = false
dim bcmtflg as boolean = true
dim sSQL as string = ""
try
コネクション.BeginTransaction
btrflg = true
'SQLを実行
sSQL = "UPDATE ・・・"
if hoge.excute < 1 then
bcmtflg = false
end if
'SQLを実行
sSQL = "INSERT ・・・"
if hoge.excute < 1 then
bcmtflg = false
end if
catch
finally
if btrflg = true then
if bcmtflg = true then
hoge.Commit
else
hoge,Rollback
end if
end if
end try
35 :
デフォルトの名無しさん :2008/10/05(日) 05:08:29
質問させて頂きます。 現在、データベースの値をデータセットに格納する部分のロジックを作成しているのですが、以下のコードでは★部分でコケてしまいます。 --- Dim DataSet As DataSet = New DataSet() Dim adapter As New OdbcDataAdapter() Dim myCon As OdbcConnection myCon = New OdbcConnection("DSN=" & dsn & ";UID=" & uid & ";PWD=" & pwd) adapter.SelectCommand = New OdbcCommand("SELECT fieldname FROM datatable WHERE dataID = '12345678'", myCon) myCon.Open() adapter.Fill(DataSet) '←★ --- 色々調べてみたところ、上記ロジックのSQL文で"fieldname "の格納データサイズが3409バイトを超えた場合にコケている事がわかりました。 試しに、OdbcDataAdapterではなくOdbcCommandのExecuteReaderを使用してみたの ですが、やはり★部分でコケてしまいます。 --- Dim myCommand As New OdbcCommand Dim reader As OdbcDataReader myCommand = New OdbcCommand("SELECT fieldname FROM datatable WHERE dataID = '12345678'" myCon) reader = myCommand.ExecuteReader() Do While (reader.Read()) reader.GetValue(0) '←★ Loop --- エラーメッセージは、いずれも「OdbcExceptionはハンドルされませんでした。」です。 以上より、SQL文を発行した結果を参照する際にデータが特定のサイズ(3409バイト?)を超えると参照できないように見えるのですが、そのような認識で間違いないでしょうか? また、そうであれば、PG側でこれを回避する案を教えていただけないでしょうか? 開発環境:WindowsXP VS2005 VB.NET DBサーバ環境:Windows2003Server SQLServer2005 長文になりまして申し訳ありません。宜しくお願い致します。
こんにちは、只今だいぶ困っている状態でしてよろしければお力をお貸しください。 VB2005を使用して別のページにパラメータを渡すWebページを作成しております。 現在はjavascriptを使用して以下のように書いてあります (ソースを見れる状態ではないので細部が異なっているかもしれません) Dim prm1,prm2,Str As String ・・・・・・・・ Str = "<script type="text/javascript">" Str = Str & "window.open("別ページのURL?パラ1=" & prm1 & "&パラ2=" & prm2) Str = Str & "</script>" Response.Write(Str) すると別ページで渡された値がDBにInsertされるようになっていて、 「処理が完了しました」の画面が表示されます。 この別ページの内部がどのようになっているかはわからない状態です。 これを、(完了しましたの)画面を表示させないでページの処理(Insert)だけを行えるように変更しなければならないのですが、 検索してもうまい方法が見つかりませんでした。 方法をご存知の方、参考になるサイトを教えて頂ける方がいらっしゃいましたら、 どうかよろしくお願いします。 別ページのソースは完全に手を出せない状態です
>>34 アリガトンです
やっぱフラグとか基本で行くしかないですかね…
「今コネクションがトランザクション状態にある」
とか取得できれば楽なんですが
そういうプロパティもなさそうなんですよね…
もう少し試行錯誤してみます<(_ _)>
>>36 バックグラウンドでリクエストを投げればいいんじゃね?
javascriptからリクエスト投げなきゃ無理じゃない? フレームとかで隠すっつのもやらない方がいいだろうし。 どっちにしても同一ドメインじゃないと無理だと思うがどうだっけ?
>>35 とりあえずSystem.Data.OdbcじゃなくてSystem.Data.SqlClient名前空間の
クラスを使うように変更したら結果は変わるかも
>>37 トランザクションが終了するとTransactionのConnectionプロパティはNothingになると思う
41 :
デフォルトの名無しさん :2008/10/05(日) 18:17:32
超初心者の質問なんですがVB.NETはどうやって入手するんですか? あと.NET Frameworkとの違いを教えてください。 そのほか超初心者になんか教えてくださることあったら教えてください。
>>38 >>39 ありがとうございます、あんまりピンと来ないので今から検索してみますね
>>41 買え。もしくは、Express Edition をダウンロード。
.NET Framework はフレームワーク。VB.NET はその上で開発するためのツール。
>>41 お前は超初心者だからそんなことはとっくに知っているはずだ、思い出せ
そして醜く地べたを這いずる他の連中との違いを見せつけてやれ
46 :
31 :2008/10/05(日) 19:35:24
いろいろ見てみましたが、私みたいな初心者には難しいみたいですね。 とりあえず適当にもっと簡単なものからやっていこうと思います。m(_ _)m
>>40 35です。
確かにSqlClientを使用することで回避できました!
なぜOdbcだと駄目だったんでしょうか・・・?
48 :
デフォルトの名無しさん :2008/10/05(日) 22:01:37
VB6で、MAPIコントロールをつかってるんですけど .Netに該当するものは何ですか?
木状的収集容器不在?
System.Xml
>>28 トランザクションなんて使い捨てじゃない?
ようするに2度〜なんて設計自体がよろしくないかと。
それでも使うなら、CloseしたあとにNothingで初期化しとけば
あとから使うときの判断材料になるかと。
Dim dr As Data.DataRow() Dim dr As Data.DataRow の違いは何ですか?
前者は配列
ありがとうございます。 Dim dt As New Data.DataTable() Dim dt As New Data.DataTable これも前者は、配列という事でよろしいですか?
文法勉強せい
はい。勉強する為に、ここに来ました! メール欄は焼き鳥ですか?
いいえfusianasannです
串
>>56 の違いを勉強できるサイトがあったら教えてください。
勉強してきます。
なんでマニュアルを読まんのだ…
63 :
デフォルトの名無しさん :2008/10/06(月) 21:08:43
>>61 そういうものだと思って使うのが一番手っ取り早いwwwww
Data.DataRow()とData.DataRowはそもそも違う型なんだよ 書き方が似てるだけ
まずはMSDNのリファレンスマニュアルを見ればいいんじゃ?
ちなみに俺だったら Dim dr() As Data.DataRow Dim dr As Data.DataRow こう書くな。紛らわしいから。
聞きたかったのは Dim dt As New Data.DataTable() Dim dt As New Data.DataTable の方です。
本来の意味から考えると
>>67 よりも
>>68 の書き方のほうが自然なんだよ
Data.DataTable()は「Data.DataTableの配列」を表す「型」なの
72 :
68 :2008/10/06(月) 23:35:26
ああほんとだ、見間違えた Dim dt As Data.DataTable = New Data.DataTable()の省略形
>>68 VBは()を省略出来るという悪習がある。
そしてややこしいのは配列の定義にも()を使うということ。
こっちは省略するとまったく意味が異なる。
その2つはどっちも同じだが上のほうを使うことをお勧めする。
本来はこんな感じで覚えたほうがいいかもしれない。応用が利くと思うよ。
Dim dt As Data.DataTable = New Data.DataTable()
C#でもオブジェクト初期化子やコレクション初期化子を使うときは コンストラクタの()は省略できるようになったんだけどね
Dim dr As Data.DataRow() の()は配列の意味で Dim dt As New Data.DataTable() の()はコンストラクタの意味になる VBだとコンストラクタの()を省略できるから Dim dt As New Data.DataTable() Dim dt As New Data.DataTable は同じ意味になる Dim dt As Data.DataTable = New Data.DataTable() 今後は、こうゆうふうな書き方をしていった方がよい。 という事ですね。 ありがとうございました。
別にちゃんと理解して使うならAs Newでもいいと思うよ VB9ならOption Inferで型推論でもいいかな
ゆるいのがVBのいいところなんだろうけど 他の言語から来たら戸惑うよな
ダブルクォーテーションを文字列として扱う場合は """"で良いんでしょうか?
すいません。vb.netでExcelをコピー、編集して出力しているのですが、 元のシートに貼り付けてあるバーコードが編集後のシートではうまく 機能しません。(Excelのバージョンは2007です) ちなみにバーコードそのものはいじらずにリンクしてあるセルの内容を変えているの ですが、それが反映されず、右クリックしてもメニューにバーコードコントロール9.0 というのが出なくなり、プロパティを実行してもバーコードのプロパティも 出てこなくなりました。
パターン1とパターン2って書き方が違うだけで同じことなの? それとも違いがある? コンストラクタ内で初期化した方がいい? パターン1 Public Class AAA private field1 As CCC = new CCC() Public Sub New() End Sub End Class パターン2 Public Class AAA private field1 As CCC Public Sub New() field1 = new CCC() End Sub End Class
>>80 同じと考えていい。
フィールドでの初期化はコンストラクタより先に処理される。
継承がある場合、継承もと(親)のコンストラクタより優先して継承先(子)を含む
すべてのフィールドが初期化される。これはjavaと動作が異なる。
javaの場合は継承もとのフィールドから継承もとのコンストラクタ、
続いて継承先のフィールドから継承先のコンストラクタの順となる。
82 :
デフォルトの名無しさん :2008/10/07(火) 22:11:05
クリスタルレポートで、動的にフォントサイズを変更するってできますか? エクセルの「縮小して全体を表示」のような動作を希望してるのですが、 該当フィールドのフォントサイズの横のX2ボタンで式エディタに記載すると思うのですが、
83 :
デフォルトの名無しさん :2008/10/07(火) 22:38:32
これで良いのかな? if (length({tblname.item}) > 20) then 9 else if (length({tblname.item}) > 10) then 10 else 11
VB6 を VB.NET に変換する際にコードの修正量をできるだけ減らしたいんだが DataRowに格納されているフィールドの値を取得、設定するときに Value プロパティを 経由して実行したい。 良い方法はありませんか。(欲を言えば、ValueプロパティがあってもなくてもOKにしたい) Class ResultSet Private table as DataTable Private currentIndex as Integer 〜〜省略〜〜 Function Fields(ByVal fieldIndex as Integer) As Object Return table.Rows(currentIndex).Item(fieldIndex) End Function End Class 現状 Dim result as ResultSet result.Fields(0) = value value = result.Fields(0) 理想 Dim result as ResultSet result.Fields(0).Value = value value = result.Fields(0).Value
Valueプロパティを持ったクラスでラップして返す Object型からのWidening Operatorも実装すればValueプロパティを省略できる
ピロシキ
トランザクションの事で質問です SQLサーバーのスレで聞くべきなのかもしれないのですが VB2005で開発しているのでこちらで質問させていただきます PC1からトランザクションをかけてロックしたDBをPC2から参照したときに、 DBがトランザクションでロックされているという状態を知る方法はありますか? 今はタイムアウトでメッセージを出しているのですが 60秒待たないといけないので一瞬でロック中を表示して ユーザーに処理を待つようなメッセージを出したいと思ってます
>>90 早速ありがとうございます
これを見て対応してみたいと思います
Dim resultSet As Dynaset = new Dynaset Dim code As String code = result.Fields("code").Value result.Fields("code").Value = "1010" Public Class Dynaset Public table As DataTable 〜〜省略〜〜 Public ReadOnly Property Fields(ByVal name As String) As Field Get Return New Field(table.Rows(0).Item(name)) End Get End Property End Class Public Class Field Private _object As Object Public Sub New(ByRef obj as Object) _object = obj End Sub Public Property Value() As Object Get Return _object End Get Set(ByVal Value As Object) _object = Value End Set End Sub End Class
>>86 >>92 のようなソースを書いてみたんだけど、値は取得できるけど、値を設定してみても更新されない
FieldクラスのコンストラクタにDataRowとカラム名を渡して、
ValueプロパティでDataRow.Item(カラム名)に値をセットすると更新される
この2つの違いがわかりません。
>>93 値渡しをしているから・・・かな?
勘違いをさせてしまう言い方だが、
>Public Sub New(ByRef obj as Object)
> _object = obj
>End Sub
ここではなく
>Return New Field(table.Rows(0).Item(name))
ここのtable.Rows(0).Item(name)の時点で参照ではなくなっていると思う。
FieldクラスはDataRow と name を受け取るクラスにしなくちゃいけないかも?
>>94 なるほど、ありがとうございます。
DataRow と name を受け取る方向で、いろいろテストしてみます。
遠隔地のカメラから画像をPC内に取り込み、動画データとして保存する プログラムを作成しています。ちなみに VB.NET2005 画像をダウンロードし、1秒に1枚〜2枚のデータを保存することが できたのですが、それを動画に変換する方法が分かりません。 たぶん難しいと思いますが、ヒントなどを頂ければ、助かります。 非常に難しいようならば、複数のjpeg画像をaviなどの動画ファイルに 変換する、コマンドラインタイプのフリーソフトなんかでもいいのですが、 なにかないのでしょうか?
DataGridViewでDataBindingを使っているのですが、 DBの設計とUIに食い違いがあるときはどうするのが定石でしょうか? 例えば、DBではdatetime型だけど、画面上は和暦で表示し 元号をコンボボックスで選択、年月日はテキストボックスで入力したい というような場合です。
vfw api でぐぐってみるといい
>>97 ありがとうございます。
でも、わからないのは和暦西暦の変換方法ではなく、この変換処理を
どこに挟めばいいのかということなんです。
現在は単純に
da.Fill(ds)
dgv.DataSource = ds.Tables(0)
としているのですが、これだとdgvの列が自動生成されてしまいますよね。
dsに和暦を保持するための列を作って画面にはそちらを表示し、
もともとあった西暦の列は隠してしまう。
そしてda.Fillとda.Updateの直前に相互に変換すればいいでしょうか?
いや、自動生成の列は使用せずに、表示する列はすべて作成する。 んで、その中の日付表示する列のDefaultCellStyleプロパティの中のFormatメンバ に表示フォーマットを {0:ggyy年M月d日} という監事で設定すればOK
vb.net 2005使ってます。TextBoxの事で質問があります。 MultiLine=falseなテキストボックスの高さとパディング?(右余白)を変更したいのですが、 可能でしょうか? MSDNを調べると、Windows.ControlsにはPaddingっていううってつけのプロパティ があったので、 TextBox1.Padding = New Padding(30) こんな感じのコードをLoadなりに書いているのですが、反映されていない感じです。 テキストボックスの高さはフォントサイズとパディングの調整でなんとかならないか 期待しています。 よろしくお願いいたします。
高さはAutoSize = Falseなら普通にHeightとかで設定できる 左右の余白はEM_SETMARGINSが必要かな 上下の余白は……なんかあったっけ
>>103 AutoSize = false ですかorz
早速確認してみます
#VB.NET初めて1ヶ月・・・はまりまくりですorz
105 :
97 :2008/10/10(金) 14:57:07
>>101 ありがとうございます。確かに和暦で表示はできたのですが、本来の要求は
>DBではdatetime型だけど、画面上は和暦で表示し
>元号をコンボボックスで選択、年月日はテキストボックスで入力したい
なのです。この方法だと表示は和暦になりますが、編集するときも
「昭和」などと入力しなくてはならず、非常に不便ですよね。
DBとDataGridViewでデータをやりとりする間に変換処理をはさむ
のがいいかと考えていたのですが、もしかしたら
DataGridViewCellとDataGridViewColumnを継承して独自のコントロールを
作ってしまった方が早いでしょうか?
わが君は千代に八千代に さざれ石の、いわおとなりてこけのむすまで 和暦のプログラムがあるたびに、頭の中で国家がループする
>>105 まあ、カスタムコントロール作ったほうが早かな。
カスタムコントロールを作らないでやる方法は、
データ取得のSELECT文を日付部分の列を2つにして取得するように修正し、
ひとつをコンボボックスの列、もうひとつを日付のテキストボックスにする。
この2つの列はもちろん隣同士にしておき、
ttp://dobon.net/vb/dotnet/datagridview/ownerdrawcell.html このページを参考に
年号が左、日付が右であるとすれば日付の(右側の列の)CellPaintingイベントにて
年号の列の部分も合わせた幅および位置で描画を行えばヘッダが結合されたように描画できる。
デフォルトの(ビジュアルスタイルでの)ヘッダーを描画する場合は、VisualStyleRendererを使用してHeader.Item.Normalというエレメントを描画すればOK。
あとは、更新時に、2つ列のデータからDatetimeに変換してUPDATEすればいいんじゃね?
108 :
デフォルトの名無しさん :2008/10/10(金) 23:00:03
教えてください。 FormのWidthが123より小さく出来ません。 なんとかならないでしょうか?
109 :
108 :2008/10/10(金) 23:08:57
108です FormBorderStyle = Noneで123以下にしたいのです。お願いします。
>>109 Min なんたらとかってプロパティがない?
111 :
デフォルトの名無しさん :2008/10/10(金) 23:11:21
windows 2003 サーバーにアクセスする時 XP以降から VB6 のEXEだといちいち確認メッセージがでるのですが これって何とかなりませんか?
112 :
108 :2008/10/10(金) 23:31:26
>>111 詳しくは知らんけど、コンパネ→管理ツール→.NETflamework1.1ウィザード
の.NETセキュリティあたりを適当にいじってみる
ごめんVB6ってかいてあったわw
最低だなお前 こんな時間にすげえムカついた
VS2005にてスプラッシュ・スクリーンを既存のWindowsFormプ ロジェクトに入れようと思い、ソリューションエクスプローラーの上で 右クリック⇒追加⇒新しい項目⇒新しい項目の追加ウィンドウ が表示され、通常であれば「Visual Studio にインストールされたテンプレート」 という部分に「スプラッシュスクリーン」が表示される筈なの ですが表示されなくなりました。(以前は表示されていました。) どうすれば再び表示する事が出来るのでしょうか?
117 :
111 :2008/10/11(土) 21:56:03
>>113 すんません。スレ位置違いで投稿してしまいました。
それでも参考になります。
ありがとうございました。
118 :
デフォルトの名無しさん :2008/10/11(土) 22:18:25
VB.netでエクセルマクロいじくることってできます? 参照で追加しなきゃいけないライブラリとか参考になるサイトとか教えて下さい
Count とかって、メソッドで定義してる人もいれば Function で定義してる人もいるけど、 ReadOnly Property と Function って、どう使い分ければいいの?
121 :
デフォルトの名無しさん :2008/10/11(土) 22:57:01
さんくす
CountならFunctionだろう。動詞なんだから。 例えば配列のLengthはプロパティだな。名詞なんだから。
Countには名詞用法もあるが
.NETでCountはたいがいプロパティだな
If foo.Property() = foo.Property() Then は真となることが望ましいが If foo.Function() = foo.Function() Then はわからんぞとか 繰り返し実行するのがためらわれるコストの高い処理が含まれるなら ReadOnly Property じゃなくて Function にしろや などというガイドラインがあった気がする。
プロパティのgetで例外投げちゃダメとかもあったな
>>120 そのあたりはフィーリングで決めればいいんじゃないの?
要は「それ」をオブジェクトの属性と考えたほうが分かりやすいのならプロパティにすべきだし、
オブジェクトの動作の結果の取得と考えたほうが分かりやすいならメソッドにすべきなんだろうけど、
実際はそのどちらなのか判断に迷う場合も少なくないから。
例えばゲームポートを集約するようなGamePortsクラスを作ったとして、システムに接続されている
ゲームコントローラの数は、スキャンという動的な動作の結果なんだからメソッドにすべきだという
考え方もありうるし、クラスの意味から考えればそれは状態の一つだからプロパティに
すべきって考え方もありうる。(まあ普通は前者だろうけど)
ちなみにCountならプロパティの方が普通だろう。
VB5くらいの時代だったが、 今と同じく上位エディションにはクリスタルレポートがバンドルされていて、 印刷開始の命令が、Actionプロパティに1をつっこむというものだった。 当時でもこりゃないぞと思ったよ(笑
130 :
116 :2008/10/12(日) 21:15:39
誰か詳しい人教えて下さい。
>>131 それしか無いんでしょうか?
っていうかなんで急にスプラッシュスクリーンがテンプレートに表示されなくなったか分かりません。。。
そーいえば、Ajaxの何かをインストールしてからおかしくなったかも。。。
Atlasの何たらをインストールしたのが原因かもしれません。
VS2005+Ajaxは何度かインストールしたけど そんな症状は起きたことありません。
VB.NetでノートPCのタッチパッドを無効にする方法はありませんか?
>>134 デバイス依存だろうから無理っぽい。
マウスを殺すくらいのことならできるけど。(それでも、グローバルには無理)
初歩的な質問で申し訳ないです ある動作の経過時間を00:00:00形式で1秒ごとにカウントさせたいのですが どのように記述したらよいでしょうか? イメージとしては、電話の通話時間のように ・通話開始ボタン→常に00:00:00からカウント ・通話終了ボタン→カウント終了し、値を残しておく としたいです
0で初期化 00:00:00 形式で表示 経過秒を保存 ってだけだろ?w 何がわからないのか整理してみろよ
そのレベルのことができないということは、 プログラムなんて何も書けないことと同義じゃないのか?
>136 コピペプログラムだけど、こんな感じでどう? SUB MAIN () Dim t1 As Integer t1 = System.Environment.TickCount <---処理---> t1 = System.Environment.TickCount - t1 'かかった時間を表示 Console.WriteLine(TIME_TR) END SUB Function TIME_TR() Dim H_TIM As Integer Dim M_TIM As Integer Dim S_TIM As Integer H_TIM = ToRoundDown((t1 / 1000 / 3600), 0) M_TIM = ToRoundDown(((t1 / 1000) - H_TIM * 3600) / 60, 0) S_TIM = ToRoundDown((t1 / 1000) - H_TIM * 3600 - M_TIM * 60, 0) TIME_TR = H_TIM & ":" & M_TIM & ":" & S_TIM End Function
Function ToRoundDown(ByVal dValue As Double, ByVal iDigits As Integer) As Double Dim dCoef As Double = System.Math.Pow(10, iDigits) If dValue > 0 Then Return System.Math.Floor(dValue * dCoef) / dCoef Else Return System.Math.Ceiling(dValue * dCoef) / dCoef End If End Function
VBな人って時間の計算好きだよね 素直にTimeSpan使え
>141 TimeSpanは、24時間以上は使えないような気がする。
>141 24時間以上も使えたみたいです。 失礼しました。
>>137 センスが無さ杉。
死んだ方が良いよ。
氏ねじゃなくて、死ねだからね。
TimeSpanは1刻みが100nsで内部形式がInt64だから 最大約10^19[100ナノ秒]≒10^7[日]くらいか
>>144 センスって何?
問題の切り分けができないやつは、プログラマに向いてないよ。
質問です IsDate(Oct-08/512) ↑VB2008では何を返しますか? 個人的にはすごくFalse返してほしいんだけどTrue返してくる
IsDate("Oct-8" / 512) だと、実行時エラー(InvalidCastException)
あぁw ごめ IsDate("Oct-08/512") かな
True ちなみに、0512/10/08 0:00:00 に変換される
それとデバッグ中にフォームサイズ変更しようとするとVB2008ごと落ちるのは前バージョンからですか?
あ、デバッグ中のアプリじゃなくてデザインの方です〜
>>157 うん。やってみたけど落ちなかったよ。
作りたてのフォームだからかもしれないけど。
>>158 そっかぁ〜
わざわざ調べてくれてありがとね
データベースに警告が発生したときにイベントを発生させたくて、 下記のようなコードを作成したのですが、イベントが発生してくれません。 なにかほかにも必要なコードがあるのでしょうか? Private WithEvents connection As OracleConnection Private Sub connection_InfoMessage(ByVal sender As Object, _ ByVal e As System.Data.OracleClient.OracleInfoMessageEventArgs) Handles connection.InfoMessage Console.WriteLine(e.Message) End Sub
>>161 connectionのインスタンス生成やデータベースへの接続等は問題なく行っています。
んー。わかんね。WithEvents じゃなくて、AddHandler してもだめ?
164 :
デフォルトの名無しさん :2008/10/15(水) 00:01:48
すんません、WebBrowser をファイラ状態で使っています。 WebBrowser を C:\ フォルダーにNavigateして、C:\ が表示された後で、 そこに Key を送りつけて制御したいのですが、 WebBrowser から派生したものを使って、OnkeyDown メソッドを 叩けるようにはしたのですが、 Public Sub DoKeyDown(ByVal key As Keys) Dim e As KeyEventArgs = New KeyEventArgs(key) MyBase.OnKeyDown(e) End Sub これでたとえば ewbrFolder.DoKeyDown(Keys.Tab) や ewbrFolder.DoKeyDown(Keys.Apps) のようにしても反応せず、 WndProc(ByRef m As System.Windows.Forms.Message) で見てみても キーダウンのメッセージ が届いていないようでした。この場合どこか間違い があるでしょうか?
165 :
デフォルトの名無しさん :2008/10/15(水) 00:06:24
>>164 それって、たとえば Form 相手だと有効なの?
イベントをファイヤするのと、キーを送るのはまったく別物よ。
せめて、ウィンドウメッセージか SendInput を使おう。
166 :
デフォルトの名無しさん :2008/10/15(水) 00:19:21
>>165 >イベントをファイヤするのと、キーを送るのはまったく別物よ。
あーそうだったんですか!
>せめて、ウィンドウメッセージか SendInput を使おう。
調べてみます。ありがとうございました!!
VBで書いた結構大きなプロジェクトを丸ごとC#に変換したいのですが コードをVB→C#に変換する方法って何かありませんかね?
あるけど丸ごとじゃないな
169 :
167 :2008/10/15(水) 00:39:20
丸ごと変換したい場合はどうするのが一般的なんですか? クラスごとに変換して合体させるんでしょうか?
「変換しない」が一般的で唯一の正しい答え
DLLにしてC#から使えばいいじゃん
172 :
167 :2008/10/15(水) 00:48:22
結構古いプロジェクトなんですがC#で改良したいんです
しつこいんだよドアホ
176 :
デフォルトの名無しさん :2008/10/15(水) 19:46:13
DateTimePickerのテキストボックスみたいなとこみたいにカーソルがない状態ってそうやれば作れますかね? テキストボックスのカスタマイズで出来ますでしょうか? やり方教えていただきたく
>>167 175に別の答えがあるかもしれんが、ファイル単位ならSharpDevelopが使えると思うが・・・
俺はネットで拾ってきたサンプルソースを変換かけるのに良く使ってる。
それと、VBってVB.Net?それともVB6以前?
古いプロジェクトってのが気になるぜ。VB6だと手間的に話にならないと思うし。
>>176 そうやればってどうやれば?ってのはいいとして、ユーザーコントロールで
+--UserControl---------------------+
|[TextBox] 年[TextBox]月[TextBox] 日 |
+---------------------------------+
UserControlは白背景で枠有り。
TextBoxは枠なし。
年/月/日はラベル。
とかはどうよ。
1個のテキストボックスで同じ様な挙動させようとするとたぶん苦労するよ。
>>177 どうも、誤字でした。
えーと、テキストボックスを3個使うのは、そのようにやるつもりなんです。
私の聞き方が悪いようでうまく伝わってないようです。
3個使うテキストボックスの1個の中の話でして。
例えばDateTimePickerのyyyyの部分が2008のときに2だけDeleteして3008にするようなことは出来ません。
というのは2008のどれか1文字をDeleteすることは出来ません。そもそもDeleteキーもBackSpaceキーも効きませんが
そもそもカーソルが存在しません。
このカーソルが存在しないっていうのをどうやったら作れるかな、という質問でした。
そもそもTextBoxじゃダメなのかな・・・
そもそもって書きすぎだな俺
+--UserControl---------------------+
|[Label] 年[Label]月[Label] 日 |
+---------------------------------+
のようにしてUserControlのKeyイベントでLabelのTextを操作するのがいいみたいです。
お騒がせしてすみませんでした。
>>177 さんありがとうございました。
181 :
164 :2008/10/16(木) 20:09:02
すみません、また質問です。
WebBrowser をファイラ状態で使って C:\ フォルダーにNavigateして、
C:\ が表示された後ですが、このときには、そのWebBrowser自体に
Keyを送りつけても、MouseEventを送っても(それらをウインドウ・メッセージで送っても)
反応はなく、あくまでも、その内部の、ファイル・リストビューのオブジェクトに
送らないと反応できないようでした。
目的は、そのファイル・リストビューのコンテキストメニューを表示すること
なのですが、その場合は、そのファイル・リストビューのインスタンスから
そのコンテキストメニューのインスタンスを知る必要があるようで、
その場合には
http://pc11.2ch.net/test/read.cgi/tech/1160209713/187-287 のような方法を取るべきらしいこそがわかりました。ここで言っている、
リフレクションを使ってWebBrowserのインスタンスからaxIWebBrowser2という名前で
IWebBrowser2インターフェイスを取得。
→IServiceProviderにキャスト
→IShellBrowserをIServiceProvider.QueryService経由で取得
→IShellViewやIFolderViewをIShellBrowser.QueryActiveShellView経由で取得
→いじり放題
の最初の段階として、
Dim axIWebBrowser2 As IWebBrowser2 = CType(ewbrFolder, IWebBrowser2)
のように行いたいのですが、この IWebBrowser2 インターフェースが認識できない
ようでソースコード上でエラー表示(下波線)されました。.NETFrameworkでは
このインターフェースは対応していないようですがどのようにして使用可能になる
でしょうか?
182 :
デフォルトの名無しさん :2008/10/16(木) 20:12:10
リフレクションなぞ使わなくともActiveXInstanceプロパティで公開されてる IWebBrowser2インターフェイスはshdocvw.dllをCOM参照すれば使えるようになるがその流れだとわざわざ参照する必要は無いな IServiceProvider以下は ・自前で定義する ・Windows SDK入れてインターフェイスが定義されているidl探してmidl.exeでtlb作ってそれをCOM参照……できたっけ? 直接COM参照できないならtlbimp.exeでdll作ってそれを参照
184 :
デフォルトの名無しさん :2008/10/16(木) 22:21:08
>>183 レスありがとうございます。
ググリましたら、確かに、Windows.System32内のshdocvw.dllをCOM参照するべきこと
がわかり、そこで
axIWebBrowser2 = CType(Me.ewbrFolder, SHDocVw.IWebBrowser2)
とやってみましたができませんでした。ここでおっしゃって下さった ActiveXInstance を使って
axIWebBrowser2 = CType(Me.ewbrFolder..ActiveXInstance, SHDocVw.IWebBrowser2)
としましたところ確かにCastはできました。ただ、これから IServiceProvider へのCastは
できませんでした。
>IServiceProvider以下は
>・自前で定義する
>・Windows SDK入れてインターフェイスが定義されているidl探してmidl.exeでtlb作ってそれをCOM参照……できたっけ?
> 直接COM参照できないならtlbimp.exeでdll作ってそれを参照
この自前で定義するのも難しそうですが、idl・・・の件は現在無知のため調べてみないと
わからない状態でした、もう少し苦しんでみます。ご指導ありがとうございました。
またよろしくお願いします。
186 :
185 :2008/10/16(木) 23:42:47
あ、違ったかな。 Marshal.GetComInterfaceForObjectでIntPtrを取得して、 それをMarshal.QueryInterfaceで変換する。 だったかな。 うろ覚えですまん。
いらんよ、Marshalなんぞ。 参照カウンタが上がって面倒なだけだ。
188 :
デフォルトの名無しさん :2008/10/18(土) 15:48:21
currency を$にしたいのに\になっちゃう どうすればいいの?
189 :
デフォルトの名無しさん :2008/10/18(土) 15:50:21
>>188 Globalization の CultureInfo をどうたらこうたら
190 :
デフォルトの名無しさん :2008/10/18(土) 16:04:51
191 :
デフォルトの名無しさん :2008/10/18(土) 16:07:39
>>190 データの形式にもよるけど、シリアライズ・デシリアライズが簡単でおすすめ。
出力なら、XmlTextWriter のやつを探せばいいんじゃね?
193 :
190 :2008/10/18(土) 16:25:38
>>191 レスありがとうございます。どのようなものか読んだだけではすぐにはわかりませんでしたが、とにかく試してみます。
>>192 私にとってはそうでもないんです><
194 :
190 :2008/10/18(土) 19:16:47
>>191-192 Serialize やってみたら本当にすごい簡単にできました!
次に、生成されるXMLについてなのですが、これに
<?xml-stylesheet type="text/xsl" href="style.xsl"?>
のような行を追加することは可能でしょうか?
XmlWriter作って先にXmlWriter.WriteProcessingInstructionで書き込んでおく
196 :
190 :2008/10/18(土) 20:59:24
>>195 すげーーーー! あなたが光り輝いて見えます!
197 :
デフォルトの名無しさん :2008/10/19(日) 00:50:11
Mysqlへの接続についてはココでいいのかな? サーバーPCの環境 OS XP VB2003 SERVER アパッチ DB Mysql 問題点 Mysqlに接続できない エラーメッセージ 'MySql.Data.MySqlClient.MySqlException' のハンドルされていない例外が mysql.data.dll で発生しました。 Unable to connect to any of the specified MySQL hosts Public str_Domein As String = "192.168.**.**" Public connStr As String = String.Format("server={0};user id={1}; password={2}; database=aaa; pooling=false", str_Domein, "hogehoge", "hagehage") LAN上のIP指定では問題なく接続できていたけど、諸事情により野外でノートを持っていき接続する必要が出てきた そこで、str_Domeinを「Public str_Domein As String = "hogehage..net"」のようにドメイン指定にしてみたら接続できなかった 引っ越す前は問題なかったけど、引越しをし、光プレミアムに回線が変わってから使えなくなってちょっとアセってます 引越し前も後もサーバーPCの設定はしていないので繋がっても不思議ではないが繋がらなくなったのでルーターの設定かと思い ポート3306のルーティングをしたり、ファイアウォールもオフにしたりしたけどダメ サーバーPCもファイアウォールの3306のポート設定してあります 何か設定忘れてるかな?
DBはDB板へ
板違いでしたか 聞きなおしてきます 失礼しました
200 :
デフォルトの名無しさん :2008/10/19(日) 01:02:53
201 :
デフォルトの名無しさん :2008/10/19(日) 01:25:21
初心者にオススメ本を?
202 :
201 :2008/10/19(日) 01:33:37
すみません。誤爆しました
VB2008でForm上に自分でデザインした画像ファイルを使用したボタンを設置したいのですが、一般的なやり方ってどのようなやり方がありますか? 現在は1つの画像ファイルに|通常時|押された時|無効の時|のような感じで並べてあり、 パネルの中に画像を読み込ませたピクチャーボックスを置いてマウスオーバー・ダウンなどでピクチャーボックスの位置をずらして模擬ボタン作っています。 あまりスマートな方法ではないと思うので、ほかに方法はないでしょうか? よくあるオンラインゲームのランチャー画面的なグラフィカルなものをできるようにしたいです。
Buttonを継承したクラスでOnPaintをオーバーライドする およそVBらしくない手段だから頑張って勉強してね
OnPaintをオーバーライドってのが難しくてよくわからんなぁ わかりやすく解説したサイトorサンプルはないものか…
onpaint button vb でぐぐれ 「スマートにやりたい」っていうのが理由なんだったら 横着せずにちゃんと基礎からオブジェクト指向を勉強した方がいいよ 継承してオーバーライドしなくても一応Paintイベントでもできるんだよ それだと使い回し効かなくて全然スマートじゃないけどね
ピクチャーボックス使ったボタンコントロール作りゃいいじゃん
0お
初めて質問させていただきます>< VBで作成したテキスト入力欄にTABキーでフォーカスを移した際に 元々入力されている文字列を全選択されている状態にしたいのですが、 これって、プロパティの方で設定できるのでしょうか? それともプログラムの方にそういうロジックを組まなければいけないのでしょうか?
そんなプロパティは無いな
>>210 ないのですか。。
では、プログラムの方にロジックを組まなきゃいけないんですね;;
212 :
209 :2008/10/22(水) 14:26:51
>209です。 文字列を全選択する方法がわかったのですが、 どうしてもマスクが使用されているテキストボックスだけ フォーカスを移動させても、全選択されません。 SlectAllを使っているのですが、マスクが使用されている箇所も 全選択できるようにはならないのでしょうか?
213 :
デフォルトの名無しさん :2008/10/22(水) 19:00:45
beforeX: X For i As Integer = 0 To p If P(i) Then Y Goto beforeX End If Next GoTo 使わないでもっと短いソースになりますか? (X, Y): ステートメント P(i): フラグ 要するに「フラグをすべて調べて、最初に見つかったのだけ処理して、ループの前に戻る」コードです。
Xをサブルーチンにするとか 仮に短くならなくても上向きのgotoだけはありえない
>>213 コードが短くなることに価値のプライオリティを置くのは頭悪げ。
いや「頭悪げ」じゃなくて「頭悪い」と思う。
頭悪げも頭悪げ
217 :
213 :2008/10/22(水) 20:47:44
えー、GoTo が基本的によくないのはわかってるつもりなんで、最初は Do X For i As Integer = 0 To p If P(i) Then Y Continue Do End If Next Exit Do Loop としてたんですよ。でもDo文の直下に Exit Do があるのも気持ち悪く見えたんですが…
While True X Dim match1st as Integer = GetMatch1st() if match1st = -1 then Exit While Else Y End If End While
219 :
213 :2008/10/22(水) 21:40:21
>>218 やはりFor文を分離するのがよかったですか。なるほど。
if match1st = -1 then
Exit While
End If
Y
のようにすることにしました。
( ^ω^)σ(i)
221 :
デフォルトの名無しさん :2008/10/23(木) 03:12:57
素人にオススメ本にょ?
Disposeメソッドを実行するのと、オブジェクトにNothingを代入するのって、 全然意味が違うの?
全然違う Nothingを代入するのはほとんどの場合無意味 IDisposableを実装した型は基本的には必ずDisposeすること
>>222 Nothingはオブジェクトを参照していないことを明示的にするため
または参照を解除するために使う
Disposeは確保したリソースが使用しているメモリ領域を開放するために使う
たとえばピクチャボックスならNothingで画像消去してDisposeでメモリ解放するのが
正しい使いかた
>>223-224 Disposeメソッドを実行した後に、Nothingを代入すればよい?
Nothingの代入は余計?
ローカル変数ならNothingの代入はまずいらない
フィールドならもう使えないことを明示する目的でNothing代入したりするけどしなくてもいい
>>224 の言ってるようにピクチャボックスのImageプロパティなんかはNothing入れといた方がいいかも
>>225 VB6からの人なんだろうけど、そういう「おまじない」志向いい加減止めたら?
大事なのは、
(1)ちゃんと自分の頭で考えることと、
(2)そのために必要な知識をきちんと学習すること
だろ。
IDisposable.Disposeの意義というか存在理由なんてweb上の情報だけでも
結構得られると思うんだけど。
Pitvate Function GetHoge() As Integer Dim hoge as Integer If IsA Then hoge = GetA() Else hoge = GetB() End If 'ここでReturn hogeが必要だったけど書き忘れバグ End Function VB2005でついに上のような感じのバグを書いちゃったんだけど、 再発を防ぐお手軽な方法や定石ってあるのかな? 前々から何度もこのバグ出しそうになって気をつけていたつもりだったんだが。 ひとまずhoge変数自体を消去して、分岐後すぐに値をReturnするように修正した。 暗黙的にGetHoge = 0って行が存在してるんだろうな・・・ 仕様としてExit Functionを残すためにもしょうが無いのか。
普通に警告でなかったっけ? まあそんなポカミスあまりやらないし、やってもすぐ発見可能な類のものだから 気にすることもないと思うんだが。
そうか、気にしすぎも良くないか。 ちょっと動揺しすぎてたみたいだ。 ちなみにVB2005では警告は出なかった。
つか、自分でも色々とVB6 と .NET の速度を計測したけど やはりVB6の方が起動速度も処理も早いね。 googleで VB6 vs .NET でぐぐってごらん。 .NET好きだけど遅いのが難点。
そもそもVB自体が速度が問題になるような時に使う言語じゃない ・・・は言っちゃダメなのか、やっぱ。
WEBサイトへの自動ログインツールを作ろうとしていますが、ちょっと質問させて下さい。 現在、Yahooメールにログインする際には、 ID ・ PASS を手動で入力しなくてはなりませんが、メンドクサイのでそれをアプリから自動で入力し ログイン出切るツールを作りたいと思っています。 しかしながらそれを実現する為のアイデア(方法)が皆目検討がつきません。 以前にこの様なソフト(ツール)を作った事がある方がいらしましたら、ヒントをお願いします。 ※例えば、WindowsFormからボタンをクリックするとYahooメールのURLをWindowsForm内に事前に作成している Browserに表示し、ID・PASSワードを自動で入力しYahooメール画面に切り替わる という事をしたいと考えています。
235 :
デフォルトの名無しさん :2008/10/25(土) 01:16:00
速度うんぬん言うなら、C+SDK 最強w
236 :
デフォルトの名無しさん :2008/10/25(土) 01:16:50
>>234 日経ソフトウエアに、GMail にログインする、ってのがあったよ。
それを参考にしたらどうだろう?
>>263 それは雑誌でしょうか?
出来れば「@IT」みたいなサイト上にソースとかが公開されているページをご存知でしたら
お教えください。
238 :
234 :2008/10/25(土) 01:29:37
ぐぐったら私がやりたい事をすでにやった人がいて また、HPに公開されていました。 これから作ってみようと思います。
それはどこのサイトでしょうか? 出来ればサイト上にソースとかが公開されているページをご存知でしたら お教えください。
それ私も知りたいです。 ヤフオクの出品手続きなど自動化したいので
ヤフオク大介使えよ・・・
InternetExplorer.application
Framework2.0以上で Const定義もしくはSharedのプロパティ・関数を サブクラス側に定義を強制させる方法はない? × Shared・ConstにはMustOverrideが使えない × Shared・ConstはInterfaceで定義ができない × Shared Sub Newでは実体が一度でも作成されないと実行されない 素直にSharedやめるか、コメントで「実装してね(はぁと」とでも書くしかない?
> × Shared Sub Newでは実体が一度でも作成されないと実行されない これは意味が分からんが、まあSharedでなければならない理由は大抵無いだろ
MSDNフォーラムで質問してみたらスルーされて
涙目になったんでここで質問させて下さい。
VS2005 & Visual Basic Power Packs 3.0 もしくは
VS2008で使えるようになる、DataRepeaterコントロールについて、
MSDNライブラリ: 「2 つの DataRepeater コントロールで関連データを表示するには」
http://msdn.microsoft.com/ja-jp/library/cc488313.aspx 上記文書の通りに、完全に同じ手順で配置してみても、動作してくれません。
マスター:親側は動いてくれるのですが、
詳細:子側のDataRepeaterコントロールに何も表示されません。
DataRepeaterの代わりにDataGridViewを使うと、
子側のコントロールも中身のデータも問題なく表示され、親子の連動も出来ています。
VS2005・VB PowerPacks 3.0でも、VS2008(90日評価版ですが)でも、同じ症状です。
念の為SPは当てていますが症状変わらず。
これらはどんな事が原因で起き、正常に動作させるにはどうすれば良いのでしょうか?
まだVS2005上でリレーション・連動がどんな仕組みで表現されているかもわからない入門者ですが
小さなヒントだけでも構いませんので、教えて下さいな。
>>243 仮にそーゆーメソッドが定義できたとして、どうやって呼び出すつもりなの?
インスタンスがなけりゃどの派生クラスのものかなんて判断できないんだから
結局派生クラスを直接指定して呼び出すしかないだろ。
実行時にまでチェックを遅らせていいなら、
型情報から呼び出すことは出来るが。
VB2005でWin32のGDIを使いたいのですが、文字を書くときにフォント名をLOGFONT構造体に設定しようとして <MarshalAs(UnmanagedType.ByValArray, SizeConst:=LF_FACESIZE)> _ Public lfFaceName As Byte にどうやって”MSゴシック”などを指定していいのかわかりません 何かご存じの方いらっしゃいませんか
XMLのファイル処理でタグに応じてサブクラスが分かれるロジックで
Constでタグ名の定義を強制させてループで楽しようかと思ったんだが
そもそものshared使う発想自体が間違ってたようだ。
>>244 ConstはMustOverrideできないから、Sharedの変数に設定すればどうか
って思いついてサブクラス側のShared Sub New内で変数に設定しようとしたが失敗
>>246 そういやそうだね
「タグ名=[サブクラス].[shared定義]」で判断するなら
「タグ名="タグ名"」にするのと大差なかったね。
この時点でどのサブクラスが対象か判明してる訳だし…
連日の残業で疲れているようだ。
今日は早く帰ることにしよう。
249 :
デフォルトの名無しさん :2008/10/27(月) 20:15:46
>>247 <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _
Public lfFaceName As String
で宣言すれば?
コピペ君って馬鹿だな、まで読んだ。
>>246 ジェネリックで制約かければ使い道がないこともない
>>246 デザインパターンのSingletonを使う。
俺は嫌いだが。
254 :
デフォルトの名無しさん :2008/10/27(月) 23:36:13
Graphics と Bitmap とでは概念や機能に違いがあるようですが、どちらをどのように使えばいいのかわかりません>< 特定の操作を与えて生成した画像を表示し、その後、ファイルに保存できるようにしたいのです。 ・ Graphics.DrawLine/DrawPolygon/DrawString/etc と Bitmap.Save との両方に相当するメソッドを備えたクラスはありますか? ・ どちらかのクラスで、上に挙げたもののうちそれが持っていないものを代用するにはどうすればよいでしょうか。
>>254 言ってることの意味がわからない。
GraphicsやImageといった基本的なクラスの意味すら理解せずに
グラフィックを扱うコードなんて書けるはずないと思うけど。
Bitmapクラスのコンストラクタで空のBitmapを作成して, Graphics.FromImageでそのBitmapオブジェクトに対するGraphicsオブジェクトを取得して そのGraphicsオブジェクトを使ってBitmapオブジェクトに描画して 最後にBitmap.Save
257 :
254 :2008/10/27(月) 23:45:37
もしかして Dim g As Graphics '描画 (MainForm.CreateGraphics()).DrawImage(g) Dim b As Bitmap = New Bitmap(g) b.Save(ファイル名) とかでいけちゃいます?
258 :
254 :2008/10/27(月) 23:46:23
うわレス早! ありがとうございます 被ってすいません、今から試します><
259 :
254 :2008/10/28(火) 21:54:51
ありがとうございます!
260 :
デフォルトの名無しさん :2008/10/29(水) 09:36:13
.NET 2003です。 Dir関数で、指定したフォルダが存在するか調べたいんですが、 メディアのドライブ(DVDドライブなど)などを指定すると、 ドライブにディスクが入っていないときに 実行時エラー52が出て止まってしまいます。 msdnのDir関数んとこ見ても、それらしき記述は見あたらないのですが… どのような場合でどのような例外が投げられるのか教えていただけませんか? 今回の場合、ドライブにアクセスできないので、76エラーならわかるのですが、 何故52エラーなのかよくわかりません。 また、Qドライブなど、存在しないドライブを選んだときは、特にエラーが発生しません。 (やたら時間がかかりますが) なにかもうちょっと手っ取り早くそのフォルダがあるか無いか調べられる関数ってVBには無いのですか?
261 :
260 :2008/10/29(水) 10:05:18
System.IO.Directory.Existsで自己解決しました… .NETがありましたね、そういえば。
>.NET 2003です。 ↓ >.NETがありましたね、そういえば。 …えー
あれだな、VB独自関数しか調べなかった
264 :
260 :2008/10/29(水) 14:04:24
>>263 おっしゃる通りでw
VBなんて触ったのVer.5以来だったから…
265 :
デフォルトの名無しさん :2008/10/29(水) 20:14:26
教えてください。
やりたいこと。
標準のボタンコントロールを継承して作ったカスタムのコントロールを
DataGridViewのセルに表示させたい。
やってみたこと
http://msdn.microsoft.com/ja-jp/library/7tas5c80 (VS.80).aspx
を参考にやってみましたがEditingControlなので編集状態にならないとカスタムコントロールが表示されません。
またDataGridViewTextBoxCellではなくDataGridViewCellを継承してみるも当然ながらなにも表示されません。
何か方法ありませんでしょうか。
VB2008、XP。
266 :
デフォルトの名無しさん :2008/10/29(水) 21:35:53
コピペ君って馬鹿だな、まで読んだ。
スプレッドの一セル内の文字列の一部分をユーザーが範囲選択、 その値を取得する方法ってありますか? vb6.0だとSelText使ってたんだけど。
>>265 特定のカラムのセルに、常にボタンを出すだけなら
カラムを DataGridViewButtonColumn にするだけなんだけど
それでは駄目な理由が今ひとつわからない。
行毎にボタンを表示したりテキストを表示したりしたいの?
それなら今俺が作ってる。業務上なんで晒せないけどw
(DataGridView の CellPainting イベントでも出来るんだけどね)
>>268 スプレッド?
270 :
268 :2008/10/30(木) 10:19:47
271 :
デフォルトの名無しさん :2008/10/30(木) 15:51:48
2008で質問です。 自作したユーザーコントロールから、 ダイアログ形式のフォームを ShowDialogメソッドでモーダル表示しているのですが、 フォームのStartPositionプロパティをCenterParentに しているのに、親フォームの中央に 表示されません。 ためしにCenterScreenにしてみましたが、 おなじく中央に表示されません・・・。 なぜなのでしょうか・・・? どうすれば親フォームの中央に 表示されるようになりますか?
子フォーム.ShowDialog(親)
274 :
265 :2008/10/30(木) 23:43:51
>>269 どうもありがとうございます。
プロジェクト全体で主にデザイン上の理由からカスタムのボタンを使ってて
全体の統一をとるためにグリッドのボタンもカスタムのボタンを使いたいということです。
とりあえず今回はDataGridViewButtonCellを継承したクラスで地道にPaintすることで凌ぎました。
DataGridViewCellを継承してPaintで頑張れば何でも表示できるんだろうけど
編集時のコントロールが設定出来るんだから編集時以外の状態も
コントロールを設定出来そうな気がしたんですが見つけられませんでした。
探し方が甘いのかなあ。
誰かご存知の方いましたら教えてください。
275 :
デフォルトの名無しさん :2008/10/30(木) 23:49:19
VB 2008 Express EditionでRS-232Cポートの通信を行いたいのですが、
http://msdn.microsoft.com/ja-jp/library/ms143551 (VS.80).aspx?ppud=4
にある、『Dim instance As SerialPort』の変数宣言ができません。
SerialPort型なんて無いですよね?
ツールボックスからSerialPortを貼り付けて、名前を揃えてもエラーになるし・・・
どうしたら良いのでしょう?
>>275 名前空間って概念が理解できてないみたいね。
遠回りでもちゃんとそれを理解した方がいいよ。
コピペグラマになりたいのなら薦めないけど。
>>275 Dim instance As SerialPort
って書いてダメだとSerialPortの下に波線が出るよね?
そこにマウス持ってくと赤い丸に白のエクスクラメーションが出るよね?
それをクリックするんだ
278 :
デフォルトの名無しさん :2008/10/31(金) 00:34:57
279 :
271 :2008/10/31(金) 08:08:37
>>272-273 それでも中央に表示されないんですよ・・・。
ShowDialogで親を指定しても、
StartPositionを指定しても
ダメなんです。
デザイン時のLocationの位置にしか
表示されないんです。
>>274 >編集時以外の状態も
>コントロールを設定
DataGridViewCell の派生クラスはどれも
コントロールを表示してるんではなくて
自力で描画してるので、
>DataGridViewButtonCellを継承したクラスで地道にPaint
ボタンのデザインのみ変更したいのなら、
そのアプローチは正しいです。
281 :
デフォルトの名無しさん :2008/10/31(金) 13:18:55
>>281 ボーレートとかスタート/ストップビットとか対向機器とあってますか?
ちゃんとやるなら、System.IO.Portsクラス使った方がよろしいかと
ご所望のイベントハンドラもこっちにはありますし
この手の制御やるならラインモニターぐらいは持ってないと辛いと思いますよ
(持ってたらごめんなさい)
VB2008でAlt+Tabが1回押された時と同じ動作をしたいです。 現状、SendKeys.Send("%{TAB}")して逃げてたんですが、 たまに固まるので、他の方法で画面を切り替えたいんですけど、 何かいい方法ってありますか。
カモンエスパー
285 :
デフォルトの名無しさん :2008/10/31(金) 14:12:17
286 :
281-285 :2008/10/31(金) 14:33:24
すいません。 自分の中でいろいろ混乱しているようなので、一度整理してきます。
FlexGridの一つ前のバージョン(2005?) ってVB2008でも使える?
DataGridViewで、行数が少ないとき、空きスペースができますよね。 この空きスペースをなくし、行数ぴったりの高さにしたいのですが、 何かいい方法はないでしょうか?
289 :
デフォルトの名無しさん :2008/10/31(金) 15:15:43
>>289 専用ソフトとやらが何やってるか
モニタ使って観察してみれば違いがわかるんじゃないの?
仕事でやってるんなら機器開発元に聞くとか
日付情報が入っているデータ配列を MonthCalenderコントロールを使用してデータのある日付に 印を付けることって出来るのでしょうか? プロパティを見る限りでは、当日の○印の色設定とかは見当たりますが・・・
292 :
283 :2008/10/31(金) 17:01:11
283は、アクティブなウィンドウの次(前?)のウィンドウをアクティブにしたいってことです。 で、VBだけじゃ厳しそうだったんで、Win32APIをみながら↓のように作ってみました。 他に良い方法あったら教えてください。 Private Sub GetNextWindow() Dim titles As New ArrayList For Each p As Process In Process.GetProcesses() If Not p.MainWindowHandle.Equals(IntPtr.Zero) Then titles.Add(p.MainWindowTitle) End If Next Dim hwnd As Integer = 0 hwnd = GetForegroundWindow() hwnd = getNextWindow(hwnd, 2) While true Dim sb As New StringBuilder(&H1000) If GetWindowText(hwnd, sb, &H1000) <> 0 Then If titles.Contains(sb.ToString()) Then AppActivate(sb.ToString()) Return End If End If hwnd = getNextWindow(hwnd, 2) If hwnd = 0 Then Return End If End While End Sub
Alt +Tabで表示されるウィンドウの定義が微妙
VB2008です 下のものをデバッグしたら 「縮小変換しないで呼び出される'Show'がないためオーバーロードの解決に失敗しました」 というエラーが出たのですが どうやったら解決できますか 「→」のところでエラーが出てます よろしくお願いします Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Score As Integer If Integer.TryParse(TextBox1.Text, Score) Then If Score >= 70 OrElse (Score >= 50 AndAlso _ →MessageBox.Show("レポート提出済?", _ MessageBoxButtons.YesNo, MessageBoxIcon.Question) = _ DialogResult.Yes) Then MessageBox.Show("合格", "点数", _ MessageBoxButtons.OK, MessageBoxIcon.Information) Else MessageBox.Show("不合格", "点数", MessageBoxButtons.OK, _ MessageBoxIcon.Error) End If Else →MessageBox.Show("整数を入力してください", _ MessageBoxButtons.OK, MessageBoxIcon.Error) End If End Sub
ヘルプでMessageBox.Showを調べて引数にどんなのを渡せるのか確認する
296 :
デフォルトの名無しさん :2008/11/01(土) 17:18:43
VS.NET2003です
ヤフオクの自動で出品するものを作っているけど最後の最後がわかりません
HTMLでは
<input onClick="Ya.submit(document.auction, '
http://edit8.auctions.yahoo.co.jp/jp/config/submit ');disabledSubmit(document.auction);" type="button" value="利用規約とガイドラインに同意して出品する">
と書いてあり、このボタンを押して終了だけどさっぱりわかりません
どう書けばいいの?
>>296 なにをしたいのかさっぱりわからないです
たしかにw ボタンを押すようにするソースがわからないです onClickのイベントを実行すればいいと思うけどどう書けば実行されるのかさっぱりわからないです
WebBrowserコントロール使ってるなら、Javascriptとやり方は一緒。 GetElementByIdとかで対象のエレメント探してClickメソッドで実行出来ると思う。
300 :
296 :2008/11/02(日) 00:12:24
>>299 IDやnameがあるならいいけどないんですよね
だから1ヶ月近く先に進めないのです
>>300 じゃあGetElementsByTagName 使えばいいんじゃないのかな。
ボタンなんてのは画面内で大抵数が決まっているだろうから、2つめとか3つめとかで取得すればいいと思う。
それが嫌ならonClick属性の内容を見てみればある程度特定出来ると思うけど。
302 :
デフォルトの名無しさん :2008/11/02(日) 00:50:48
しょせん POST なんだから、必要なデータを Stream に書き込んで、 HttpWebRequest で Post する、って手もあるな。
>>296 2chで質問してソフト作ったらそのソフトを売るつもりだろうw?
そんなの簡単に出来るけどおしえねぇーw
いや、もうあるから・・・ ヤフオク大介っていう超便利なソフトが・・・
305 :
296 :2008/11/02(日) 10:37:36
自分のスキルに絶望した・・・o... rz
>>301 >>302 昨夜ヒントを元に調べながらやってみたけどエラーばかり・・・
もうしばらく奮闘してみます
>>303 顧客・販売データをBDで管理しているので市販ソフトでは対応できないのだよ
自分のスキルでは売れるものなんて作れない
なので今はo... rzなってる
306 :
296 :2008/11/02(日) 11:19:19
連投スマソ 某サイトからのぱくりだけど For Each x In IE.Document.Forms(0).All If TypeName(x) = "HTMLInputElementClass" Then If x.value = "利用規約とガイドラインに同意して出品する" Then Call x.Click() Exit For End If End If Next でなんかできたっぽい
>>296 ちょっと質問なんですけどFlashで作られた画面上に特定の項目を入力し、
Flash内のボタンをクリックする
なんて事は出来ますか?
お気に入りのサイトがFlashで作られていてログインとかもFlashなんです。
でこれも何とか自動化出来ない物かと思ってます。
VB.netに限らない話なのかもしれませんが、 Dim a As Byte = 15 Dim b As Byte = 32 Dim c As Integer c = a * b のようにするとデバッグ時にオーバーフローエラーが出ます。 が、 ・a がByte型で b はSByte型 のようにすると問題なく通ります。 なぜこのような違いが出てしまうのでしょうか。
>>308 MSDNライブラリの「演算子の結果のデータ型」を参照。
C#はC#で微妙にルールが違うから要注意
310 :
308 :2008/11/02(日) 15:18:37
両方Byte型の場合 a*bをByte型で計算する→計算結果をInteger型に変換してcに入れる a*b=15*32=480だから、乗算した段階で溢れてエラー SByteとByteの場合 a*bをShort型で計算する→計算結果をInteger型に変換してcに入れる Short型だから溢れない。 ということですか。 ありがとうございました。
311 :
デフォルトの名無しさん :2008/11/02(日) 16:39:07
ちょっと変な質問なんですが…。 .NET2005のコンパイルって以前のバージョンの様にデバッグコンパイルと リリースコンパイルをコンボボックスで選択する形式ではなく、デバッグ実行かビルドかで Debug/Releaseを分けてるんでしょうか?
>>311 Standard版以上ならその部分は切り替えができる。
Expressでもできる
>>312-313 レスありがとうございます
>>313 Express版なんですが、どこで切り替えができるのか教えて頂けないでしょうか?
このままでも困るわけではないのですが、どうも違和感が…
環境設定VBのままだと出ないかな
ツールバーのユーザー設定にあると思う
配列を使う代わりに、ListやDictionaryを最近使うようにしています。 取り扱いが楽ですので・・・ でつまらない疑問なんですが、Foreachでループをするときに、 ループ内でそのオブジェクトが何番目かを知りたいのですが、 添え字をつかって従来通りForでCount -1 まで回すか 別途カウンタの変数を用意して、インクリメントしていくしか方法はないのでしょうか?
>>317 純粋に方法論ということならIndexOfを使うとか、Listに登録するオブジェクト自身に
リスト内のIndexを持たせるとかもありそうだけど、普通に考えれば
ループ内でIndexを使うのにあえて頑なにFor Eachを使うメリットが分からない。
Listは配列みたいに添え字でアクセスすればいいけど Dictionaryの順番はほとんど無意味だから数えない方がいいよ
320 :
317 :2008/11/03(月) 18:53:43
ありがとうございます。 参考になりました
321 :
デフォルトの名無しさん :2008/11/04(火) 08:26:12
初心車 なんですが。 VB2008 Express Editionでなんとか動く物を作ってみました。 さて、その先、配布ってどうすればいいんですか? やり方もわからんDQNです。 そもそも、Express Editionで配布って可能なんですか?
できませんよ 製品版を買ってください
324 :
デフォルトの名無しさん :2008/11/04(火) 13:39:35
>323 だめです。 どこを読めば良いのかわかりません。orz
車じゃ読めないよなぁ・・・
失礼します。
VisualBasic 2008 ExpressEditionで下記URLのシリアルポート通信プログラムを作ってみたのですが、DataReceivedイベントが発生しません。
http://www.geocities.jp/hatanero/rs232c5.html ポート設定は合わせましたし、ハイパーターミナルにて受信することを確認しているのでケーブル等の問題ではありません。
何か他に必要なことがありましたら、教えてください。
よろしくお願いします。
ここに、エスパーはいらっしゃいますか?
すいません、なんとか自己解決できました。
おいまてw
お願いします Private Sub Button1_Clickなんとかかんとか Dim Yakuyear() As Integer = New Integer() {} Dim Yakuage() As Integer = New Integer() {25, 42, 61} Dim Birthyear As Integer Dim Yakukind() As String = New String() {"前厄", "本厄", "後厄"} If Integer.TryParse(TextBox1.Text, Birthyear) Then For i As Integer = 0 To 2 Yakuyear(i) = Birthyear + Yakuage(i) - 1 For j As Integer = 0 To 2 ListBox1.Items.Add(Yakukind(i) & "…" & (Yakuyear(i) - 1) & "年") Next Next Else ListBox1.Items.Add("error") End If End Sub デバッグしてみたらYakuyear(i) = Birthyear + Yakuage(i) - 1のところに インデックスがリストサイズより小さくなるようにしてくださいみたいな表示が出ました 配列の要素数を予め決めてないので、配列のサイズより大きくはなっていないと思います どう直したらいいんでしょうか
>>331 あんた才能なさ過ぎるわ。
みたいな表示が〜、じゃなくてエラーメッセージのマンマだろ。
初心者だからって自分に言い訳してるかも知れんし、確かに初心者なら
その手のミスはありがちかもしれんが、普通の神経ならそんな恥ずかしいコードを
ろくに自分で悩んでデバッグもしないうちにこんなところに晒さない。
止めた方がいいと思うよマジで。
>>331 みたいなやつってさあ・・・
いや、
>>332 が俺の言いたいこと全部言ってたからやっぱなんでもないわ
>>332 ここって恥ずかしくて人に見せられないようなコードも気軽に晒せちゃう場所だと思うぜ
それを目にするのが嫌な人はいるだろうけど
そして
>>331 はいくらなんでもそんくらい自分で考えようぜ
VBから始めたら良くある罠だろ・・・
>>331 > 配列の要素数を予め決めてないので、配列のサイズより大きくはなっていないと思います
これがまんま答え
基本中の基本だから、「VB 配列」あたりでぐぐって 一通りVBの配列に関する基礎情報を読んだ方が良いな。
>>331 宿題か?
優しい俺様が教えてやろう
1行目のDim → Dim Yakuyear(2) As Integer
>>339 嫌がらせキタ━━━━━━(゚∀゚)━━━━━━ !!
>>331 です
お騒がせしてしまっているみたいで申し訳ないです
>>337 さんを読んで
配列の要素数は予め決めていないといけないか
配列の要素数が少なすぎるかだろうというところまで辿り着きました
>>338 さんの言うとおりぐぐってきます
申し訳ないです
要素がない配列の要素にはアクセスできない・・・
配列の要素数を宣言する必要がない言語しか知らなかった人なんだろう、きっと。
344 :
デフォルトの名無しさん :2008/11/05(水) 00:02:29
リッチテキストボックスで、 DetectUrls = true の状態で作成されたリンクを開く方法教えてください
開くっつっても色々あるが
346 :
デフォルトの名無しさん :2008/11/05(水) 14:51:49
348 :
デフォルトの名無しさん :2008/11/05(水) 19:37:37
>>346 前の状態、なんて保持してないだろ。
というわけで、親オブジェクトにあわせるとか、なんらかの設定が必要だと思われ。
簡単な質問だと回答多いなw
350 :
デフォルトの名無しさん :2008/11/06(木) 01:20:46
>>344 LinkClicked イベントのイベント ハンドラを作成し、コントロール内でクリックされたすべてのリンクを処理できます。
だってさ。
>>348 ありがとう。
対象のAccessControl.RemoveAccessRuleの2番目の引数に、FullControlを
指定したら消すことができました。
なんでこういう動きになったかよくわからないけど、
おそらく346で自分がやっていたことは、
EveryoneがフォルダXに対してRead権限とWrite権限を持っている状態で、
RemoveAccessRuleでWrite権限だけ削除して、「なぜまだ表示されてるの?」
と思っていたんだと思います。
当然まだRead権限が残っているから、表示されていた…のかな?
>アクセス許可が「なし」になるだけでした。
と346では言っていましたが、
おそらくセキュリティタブ→詳細設定→編集→アクセス許可エントリ
でないと見えないよう小さい権限が残っていたのかもしれません。
モードによってフォームの内容を大幅に変えるときは、 モードごとにUserControlを作って切り替える方法が一般的でしょうか?
>>353 俺はすごく小さい場合の案件除いて目的が大きく異なるなら分けて作ってる。
共通レイアウト用にベースのフォーム作って継承して使うとか、共通のインターフェイス使うとかで
とりあえずフォーム自体を分けて作ってる。
外からそこに呼び出しが必要なら外部に公開しているインターフェイス経由で呼び出すとかで共通化して対応
355 :
353 :2008/11/06(木) 14:31:16
>>354 切り替えの際は新しいフォームをShowして自分をCloseするのでいいんでしょうか?
これだとタスクバーが一瞬ちらつきますが、それはしょうがないですか?
>>355 いくらでも方法はあると思うんだけど
例えば
表示切り替えしたい親のフォームにパネルをDockをFillで張り付けるとかして
そこに2つのフォームを外枠を消して突っ込むとか
で、2つをLoadだけすませておいてVisible切り替えるとか
ちなみにさっきのは1例なだけで、どうするかはコントロールの数とか制御の具合によりけりだと
こんなことやってるとこのスレの連中に何めんどくさいことやってるんだ
とかいわれそうなんだがw
357 :
353 :2008/11/06(木) 15:02:06
>>356 すいません、
>そこに2つのフォームを外枠を消して突っ込むとか
panel1.Controls.Add(form)
とすると「トップレベルのコントロールをコントロールに追加できません。」
というArgumentExceptionになるのですが、こうではないのでしょうか?
切り替えたい部分だけをUserControlにしておけばそれと同じことが
できるのですが、UserControlが多くなるとVisualStudioが重くなるんですよね…
そうでなければUserControlでいいのですが。
トップレベルのままじゃだめ
359 :
デフォルトの名無しさん :2008/11/06(木) 19:06:36
実引数にクラス(インスタンス)を入れて、それを仮引数のストリング型に入れることは出来ますか?
それくらいまず試せよ
Stringクラスのインスタンスならもちろんできるしそうでないなら無理
362 :
デフォルトの名無しさん :2008/11/06(木) 21:42:40
Forループ使うとき (1) Dim i as Integer For i=0 to 10 (2) For i as Integer to 10 って書くの、どちらが良いのでしょうか? 私は(2)のほうが、iが使用後に参照されない一時的なものになるので ベターだと思うのですが。
For i As Integer = 0 to 10
便乗質問 同じ名前のループ用の変数を何度も使う場合、例えば↓ (1) Dim i as Integer For i=0 to 10 Next For i=0 to 15 Next For i=0 to 100 Next … (2) For i as Integer =0to 10 Next For i as Integer =0to 15 Next For i as Integer =0to 100 Next … の場合も(2)の方が良さげ?
(1)のほうがベター
>>364 の場合は混乱のもとになるので尚更
366 :
365 :2008/11/06(木) 21:52:51
間違えた (2)のほうがベター
368 :
364 :2008/11/06(木) 22:02:20
>365 サンクス。気をつけます
そーゆーものだったのかー 俺は変数はまとめて宣言するほうが良いって昔教わったから、 (1)のほうが良いと思ってた
VB6の時代はそうだったからね
どっちでも好きなのを使うといいよ
372 :
353 :2008/11/07(金) 10:07:54
>>356 >>358 こんな感じでできました。ありがとうございます。
form.TopLevel = False
form.Visible = True
form.FormBorderStyle = FormBorderStyle.None
panel1.Controls.Add(form)
UserControlよりフォームを使うほうが単体でテスト実行できるし、
VSも重くならないしでよさそうですね。
とりあえずこれでやってみます。
>>369 まとめて宣言するとついつい使い回してしまい、わかりにくくなりやすい
昔のBASICは最初にしか宣言できなかったから、その名残もあるだろうな
LINQ to SQLを使いたくてImports System.Data.Linqとしてるんだけど 無償版だと使えないのかな? ”インポート 'System.Data.Linq' で指定された名前空間または型が…” といった警告が表示されて先にすすめません…
377 :
375 :2008/11/07(金) 14:44:23
返信、ありがとうございます。 Imports System.Linq <Table(Name:="Customers")> _ Public Class ... このような記述をしたいのですが同じ警告で止まってしまいます。 目的は動的にmdbファイルを作成する事です。 情報の小出しになってしまい申し訳ありません。
・2005を使っていた ・System.Core.dll/System.Data.Linq.dllを参照できていない つか詳しくは無いがLinq to SQLでテーブルの作成とかできたっけ?
379 :
375 :2008/11/07(金) 14:56:42
380 :
375 :2008/11/07(金) 15:02:05
連投、申し訳ありません。 自己解決しました。 原因は"System.Data.Linq を参照せよ"の記述の見逃し。 ほんとおっちょこちょいで申し訳ないです…。 回答してくださった方、ありがとうございました。
あっはっは! おっちょこちょいだな〜
382 :
デフォルトの名無しさん :2008/11/07(金) 16:44:48
AppPositionて何のことですか? ネトゲのツール落としたらiniに記述あったんだけど
>>382 作った奴に聞け。
多分スタートアップフォームのウインドウ左上のスクリーン座標だと思うが
ツールの作者に聞け 画面位置とかじゃね?
みんなやさしいw
VBってC#と違ってなぜか(手抜きとしか思えないんだが)デリゲートに対して 代入加算演算子が使えないよね? おかげで、例えばカスタムイベントなんか書くときに 式が長くなって面倒だし見難いしでイライラするんだけど、何かいい工夫ない? ジェネリックメソッドで何とかしてみようと最初考えたんだが、 どういうわけか型パラメータの制約にデリゲートは指定できんないんだよねこれが。
代入加算演算子ってインクリメントのこと?
+= のこと 無理矢理ジェネリック拡張メソッドを書いてみた <Extension> Sub [AddHandler](Of T As Class)(ByRef x As T, y As T) Dim xx As [Delegate] = DirectCast(DirectCast(x, Object), [Delegate]) Dim yy As [Delegate] = DirectCast(DirectCast(y, Object), [Delegate]) x = DirectCast(DirectCast([Delegate].Combine(xx, yy), Object), T) End Sub ' 使い方 Dim fn As Action = AddressOf Do1 fn.AddHandler(AddressOf Do2) fn()
普通に加算演算子もつかえないんだっけ…?
まあ加算演算が使えるなら加算代入演算もできるわけだからな
そのためのCombineでないの?
CombineはDelegateしか返さんのでいちいちキャストめんどい、ってのが386の趣旨だろ?
>>388 これってVB9?
いずれにしてもやっぱり簡単で綺麗な方法はないんだよねやっぱり。。
>>391 例えばEventHandler(Of HogeChangedEventArgs)をCombineするコードを
書いてみれば言ってる意味がわかってもらえると思うよ。
ジュゲムジュゲムみたいなコードになるからw
これが物理的にどうしようもないことなら諦めもつくんだけど
C#だと同じコードがずっとシンプルに書けるから余計腹が立つんだよ。
C#使えばええやん?
それができないから聞いてるんじゃね?
>>364 で(2)のほうがベターな理由って何なんすか?
メクラかお前。
俺に言ってるのか?
お前は誰だ
なんじゃこりゃ
>>396 バグを生みにくいコーディングだから。
パフォーマンスに影響が出るかもしれないから。
あとなんかあるかな。
(2)みたいにその都度宣言する場合、 宣言と使い終わったら時の開放処理が増えるわけだから パフォーマンスは低下しそうなもんだが。 よっぽどじゃない限り影響なんてコンマ単位ですら出ないだろけど
>>396 >>364 のコードに限定すれば(2)でも実害はない。
でも普通のプログラマならたとえ実害がないことは認めても必要もないのに
(2)のように書きたいとは思わない。
理由は、変数のスコープは短いほど安全でミスを犯しにくく、ミスがあっても
発見しやすいから。
プログラマは変数が宣言されてからスコープを抜けて死ぬまで、
その変数に対してなされる操作に注意を払う必要がある。
注意を払う変数が1つならミスも起こりにくいかもしれないが、
スコープが長くなれば必然的に同時に意識する必要のある変数の数も増える。
人間は一般に多数のものに同時に注意を払うことは難しい。
こういうのはプログムを書いてるときのマインドのままだと理解できないかもしれない。
頭を他人のプログラムを読んでるときのマインドに切り替えて考える必要がある。
すまん
>>403 の(2)は(1)に読み替えて欲しいw
>>403 (1)と(2)間違えてるよね?
>>402 >宣言と使い終わったら時の開放処理が増えるわけだから
逆。コンパイラが最適化しやすくなるため、むしろパフォーマンスがあがる可能性のほうが高い。
CPUのレジスタだけで処理が可能と判断されれば開放処理なんてコード吐かれないし。
これが i のような変数じゃなくて、オブジェクトだったら話は変わってくるかもしれんがな。
406 :
396 :2008/11/08(土) 08:42:46
なるほど。 ただ俺はぱっと見で For i as Integer = 0 to 10って見ずらいんだよねw
そのうち For i as Integer = 0 to 10 ↓ For i = 0 to 10 でもおkになったりして
そのうち?
それはローカル変数と区別できないからありえない 型推論させるなら、For Dim i = 0 to 10かな C#ならfor (var i = 0; i < 10; i++)と書ける
BASICはPascalの文法を参考に構造化方面の拡張をやった。 VB.NETで急にC/C#風の文法を持ち込んだもんで構文的にしんどくなってる。
ラムダ式の書きづらさは相当
いいかげん意地張るのやめて{ }使えばいいのにw
413 :
デフォルトの名無しさん :2008/11/08(土) 12:10:02
>>364 >>396 私は
同じ意味の変数を何回も使うならまとめて最初に定義 (1)
いろんな意味のループを別々に使うならそのつど定義 (2)
してます。
配列に対する0 to Length-1のループは最適化されるはずだけど (1)だとどうなんだろう
>>412 行指向の構文に{ }を持ち込むとRubyみたくなって見るに忍びない
コピペ君って馬鹿だな、まで読んだ。
>>411 次期バージョンではラムダ式の複数行記述が可能らしい。
寧ろLINQの方が言語仕様上アレだと思う。
ラムダ式が書きづらいおかげで、クエリ演算子をなんでもかんでも言語に組み込んじゃってるもんな 何十年前だw
VB10の複数行ラムダ式はこういう風にデリゲート変数に代入するならいいけど、 Dim y = Function(x) : End Function 式の途中にインラインで書くときはしんどいね。継続行記号の有無加減が微妙そうだ。 a = 1000 + Nantoka("abc", _ Function(x) If x > 0 Then Return x Else Return -x End If End Function _ ) * 2 コロン使って1行に詰め込むのかな? a = 1000 + Nantoka("abc", Function(x) : If x > 0 Then : Return x : Else : Return -x : End If : End Function) * 2
C#なら x => { if (x > 0) return x; else return -x; } だもんなあ…
正直、
>>420 みたいなの書くくらいなら普通にメソッド書いたほうがマシだと思う
ShowDialogと同じような効果(アプリケーションの一番手前に常に表示)を Form.Showで実装したいのですが以下を試してみてもうまくいきません TopMost = True Form.Activate <DllImport("user32")> _ Public Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Integer End Function DeactivateでSetForegroundWindow(Me.Handle) 何か方法はあるのでしょうか?
>>422 Form2.Show(me)
じゃだめなのかね。
ちと説明不足だった。 Form1からForm2を起動するとき、 Form2.Show(me) ってな感じで
常にOwnerの手前に表示するだけなら
>>424 で
すべての手前に表示したいなら
>>424 +TopMost =Trueでいいと思う
でもあくまでモードレスなのでShowDialogとは違う
>>423 ,424
こんな方法があったのですね。
目から鱗です。
>>425 ShowDialogの様な動作を期待していたのですが無理なようですね…
TopMostをTrueにしても呼び出し側を操作出来たりするのがShowDialogと違うところで…
マウスをハックしたりして似たような動作が出来ないかなぁとか思いつつも
技量が無くて途方にくれております。
お二方、ありがとうございました。
ShowDialogで駄目な理由はなんなの?
>>426 >>424 +呼び出し元ウィンドウのEnabled変えれば
ShowDialogと同じになんじゃね?
やってないからわからんけど 所有側をenabledにしても非所有側は最小化はできてしまうと思う
>>427 呼び出し元の処理を継続したいからです
>>428 ビンゴ!!
目的達成しました
ありがとうございました
変な質問なんですが public class abc private a as object public sub aaa() a = new object a = new object a = new object sub end class end とした場合、 このクラスが使われなくなったら破棄されるのはわかります。 もしクラス使用中でだとNew3回分のメモリが確保されたままですか? それとも二回目のNewで一回目Newの分のメモリは開放されますか?
参照されなくなったらそのうち解放される
確実に3回分のメモリが確保されると思う。 ガベージ任せでBitmapの開放処理入れなかったらメモリを無尽蔵に使われたことがある。
Bitmapはアンマネージリソース持ってるから一緒にしてはいけない
Bitmapが占有する大部分のメモリはアンマネージド マネージドなメモリが圧迫されない間はGCがあんまり働かないのは当然
正直標準でいまどきメモリ1G積んでるのに そんなコードレベルでのメモリの開放なんて意識する必要あるの? 正直俺はあまり意識していない。 だってマシンの性能がVb6の頃と比べてかなりあがってるもの。
まあ「メモリ解放」は気にする必要ないね IDisposableのDisposeに気を配ってれば良し
つかDispose自体もWindow.Close()をしたらそのコード自体書かなくても問題無いでしょ? さすがに形上仕事の時にはコード書いてるけどさ。 あと、PCの性能が相当あがっているから 言語自体に色々な機能が追加(バージョンアップ)されたとしても (例えばC#3.0→C#3.5とか) 別に使わなくても要件を満たす事が出来るのなら別に使わなくても良いと思うんだけど。 お前らはどう思う? だってVB6が出てもう10年たっているのに過去の資産を見ればVB6の方が多いしね。
単に使いこなせない言い訳じゃなくて、 使おうと思えば自由自在に使えるけどめんどくさいからor好きじゃないからorほとんど影響出ない事知ってるから使わない、なら そうですか と。
虫ケラって久しぶりに聞いた
VB2005で開発をしているのですが、 メソッドの上で ''' と入力しても処理概要、引数、戻り値 についてのコメントを入力するエリアが表示されなくなってしまいました。 どうすれば直りますか? ※この事象が発生する前後にツール → オプション で色々と弄った事が原因と思われます。
プロジェクトのプロパティ>コンパイル>XMLドキュメントファイルを生成する
フォルダ指定ダイアログからファイルを選択させるようにする為に下記URL情報を参照してVB.NETにコンバートしました。
ttp://support.microsoft.com/kb/306285/ja ここまではよかったんですが、既定のフォルダを指定させようと思いコールバック関数を使用して実装してみたのですが
うまくいきません。
ループバック関数はちゃんと呼ばれていますが、下記ロジックでおかしなところがありますでしょうか?
諸先輩方ご教授お願いします。
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, ByRef lParam As String) As Integer
Public Function BFFCallback(ByVal hwnd As IntPtr, ByVal uMsg As UInt32, ByVal lParam As IntPtr, ByVal lpData As String) As Integer
'フォルダを指定のメッセージをダイアログへ送信
If uMsg = BFFM_INITIALIZED Then
Call SendMessage(hwnd, (&H400S + 102), True, lpData)
End If
End Function
今時VB.NET2002使ってるわけも無いだろうからFolderBrowserDialog使いなよ
>>447 さん
FolderBrowserDialogだとファイル選択できないんですよね・・・
FolderBrowserDialogでファイル選択をできるようにできればそれが一番いいんですが。。
配列の中身の合計を返すクラス、よかったら教えてくだはい! Dim int As Integer() = {92, 32, 12, 32} arySum = Array.Sum(int) 見たいな感じのを希望してます!
>>448 OpenFileDialog使えばいいじゃない
>>450 OpenFileDialogだとフォルダ選択できないですよね・・・
OpenFileDialogでフォルダ選択をできるようにできればそれでもOKなんですが。
>>451 ありがとうございます。確認してみますー
>>452 フォルダまたはファイルのどちらも選択可能にしたいってこと?
不思議な需要だね。
音楽再生ソフトで、 ファイルをD&Dするとそのファイルが再生リストに追加されて、 フォルダをD&Dするとそのファイル内にある再生可能なファイルが一括で再生リストに追加される、ってのがあったな。
すいません、シリアルポートで取得したデータをイベントハンドラ(SerialPort1_DataReceived)で表示させようとしたら、以下のエラーが出ました。 『有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'Label1' がアクセスされました。』 Form1.Label1やMe.Label1としても同じエラーが出ました。 ヘルプ等を見たのですが、Classとスレッドの違いがわかりません。 スレッドとは一体何なのでしょうか? よろしくお願いします。
スレッドとクラスの違いなんて言ってるんじゃ話になりません。 それじゃあクラスとインスタンスの違いはわかりますか? とりあえずスレッドからコントロール触るときはControl.Invoke使ってください
Private Test As String() Private TestDic As Dictionary(Of String,Integer) という変数があり、 TestDic(【文字列】)=【数値】なら、プロパティの引数が【文字列】でも【数値】でも 同じ返り値Test(【数値】)を得たいのですが Public ReadOnly Property Prop1(ByVal number As Integer) As String '※1 Get If (何か条件式) = True Then Return Test(num) Else Return "" End If End Get End Property Public ReadOnly Property Prop1(ByVal name As String) As String '※2 Get Return Prop1(TestDic(name)) End Get End Property としても問題ないでしょうか。構文エラーは出ないようですが。 それとも、※2のGet内も※1と同様に If (何か条件式) = True Then Return Test(TestDic(name)) Else Return "" End If のようにするべきなのでしょうか。
引数付きプロパティは使わない方がいいよ その二つでどちらがいいかといえば上の方がいいけど
>>458 問題はないだろうが、ただ
> If (何か条件式) = True Then
これは恥ずかしいからやめとけ。
条件式はBooleanを戻すのに、なんでまた
Booleanと比較する条件式にしたがるんだ。
自分だけが分かり易ければいいから。
え、引数つきプロパティってヤバいの?
ガイドライン「デフォルトプロパティ以外の引数付きプロパティは使うな」
クラス内で、自分自身が宣言された変数名を取得する方法ってない?
意味不明すぎる
>>462 C#ではデフォルトプロパティ以外の引数付きプロパティが使えないため
>>464 ローカル変数は無理、フィールドならリフレクションを使って探しまわれば可能
467 :
デフォルトの名無しさん :2008/11/12(水) 20:51:57
教えてください。 Buttonを継承したカスタムコントロールButtonBase(ButtonBase.dll)を作り そのButtonBaseを継承してMyButton(MyButton.dll)というカスタムコントロールを作っています。 このMyButtonをフォームに貼り付けてコンパイルしますとButtonBaseのdllへの参照がない、とエラーになってしまいます。 参照を追加すればいいのですが、MyButtonを追加した時点でButtonBaseへの参照も自動的に追加されるように出来ないでしょうか? 環境はVB2008Exp、.NetFrameWork3.5、OSはXPです。 よろしくお願いします。
468 :
デフォルトの名無しさん :2008/11/12(水) 22:00:40
>>462 引数付きプロパティが単純にダメと思われてしまいそうだな。
出来ればそういうのはちゃんとコレクション作ってクラス設計して欲しいということらしい。
VBにもC#にも(まあC++とかJavaもそうなのかも知れんが)どうして (ベースクラスにおいて)継承後の型のインスタンスを表すキーワード(Meやthis) はあっても継承後の型を表すキーワードってないんだろうか。 おかげで継承後の型のインスタンスを返すメソッドをベースクラスに書こうと思っても 書けやしない。(まあ特定の前提があればジェネリックを使ってできないこともないが。)
>>469 個人手にはそんなものを禁止するガイドラインの方に問題があると思ってるけどな。
463を見て、慌ててプロパティをSubとFunctionに分ける作業を始めた俺が来ますた。 …ちゃんとした設計とか今の俺にはできそうにないから 引数つきプロパティはデフォルト以外しばらく自重します。
別に今後仕様が変わるわけじゃないぞ。
ちゃんと設計しろっていうのは、引数付きプロパティを上手く使うという意味じゃなくて デフォルトの引数付きプロパティのみでうまいことやるって意味だよ
>>474 わざわざ引数付プロパティと等価なことを、せっかく引数付プロパティが
サポートされているのに使わないで、わざわざそれだけのためにインデクサを持った型を別途作って
そのインスタンスを返すようにする、なんてことが上手い実装とは
俺には死んでも思えないんだが。
VB.net専用なら引数付きプロパティを使っても良い、C#から使われる可能性があるクラスなら ヤ メ ロ ★ …と俺は読んだんだが、間違ってるよな?
>>476 「クラスライブラリ開発者向けのガイドライン」は、
外に出したときに馬鹿にされたくなければ従った方がいいよ
というような性格のもの
>>477 言語は関係ないでしょ。
もっとも、インデクサ以外の引数付きプロパティなんてめってたに必要ないのも
確かなんだけどね。
ただ、あった方が便利な場合もないことはない。
引数付きプロパティを設計したやつは池沼
インデックス付きイベントはたまにちょっと欲しくなる プロパティはいらない
普通に引数付きプロパティ使ってます。
例えば、こんなプロパティを作るんじゃなくて Private _Items As String() Public Property Items(ByVal index As Integer) As String Get Return _Items(index) End Get Set(ByVal value As String) _Items(index) = value End Set End Property --------------------------------------------------- こういうコレクションを作っておいて、 Public Class ItemCollection Inherits List(Of String) End Class こういうプロパティにしたほうが使いやすいってことなんだぜ Private _Items As ItemCollection Public ReadOnly Property Items() As ItemCollection Get Return _Items End Get End Property
>>483 ガイドライン的にはコレクションを返すプロパティも非推奨。
コレクションを返す場合は普通の関数を使う。
ガイドライン的には Public Function GetItems() As ItemCollection にするべきだな
>>484 え、マジで?
そんだったら標準のライブラリ全滅じゃん。
>>487 標準のライブラリにありました?具体例挙げてみてちょうだい。
そりゃコレクションつったらControl.Controlsからしてそうだろ コレクションじゃなくて配列ならガイドラインにあるけどな > 内部配列を保持するには、プロパティによって使用されている配列への参照ではなく、 > 配列の詳細コピーを返す必要があるため、操作によって配列が返される場合はメソッドを使用します。
ダブルバイト文字についての質問です。 アメリカでVS2005を使って開発されたアプリを使っていますが、 当然のことながら、日本語は気持ちよく文字化けします。 日本語を表示させたい部分は一カ所だけで、TreeViewのとある 一部分だけです。 そこで、アメリカ人(当然ダブルバイト等一切考慮したこと無い) にお願いして、日本語を表示できるようにしたいのです。 ググったら、ダブルバイト用のDLL等はフリーで転がっているようですが、 それだけ渡しても面倒くさがってやってくれない気がします。 一カ所だけなので、例えば treenode.text = nkf(UTF-8,"日本語") みたいな感じで出来ないものでしょうか? 因みにソースコードは貰えません。 よろしくお願いします。
VS2005? 言語はなんだよ禿
これは酷い
".net" で作ったアプリをギャクアセンブルさせせなくする(コードを見られないよう様にする) 事って出来ますか?
できねーよ 難読化しろ禿
知らねーよ 自分で調べろ禿
ソースコードはもらえませんって、お前さん自身がその程度の理解じゃもらえても宝の持ち腐れだろJK その化ける文字の入力元次第だな
つか、それフォントの問題なんじゃね?
>>498 アプリケーションはサーバ(Linuxの箱)からデータを持ってきます。
アプリケーションとサーバ間の通信は、APIで行われていますが、
この仕様はわかりません。
>>499 ということは、Treeviewのフォントを、日本語のフォント(MS UI Gothicとか)に
変えて貰うといけそうですね。お願いしてみます。
ありがとうございます。
501 :
デフォルトの名無しさん :2008/11/13(木) 17:55:26
VisualStudio2008を使用しています。 ボタンを押したら指定したmp3ファイルを再生し、ラベルに文字を表示するというプログラムを作成しています。 自分のPC上では以下のようにすれば実行できるのですが、他の人のPC上ですと、フォルダを置く場所が違うと実行できません。 ちなみにプロジェクト名はaaaaa、音声ファイルはbbbbb.mp3、テキストファイルはccccc.txtです。 音声ファイルbbbbb.mp3とテキストファイルccccc.txtはプロジェクトaaaaaに置いています。 Dim FileName As String = "C:\Documents and Settings\A\My Documents\Visual Studio 2008\Projects\aaaaa\bbbbb.mp3" Call mciSendString(String.Format("open ""{0}"" alias MySound", FileName), "", 0, 0) Call mciSendString("play MySound", "", 0, 0) Label1.Text = IO.File.ReadAllText("C:\Documents and Settings\A\My Documents\Visual Studio 2008\Projects\ccccc.txt", System.Text.Encoding.GetEncoding("Shift-JIS")) これを他の人のPC上でも実行できるようにするにはどのようにしたらよいのでしょうか? 調べたところ、パスを使うとかなんとか・・・ よくわからないので、お解りになる方がおられましたらご指南よろしくお願い致します。
いや、解決ちゃうで よほど変なフォントを指定してなきゃ、だいたいフォントリンクしてて日本語は出るはず。 byte配列をデコードするときのEncoding選択のバグじゃね? 知らんけど
>>501 はぁ? デスクトップフォルダのパス決め打ちなの? 馬鹿?
Environment.GetFolderPath使ってくだちゃいね。
通信してるらしいからな。 ASCIIオンリーだったりしてな。
>>501 です
Label1.Text = IO.File.ReadAllText("C:\Documents and Settings\A\My Documents\Visual Studio 2008\Projects\ccccc.txt", System.Text.Encoding.GetEncoding("Shift-JIS"))
じゃなくて
Label1.Text = IO.File.ReadAllText("C:\Documents and Settings\A\My Documents\Visual Studio 2008\Projects\aaaaa\ccccc.txt", System.Text.Encoding.GetEncoding("Shift-JIS"))
でした。
>>503 回答ありがとうございます。馬鹿で大変申し訳ございません。
Environment.GetFolderPath使ってみまちゅ。
>>483 残念ながらそれは馬鹿の一つ覚えと言うものだよ。
たしかにほとんどの場合そうなんだが、いつでもそうとは限らない。
引数で指定して取得したい値がそもそも「コレクション」という考え方に馴染む場合とかね。
具体例挙げろって言われても簡単なのは挙げられないけど、
例えば何らかのデバイスを抽象化したクラスがあって、そのデバイスのレジスタ的なものが
引数付きでアクセスする構造になってる場合とかね。
VISTAのファイルコピー失敗した時とかに プログレスバーが赤くなるんですけど、 .NETのProgressbarでバーを赤くするには どうしたらいいですか?
508 :
デフォルトの名無しさん :2008/11/13(木) 21:01:49
女の子が僕の部屋のドアをノックするというイベントを拾いたいのですがどの様にすれば良いでしょう? とらドラに出てくる あみちゃん みたいな女の子が良いです。
骨は拾ってやるぞ
>>506 スレの流れ的を読まずに、いきなり反例でも書けとでもいうのか?
FormのResizeイベントのところに、ウインドウの比率を固定する処理を入れようと思ったのですが どのような計算式で実現出来ますか? フォームの角を引っ張ってリサイズした時に最初にフォームが表示された時の比率のまま拡大縮小出来るようにしたいのですが。
private bool flag = false; private Size prevSize; private override void OnShown(EvnetArgs e) { prevSize = Size; } private override void OnResize(EventArgs e) { if (!flag) { flag = true; if (prevSize.Width != Width) { Height = Width * (int)((double)prevSize.Height / prevSize.Width) } else { Width = Height * (int)((double)prevSize.Width / prevSize.Height); } prevSize = Size; flag = false; } } こんな感じか ちゃんと動くかどうかは知らん
514 :
513 :2008/11/14(金) 00:13:35
キャストの場所がおかしいな Height = (int)((double)Width * prevSize.Height / prevSize.Width) こうか。Width=の方も同様。 でもこれだと比率がちょっとづつ変わっちゃいそうだから、比率を持つフィールドを別に用意して OnShownで先に計算してそのままのほうがいいな
ヒント:ここはVB.NETスレ
せっかく考えてもらったのに申し訳ないですが、上記のコードはC系ですよね…。
>>516 そもそもやろうとしていることに(不可能ではないにしろ)無理がある。
ウィンドウ枠やクライアント領域のアスペクトを固定することを考えるより、
ちょうどメディアプレーヤーのようにウィンドウ枠の中に固定された
アスペクトの表示領域があるUIの方が実装も簡単だしユーザーにもわかりやすくないか?
そもそもとしてResize中にサイズ弄ったりするってどうよ。
現在VS2005(VB.net)にて以下の事がやりたいのですがどうすれば 良いのでしょうか? ・コンパイル時にEXEの中に外部dllを組み込み、生成物をEXE ファイル一つにする。 ※例えば、画像ファイルなどの場合にはリソースの中に組み込めば 実現出来たのですがdllでは不可能なのでしょうか
たぶん出来る。 Assembly.Load(Byte[]) あたりが使えると思う。
>>520 ごめん。Assembly.Loadで外部DLLを読み込むんじゃなくて、
ソリューションエクスプローラー → 参照設定 の中で外部DLLを参照した状態で
ビルドをすると
1.EXE
2.(参照)DLL
がbin/Releaseに生成されるけど、この時に生成される2ファイルを一まとめにして
MIX.exe1ファイルにしたいのです。
何か良い方法はありますか?
522 :
デフォルトの名無しさん :2008/11/14(金) 01:57:50
>>521 つまりスタティックリンク(すべて合体してひとつのファイルにする)したいの?
だったら俺はわからん
>>522 まさにその通りです。
やっぱり出来ないのかなぁー
ようはやりたい事は、他人の作ったライブラリも含めて1つのEXEにまとめたいんです。
例えばEXE1ファイルに纏められたらデスクトップ上にコピーしてそのまま使えるけど、
EXE+(外部参照の)DLLだとデスクトップ上にDLLも
用意しておかないと動作させる事が出来ないし。
※GACにDLLを登録するとか、ショートカットを使って起動させるといった事がしたい
訳じゃないです。
>>521 だからあえて引数Byte[]のやつが使えるんじゃないのと言っているのだよ。
EXEにDLL取り込むだけだったらリソースにしちゃえばいいでしょ。
あとはアセンブリとしてメモリからロード出来るんじゃない?
>>524 >Assembly.Load(Byte[])
なるほど
Assembly.Load(外部DLLのパス)
ではなくあくまでAssembly.Load(Byte[])とする訳ですね。
何か参考になるサイトとかご存知でしたら教えて頂けると助かります。
すまないが俺も知らんで書いたので検討違いかもしれん。 ただ、Byte配列渡してAssemblyが取得出来るんだから、使えそうかなと思った次第。 最悪、リソースにしたDLLをテンポラリに出力して、Assembly.LoadFileしちまうって手はありそうだがw
vb.netからWEBブラウザに入力をするプログラムを作っているのですが <input type="file" name="upfile" size="30"> □□□□□□□□ 参照 という項目については、どうやっても値を設定する事が出来ません。 setAttribute("value", "あいうえお") 一体なぜでしょうか?
type="file"だから
>528 何かやる手立てはありませんでしょうか?
WebBrowser使う限りはありません
ILMEARGE
532 :
デフォルトの名無しさん :2008/11/14(金) 12:53:21
windwsのタスクバーを改造したいのですが タスクバーのクラスってVBでいじれますか? オーバーライドすれば簡単そうなんですが
何をオーバーライドするつもりなんだ
>>533 まずタスクバーはExplorerという、君が手を出せる
範囲外のアプリケーションで表示されていることを知っておこう。
>>535 なぬ。VBじゃ許可されてないんですか?
タスクバーのアプリタブを入れ替えたり
IE以外のアプリをグループ化したりしたいんです。
おい。ほんとにVBやったことあるのか。
VBScriptでしたテヘッ
ハハハ こやつめ!
>>537 なんか知らん人がコントしとるw
VB初心者なので簡単な方法から試したいんですよ。
オーバーライドを少し知ってるだけなので
そこからやってみようかと。
別の方法があれば勉強してトライします
タスクバーの拡張はCOMをいじらないとダメだった気がする。 機能を呼び出すんじゃなくて使う側がCOMサーバーになる必要があったような。 VBからは不可能ではないがいろいろ難しいよ。資料も少ないし。
ViewプロパティがDetailsのListViewで行を選択した後、 フォーム内のボタンを押すと選択されている行を示す 反転表示が消えてしまうのですが、常に選択されている 行がわかるようにするにはどうすればいいでしょうか?
なんでMSDN読まないの? ListView.HideSelection
>>541 うーん、良くあるデスクトップカスタマイズツールとかも別物かな
あれはOSに躍らされてるだけかしら
COMについて調べてみます
タスクバーをマジでいじりたいなら I
↑ごめんキャンセルするつもりで書き込んでしまった なんでもないんだ気にしないでくれ
タスクバー「いじって・・・
Explorerというクラスを作っていじったつもりになる
554 :
デフォルトの名無しさん :2008/11/15(土) 10:30:13
>>553 おまいさんも微妙にわかってないようだが・・・
なんかそれっぽいキーワードを並べてるだけじゃん。
さすがシェル拡張をやったことあるお方の言うことは違う。
556 :
527 :2008/11/15(土) 12:08:31
>>532 返信遅くなってしまいすいません。
ちょっとこれからそのサイトを参考に試してみます。
557 :
527 :2008/11/15(土) 22:36:39
どぼんのページを参考にアップロードしたいファイルを作成するコードを作成したのですが次のエラーが出てしまいます。
(
http://dobon.net/vb/dotnet/internet/webrequestpost.html#multipart )
私が思うにHTMLページのhidde項目の値も同時に送信しなければならないのかな?とは思うのですが
そのやり方が分かりません。
途中までIEに入力して来た値とファイルを同時にアップロードするにはどうすれば良いでしょうか?
【WEBページ】のイメージ
□□□□□□□□□□ 参照
[アップロード]ボタン
【エラー内容】
リモートサーバがエラーを返しました(417) Expectation Failed
【エラーの発生する部分のコード】
'サーバーからの応答を受信するためのWebResponseを取得
Dim res As System.Net.HttpWebResponse = CType(req.GetResponse(), System.Net.HttpWebResponse)
558 :
527 :2008/11/15(土) 22:47:05
最悪「参照...」ボタンをVB.netにてクリックし ファイルの選択画面が起動させ、 VB.netからファイルの選択画面が起動したかどうかを判定し、 ファイルの選択ウィンドウが起動したら 1.ファイル名(N) にアップロードしたファイルへのパスを入力し 2.開く(O) ボタンをクリックする事により起動元であるIE上の 項目にファイルパスを入力させようかと思っているのですが、 VB.net(プログラムから)別ウィンドウの起動の有無を判定し、特定項目に 値を自動で入力するなんて事は可能でしょうか? □□□□□□□□□□ 参照 ↓ c:\test\test.mpg 参照
適当なパケットモニタで通信内容調べれば
560 :
527 :2008/11/15(土) 23:17:05
>>559 パケットモニタつかってデータの送受信を調べるのはちょっと難しそうなので
何とか「ファイルを開く」ウィンドウをVB.netからファイル名を入力させたいと思います。
この場合にはAPIとかを使わなければFrameWorkだけでは出来ないのでしょうか?
>>557 hidden項目というか、Formタグ内にあるやつ全部だろう。
その手のことをやろうとしたら、ある程度Webの仕組み、サーバー側のプログラムの勉強をする必要があるよ。
人に聞いて出来ましたレベルのコーディングでは手を出しちゃいけない。
サーバーに変なデータ送られたら大迷惑。
その辺は了承済みというなら何も言わないが・・・
>>560 で、上のは置いておいて入力をエミュレートしたいんだろうけど、
最初からファイル名の入力フォームにSendKeys.Sendでファイル名送っとけば出来ないか?
×hidden項目というか、Formタグ内にあるやつ全部だろう。 ○hidden項目というか、Formタグ内にあるINPUTタグのやつ全部だろう。
563 :
560 :2008/11/16(日) 00:19:17
>>561 レスありがとうございます。
> hidden項目というか、Formタグ内にあるやつ全部だろう。
> その手のことをやろうとしたら、ある程度Webの仕組み、サーバー側のプログラムの勉強をする必要があるよ。
> 人に聞いて出来ましたレベルのコーディングでは手を出しちゃいけない。
> サーバーに変なデータ送られたら大迷惑。
ちょっとこの方法は断念します。。。
> で、上のは置いておいて入力をエミュレートしたいんだろうけど、
> 最初からファイル名の入力フォームにSendKeys.Sendでファイル名送っとけば出来ないか?
おっしゃる通りです。
WEBページ上の「参照...」ボタンをクリックすると「ファイルの選択」ウィンドウが起動するので
WindowsAPIを使用してなんとか入力(ボタンのクリック)を行えないかとGoogleで色々調べまして、
プログラムから「ファイルの選択」のウィンドウハンドルを取得する事は出来たのですが、
次の項目にファイル名の入力+ボタンのクリックをする方法が分かりません。
1.ファイル名の入力
2.開く(O)
という事でここから変更させて下さい。
【Question】
SendMessageあたりを使用して特定のウィンドウに文字列を入力し、そのウィンドウ内の特定のボタンをクリックする。
にはどうすれば良いでしょうか?
※ウィンドウハンドルの取得方法は分かります。
以上 宜しくお願いします。
564 :
デフォルトの名無しさん :2008/11/16(日) 09:52:44
>>563 > SendMessageあたりを使用して特定のウィンドウに文字列を入力し、
WM_SETTEXT
> そのウィンドウ内の特定のボタンをクリックする。
BM_CLICK
ウィンドウハンドルの取得方法がわかってる、ってのは大いに疑問。
そもそも、ウィンドウの種類に対する言及もないし。
565 :
563 :2008/11/16(日) 10:12:21
>>564 > ウィンドウハンドルの取得方法がわかってる、ってのは大いに疑問。
> そもそも、ウィンドウの種類に対する言及もないし。
ウィンドウの種類は、独自に作成した画面ではなく「ファイルの選択」ウィンドウです。
ウィンドウハンドルの取得は、 FindWindow を使用し取得する事が出来ました。
親ウィンドウのハンドルは取得出来るのですが、そのウィンドウ内にある特定のテキストボックスに
値をプログラムから入力する場合、ウィンドウ内にあるテキストボックス内のウィンドウハンドル
を取得するにはどうすれば良いのでしょうか?
566 :
デフォルトの名無しさん :2008/11/16(日) 10:16:55
やっぱりわかってないじゃん・・・ とりあえず、Spy++ でよーくウィンドウを確認して、子ウィンドウ取得系の API で。
567 :
デフォルトの名無しさん :2008/11/16(日) 10:19:45
そもそも、今作ってるプログラムと IE はどういう関係なの? BHO? ActiveX コントロール? それとも、単に外部から操作?
568 :
563 :2008/11/16(日) 10:29:21
> Spy++ でよーくウィンドウを確認して、子ウィンドウ取得系の API で。
ぐぐってみます。
>>567 いつもの決まり切った操作を自動化したくて今のプログラムを作っています。
IEは忘れて下さいませ。
569 :
563 :2008/11/16(日) 11:07:32
難しいですね。。。 親ウィンドウのウィンドウハンドルを取得して、そのウィンドウ内にあるボタンのウィンドウハンドルを取得しようと 次のコードを実行したところエラーが出てしまいます。 なぜこんなエラーが出てしまうのでしょうか? API+VB.netに詳しい方ご教授願います。 【コード】 Declare Unicode Function FindWindowEx Lib "user32.dll" (ByVal hWnd As IntPtr, ByVal hwndChildAfter As IntPtr, ByVal lpszClass As [String], ByVal lpszWindow As [String]) As IntPtr Dim BUTTON_NAME As String = "開く(&O)" Dim hChild As Integer hChild = FindWindowEx(lngHWnd, 0, vbNullString, BUTTON_NAME) '←ここでエラーが発生 【エラー内容】 DLL 'user32.dll' の 'FindWindowEx' というエントリ ポイントが見つかりません。
570 :
デフォルトの名無しさん :2008/11/16(日) 12:02:35
>>569 そんな API はありません、って言われてんじゃん。
W か A か、きちんと指定しろよ。
571 :
563 :2008/11/16(日) 12:21:29
>>570 コードを次の様に訂正し、エラーは出なくなったのですが、
「ファイルの選択」ウィンドウ内の「保存(s)」ボタンのウィンドウハンドルを取得しようと次のコードを記述したのですが
ボタンのウィンドウハンドルが取得できません。(0が返って来ます。)
【コード】
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Integer, ByVal hwndChildAfter As Integer, ByVal lpszClass As String, ByVal lpszWindow As String) As Integer
’親ウィンドウハンドル
Dim iWindowHandle As Integer
’親ウィンドウに属するボタンのウィンドウハンドル
Dim iButtonHandle As Integer
’親ウィンドウに属するボタンの名前
Dim strButtonName As String = "保存(&S)"
iWindowHandle = 1234 '←ここまでのウィンドウハンドルの取得は正常です。)
iButtonHandle = FindWindowEx(lngHWnd, 0, vbNullString, strButtonName) '←ここで0が取得されてしまいます。
えーとそのコードがまともかどうかは知らないけど、 ブラウザ内のコントロールって普通にハンドル持ったWin32のコントロールなんだっけそもそも?
ファイルの選択ダイアログを操作しようとしてるらしいよ
>>573 違うと思うよ。
っていうか、ブラウザ上の画面からそのダイアログをどうやって出すんだよだからw
575 :
デフォルトの名無しさん :2008/11/16(日) 14:01:16
>>571 C で簡単なサンプル作ってみたけど、問題なく取れてる。
宣言に怪しげなところはないんで、ちゃんと親ウィンドウのウィンドウハンドルが取れてるか、
GetLastError() に何か返ってないか、とか調べてみたら?
>>574 それはとっくに突破してます。
あくまで、ファイルの選択ウィンドウを操作したいのです。
・ボタンのクリック
・テキストボックスへのファイルパスの入力
(ウィンドウハンドルはSpy++で調べた物をそのまま利用)
までは出来てますが、ウィンドウ内にある特定のコントロール(テキストボックス)を調べる方法が
分かりません。。。
あーあ、まいった。
>>575 失礼しました。ボタンのハンドルの取得は出来ました。
が、、、テキストボックス(ファイル名)項目のハンドルの取得方法が分かりません。
【コード】
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hwndParent As Integer, ByVal hwndChildAfter As Integer, ByVal lpszClass As String, ByVal lpszWindow As String) As Integer
’親ウィンドウハンドル
Dim iWindowHandle As Integer
'ファイル名(N)のテキストボックスのウィンドウハンドル
Dim iFileNameHandle As Integer
iFileNameHandle = FindWindowEx(iWindowHandle, 0, "Edit", vbNullString) '←ここの結果が 0 になる。
ハンドルを、Intergerに、するなっての、ハゲっが。
>>578 VB.net は Integer ですよ。
VB6.0まで Long はね。
分かったか?ハゲ?
ハゲハゲって何なの?死ぬの?
IntPtrにしろってことじゃね?
>iWindowHandle って変数名も汚物だな
↑ ヒント ハンガリアン
585 :
577 :2008/11/16(日) 15:42:49
どうでもいいけど 教えて下さいな。 iFileNameHandle = FindWindowEx(iWindowHandle, 0, "Edit", vbNullString) '←ここの結果が 0 になる。 Spy++で検索したらファイル名の入力欄のテキストボックスは ComboBox ではなく Edit でした。 だから↑の様にコードを書いているのにコントロールのウィンドウハンドルが取得出来ないのはなでしょうか? マジで助けてぇ〜〜
587 :
507 :2008/11/16(日) 16:36:58
自己解決しますた。 華麗にスルーされてたけど・・・orz
588 :
デフォルトの名無しさん :2008/11/16(日) 16:40:10
なにそれ? 少しはフィードバックぐらいしろよハゲ
589 :
561 :2008/11/16(日) 20:08:48
俺が言いたかったのは、そもそもコモンダイアログにメッセージを送る必要あるのか? WebBrowserコントロールからエレメント取得してもファイル名をセット出来ないからって理由だろうけど、 コモンダイアログに文字列送るのと、ファイル名入力欄に文字列送るのに違いはあるか? 入力欄にフォーカス移して、SendKeys.Sendするだけで済むんじゃない?って話。 コモンダイアログを使った方法だと、ダイアログ出てる状態だとメインのスレッドは停止してないか? 監視スレッドでも作るか?いろいろ面倒だと思うぞ。 てか、俺はJavaScriptのAlertに応答するのにスレッドを作って押してた。
> 入力欄にフォーカス移して、SendKeys.Sendするだけで済むんじゃない?って話。 それが出来ないから(ダイアログをAPIを操作してファイル名を選択しようとしています。) ※Input type=file は、プログラムから入力不可
いやいや、出来たよ。もう面倒だからためしちゃったよ。 For Each item As HtmlElement In WebBrowser1.Document.GetElementsByTagName("INPUT") If item.Name = "Upload" Then ' ←特定する方法は自分で考えること item.Focus() SendKeys.Send("TEST") End If Next
592 :
590 :2008/11/16(日) 21:38:46
自己解決しました。 以外な落とし穴がありましたね。。。
593 :
590 :2008/11/16(日) 21:40:06
>>591 、、、
そんな方法もあるんですね。。。
俺の1日に苦労は一体。。。
594 :
590 :2008/11/16(日) 21:44:45
つか、休日返上で8時間位PCと格闘してたのは何だったんだろう・・・
態々APIなんて使わなくても実現出切るだなんて。。。
まぁ、APIの勉強になって良かった!!
と自分を励ましてみます。
>>591 さん
ありがとう。
わざわざSendKey使わんくても・・・ If item.Name = "Upload" Then item.InnerText = "TEST" End If
>>595 突っ込んでいいのか?
まず、<INPUT type="file" />は、セキュリティ上、中身を変更出来ない。初期値も持てない。
中身を変更出来ないとは言っても要はJavaScript等からのDOM経由で出来ないという事。
だから今回のようにSendMessageとかで出来ないか?っていうのが話の前提。
という事でまずレスを全く読んでないハズ。
で、item.InnerText = "TEST"なんてのはもろDOMなので出来るわけがない。
さらに<INPUT>タグは、タグ内で完結するタイプなのでInnerTextを持たない。
まあ、レス読んでなきゃ対象がINPUTタグってのもわかってないんだろうけど。
やれやれ、ようやく我慢比べも終わったか。
現在、VB2005でWindowsFormにDataGridViewを配置したプログラムを書いているのですが ツールボックスからDataGridViewをFormにドラッグし、各カラムの名称等をプロパティ画面にて設定しただけで なのですが、DataGridView上にカラム以外に空の1行が存在しています。 DataTable.DataSourceに何もバンドしていない状態なのになぜこの様な現象が 起こってしまうのでしょうか? ※一度DataTableとDataGridViewをバインドしDataTable.Clear() / DataTable.AcceptChange() を呼び出す とForm上に貼り付けたDataGridViewの空行は削除されます。
たぶん、AllowUserToAddRowsがTrueのままなんだろう。
>>600 解決しました。ありがとうございます^^;
602 :
デフォルトの名無しさん :2008/11/18(火) 15:10:01
フォームに貼り付けたWebBrowserコントロールに ワードファイルを表示させようとし、 WebBrowser.Navigate(FileName) というふうにしているのですが。。。 WebBrowserの中ではなく、 別ウィンドウでWordのアプリが起動して、 そこにファイルを開いてしまいます。 フォーム内に表示させたいのですが、 どうすればいのでしょうか?
すみません、質問です。 CABプロジェクトでデスクトップにショートカットを作成しました。 このショートカットにアイコンを割り当てたいのですがどうしたら良いのでしょうか。 セットアッププロジェクトで上記の設定をした場合、プロパティにiconがあったのですがCABプロジェクトでは無い様なのです。 可能であれば設定方法を教えていただきたいです。
604 :
デフォルトの名無しさん :2008/11/18(火) 20:02:10
DDEのサンプルない?
Arraylistに要素として構造体を持たしています。 sortメソッドを使ってソートをかけることはできますか?
IComparerを実装したクラスを自分で定義して,そのインスタンスを引数に渡す
>>600 >DataGridView上にカラム以外に空の1行が存在しています。
これを読み解いた君は凄いな
>>607 現在構造体に持たせている値をクラスに持たせて、Arraylistにはそのインスタンスを持たせるということでいいんでしょうか?
ありがとうございました。
>>610 なんか勘違いしてそうな気がする・・・
MSDNのArrayList.Sort メソッド (IComparer) を見ればサンプルがあるぞ。
612 :
デフォルトの名無しさん :2008/11/19(水) 18:36:22
パスの取得について教えて頂きたいのですが、 使用しているOSがVistaの場合は、 ユーザ\パブリック 使用しているOSがXPの場合は, Documents and Settings\All Users を取得するようにさせたいのですが、 どのようなコードになるのでしょうか? 御教授御願い致します
613 :
612 :2008/11/19(水) 18:56:42
XPの場合は、 Environment.GetEnvironmentVariable("ALLUSERSPROFILE") で取得できる事が解りました。 VISTAのユーザ\パブリックを取得する方法が解りません。 宜しく御願いします。
>>613 まんまで取れたと思う
System.Environment.GetEnvironmentVariable("PUBLIC")
615 :
デフォルトの名無しさん :2008/11/19(水) 21:07:05
VB10の新機能の一覧がうpされてるサイトってない?
質問させてください。 richtextboxで、リンクをクリックした後、そのリンクのURLをブラウザで開きたいのですが、 方法がよくわかりません。どなたかご教授願います……。
↓ご教示厨
質問させてください。 richtextboxで、リンクをクリックした後、そのリンクのURLをブラウザで開きたいのですが、 方法がよくわかりません。どなたかご教示願います……。
LinkClickedでぐぐれ
>>619 ありがとうございます、ググってみます。
なぜか2回書き込んでるしorz 申し訳ないです
namespaceが名前空間なら、宇宙空間はspacespaceですか?
通じればおk
namespaceは、本当は名前宇宙なのです
VS2005(VB.net)について質問があります。 現在WindowsForm上にラジオボタン(2つ)とテキストボックス(1つ)があります。 そしてRadioButton2を一度クリックし、Shift + Tabを押した時にRadioButton1に フォーカスを当てたいのですがなぜかうまくいきません。(勿論TabIndexも1・2・3と振り、TabStopもTrueにしてます。 そこでRadioButton2にフォーカスがある状態で Shit + Tabが押された場合には、強制的にRadioButton1に フォーカスを当てたいと考えているのですが、KeyDownイベントの中でShit + Tabが押された 事を判定するにはどうすれば良いでしょうか? (そのWindowsFormはちょっと特殊なので、真に勝手なのですが Shift + Tab の判定方法をご教授下さい。) ○RadioButton1 ○RadioButton2 □□□□□□ ※RadioButtonのKeyDownイベントの中で次のコードを記述しましたが、イベントの中(ファンクション) では、e.KeyCodeは常にShiftしか判定されません。。。 If e.Shift = True And e.KeyCode = Keys.Tab Then MessageBox.Show("出た") End If
>>624 KeyDownじゃなくてPreviewKeyDownイベントを使う
'Private Sub RadioButton2_PreviewKeyDown( 略
If e.Shift And e.KeyCode = Keys.Tab Then
Me.RadioButton1.Select()
e.IsInputKey = True
End If
'End Sub
足し算プログラム □ + □ = □ □はtextbox +はラベル =はボタン これはどうやって書けばいいですか?
>>626 ちなみにVB2005です
ボタンダブクリした後
Dim x As Decimal
Dim y As Decimal
Dim z As Decimal
Dim rezult As Decimal
TextBox1.Text = x
TextBox2.Text = y
TextBox3.Text = z
rezult = (x + y)
TextBox3.Text = rezult
と打ち込んでもエラーは出ないのですが
足し算できません><
足し算できるできない以前に、左と中央のテキストボックスの中身が書き換えられるだろそれ。 >TextBox1.Text = x って、TextBox1のTextをxに変えるって意味な。 変数xにTextBox1のTextに入ってるものを代入するなら右辺と左辺が逆だ。
>>626 TextBox3.Text = Convert.ToDecimal( x + y).ToString()
>>628-630 ありがとうございます。でもまだ解決してないです・・・
明日簡単なVBのプログラムを書かせるらしい試験がありますが間に合うのか。。
式の左右間違えるレベルならいっそ開き直って寝たほうが良いと思う。
あ、できましたね 始めなに言ってるかわからなかった^p^ =の前後が逆だったんですね
まーこれができたから明日はよゆうっすかね さんくす^^^^^^^^
小学生はこんな時間まで起きてちゃだめでしょ
皆様のおかげで全部解けました。 ありがとうございました><
2005が無かったのでこちらで質問 バージョン情報ダイアログ ShellAbout はどのように読み込ませればいいのでしょうか?
DllImportしたいのか禿?
あー一応できました。 でもダイアログではなくフォームとして出てくる…
なぁ…VB.netの調べ物してるとよく魔界のなんとかってHNの人 よくみかけるんだけど有名人?
641 :
デフォルトの名無しさん :2008/11/21(金) 21:48:39
Function test(〜〜) as 〜〜 If 条件式 Then 処理いろいろ Return ○○ Else Return C 'C:定数 End If End Function と Function test(〜〜) as 〜〜 If Not 条件式 Then Return C 処理いろいろ Return ○○ End Function どっちの方が良いコードなのでしょう。
どっちでも良いじゃない
on error と try catchの違いは on errorのほうはすべてのエラーを感知してしまう という答えであってますでしょうか
645 :
デフォルトの名無しさん :2008/11/22(土) 08:10:46
ならどういう違いがあるのでしょうか
647 :
デフォルトの名無しさん :2008/11/22(土) 09:40:09
>>646 一番大きいのは Finally ですね。あと、トラップできるのが例外なのかエラーなのかの違い。
使い分ける必要はないよ On Errorは過去の負の遺産だから不要
でもon errorのほうは全てのエラーを感知してしまう というのはあっているのではないのでしょうか? そしてtryのほうは感知するエラーを選べるのではないでしょうか?
tryで扱うのは例外 昔のVBでいうエラーとは全く違うもの 新規には構造化例外(Try-Catch-Finally,Throw)だけ使ってればいい
Try Catchも指定なしの全例外キャッチはできる。 過去のソースと互換以外にGo Error系を使う理由はない。
でも過去のソースと互換以外の目的でVB.NET使う理由なくね?
つ過去の脳ミソとの互換性
もっと簡単に教えてくれ on errorはどうダメなんだ?
エラーの種類を構文上で区別できない 他のオブジェクト指向言語で一般的な方法ではない .NET Frameworkは構造化例外を使うことが前提なので一貫性がなくなる MSDNでOn Error系のキーワードを引いてみるといいよ 関連するほとんどのページに,構造化例外使えアホと書いてある
どうダメかは、体感するのは簡単だけど説明するのはなかなか骨だろう。 VB厨にグローバル変数の弊害とか、フォームに処理をベタ書きする弊害を 説明しろって話に近い。
>グローバル変数の弊害とか、フォームに処理をベタ書きする弊害 をVB厨では無い一般プログラマ向けにkwsk。スレ違いならふさわしいスレに書いてそこに誘導ヨロ
BY(文脈読めない)かよ。 だから「骨」なものの一例としてそれらを挙げているわけだが。。
>BY(文脈読めない)かよ。 注釈つけないと通じないようなコトバ使うなよw
VB・NET関係のマニュアルCHMかPDFで無いですか? VisualStudioのヘルプ面倒で中途半端なので教えてください。
>658 VB厨に説明するのが骨とか煽るから VB厨以外に説明してみせろって煽りかえされてるんだろ。それぐらいの文脈読めよ
VBなんだから気楽に書けばいいのに
>>660 ない。どれだけ量あると思ってるんだ
オプションで独立ウィンドウに表示できるけどそれは知ってるよね?
chmはともかくPDFは余計見づらいだろどう考えてもw
.ToString(”X2”)の2を見つけるのに半日かかったんですよ 頭にあるPrintf・Usingの概念が悪いのかもしれませんが・・・
666 :
デフォルトの名無しさん :2008/11/22(土) 15:16:08
>>654 例外を継承した俺例外とか作れないとこ。Finally がないとこ。
>>665 書式指定文字列のドキュメントは確かにわかりにくい
>>661 だから文脈読めない馬鹿だというんだ。
VB厨という言葉は、それら「体感するのは簡単だが説明するのは難しい」ものを
体感する能力を欠いた者、という意味で使っているのであって、
相手がVB厨だからそれらを説明するのが難しいのだ、などとは言ってない。
>>660 VBの言語仕様のことを言っているのなら
VS2003時代のMSDNライブラリには入っている。
なぜか今のには入ってない。もちろんローカル版のことを言っている。
何でもかんでも略せばいいってもんじゃね〜w
BY厨(文脈読ませる厨)ワロタ
on errorで全ての例外が感知できるのだから try catchよりも楽だと思うのですが。
その理屈ならそもそも例外処理はしない方が楽だと思うのですが
例外処理はするという前提で、 on errorはtry cathcを含んでいると感じます。 大は小を兼ねるというイメージが出来てしまっています。 しかし、世間ではon errorはダメだとの評価です。 さっぱりわからないのです。
On ErrorがTry-Catchより大だと考える点て何?
>大は小を兼ねるというイメージが出来てしまっています。 そのイメージが本当に正しい認識なのか疑ってみたことは?
Gotoで飛んで数値のエラーコードでエラーの種類を調べるなんて時代錯誤だろ
679 :
デフォルトの名無しさん :2008/11/22(土) 18:33:41
そう思うんなら、on error を使い続ければいいじゃん。
>>676 どんなエラーが来るかを予想して5個ぐらい予想が付いたら
5個の文章を書かないとダメじゃないですか。
でもon errorだとエラーになったら発動するじゃないですか。
681 :
デフォルトの名無しさん :2008/11/22(土) 19:16:02
>>680 > どんなエラーが来るかを予想して5個ぐらい予想が付いたら
> 5個の文章を書かないとダメじゃないですか。
そんなことない。以上終了
好き嫌い以上の理由を語りたいなら語れるだけの知識を身につけてからにした方が良い。
5個予想がついたら5個書くのが当たり前 エラーの種類に応じて対処を変える必要があるだろ On Errorにしたって一緒。エラーの種類をifで判別したりする。
Flashビデオを流しているYouTubeの動画を見る時に 自動でページ内の 「⇒」ボタンをクリックする事とかってやっぱり無理ですか? 指定したページの中にある全FLVをプログラムから一度にクリックするツールを作りたいと思っています。
686 :
デフォルトの名無しさん :2008/11/23(日) 23:34:27
>>685 そのボタンは何でできてるの?
最悪、SendInput() だろうけど・・・
なーんにも知らないのにいい加減なこというけど、 YoutubeってAPI公開してるんじゃなかったっけ?
>>686 Flashです。
SenInput()???これはなんですか?
>>687 あああ、API公開してるって事はプログラムで制御出来るかな?
>>688 ちょっと見てみます。
因みにWEBページはVB.netである程度制御する事が出来る事がわかったけど、
Flashページ内の特定のボタンをクリックとかって事はそもそもVB.netから出来るのでしょうか?
Adobe CS3 とか勝手Action Scriptも勉強しなくちゃいけないとは思いますけど。
>>690 うぉーすげー出来るんだw
最近のWEBページはFlashが多くてうざくてしょうがなかったんだけど
ちょっと安心しました。
>>690 それってフォームに表示してるflashの操作じゃない?
Visual Basic 2008 Express Edition Visual C# 2008 Express Edition Visual Web Developer 2008 Express Edition + Visual Studio 2005 (Jap) これらのバージョンをWindows XP(Pro)に平行して インストールする事は可能でしょうか?
コピペ君って馬鹿だな、まで読んだ。
テキストボックスへ入力された文字をもとに ファイルまたはフォルダを検索しようとしています Dim text As String = TextBox1.Text Dim files As String() = System.IO.Directory.GetFiles( _ "C:\", text, System.IO.SearchOption.AllDirectories) ListBox1.Items.AddRange(files) このようなコードで実行してるのですが、アクセスできないフォルダとかまで検索しようとして 「パス 'ほにゃらら' へのアクセスが拒否されました。」 とでてしまいます 解決策がございましたら教えてください
696 :
デフォルトの名無しさん :2008/11/24(月) 21:06:29
697 :
デフォルトの名無しさん :2008/11/24(月) 21:08:32
先日のG20で世界の指導者の全員がブッシュと握手をしなかった。
http://jp.youtube.com/watch?v=uRMAAXNHkh8 世界の外交上の暗黙の了解として、ブッシュが指導するアメリカは
完全に村八分になったという意味らしいが、要するにアメリカ帝国が
終わったという意味だとすると、
そんな沈没して行くアメリカ持ち上げ犬手下バンザイで麻生さんだけが
ドル機軸、バメリカ帝国マンセーで
これからもがんばりますデぇ−ス!!
で尻尾振り続けている姿はどう映るんだろうねw
> バメ犬手下自民党 <
> マンセーー <
日本ってずっとずっとこれで行くつもりなんかな?
コピペ君って馬鹿だな、まで読んだ。
フォームでTransparencyKey指定した時のようにPictureBoxを透過 することは可能でしょうか PictureBoxのBackColorをTransparentにしてもフォームのTransparencyKey の色になるだけだし… 現在はPictureBox.Visible=Falseにしてスクリーンキャプチャして切り出して 合成してPictureBoxに書き込むという泥縄なことしてるんで
>>701 言ってることがよーわからんけど、
合成して描画できるということは最初からPictureBoxなど不要ということだろう
普通に考えれば。
最近.netの2003を授業ではじめたんですけどテキストボックスで 常に同じ文字を表示させておくことってどうすればできますか? 日付をyyyy/MM/dd形式で入力させるテキストボックスを作りたいんですけど スラッシュうつのめんどくさいのではじめから / が打ち込まれて いるようにしたいんです。 プロパティのテキストに/書いても実際の処理でテキストボックスに書き込み したら/消えちゃうし。 あとテキストボックス選択した時にテキストボックスの中身が全部反転して 選択された状態になってしまうんですがそうならないようにする解決策 があればヒントください。 かなり低レベルだと思うんですけどヒントください。
>>703 1. 2005 (.NET 2.0) なら MaskedTextBox を使用する。
→授業だったら勝手に変えられんわな。
2. Microsoft Masked Edit という ActiveX を組み込む。
→これも勝手にインストールしていいんだろうか。
3. 日付専用なら DateTimePicker を使用する。
→カレンダーも表示される。
オススメは3。
>テキストボックス選択した時にテキストボックスの中身が全部反転
プログラムでやんないとそうはならないハズだけどなあ。
コードウィンドウの左上で該当するテキストボックスの名前を、
右上で「GotFocus」を探してみ。
太字になってたら、フォーカスイベントを受け取ってなんかやってる。
すまんがダメな俺に教えてくれ VS2008から何かDataRepeaterってのが追加されてるんだけど、これについて。 AllowUserToAddRows = True にしても、行の追加は出来るんだけど、 DataGridViewみたく、 " * "って表示される新規行が常に表示されないんだ Accessの明細用サブフォームみたいな感じで使いたいから 常に新規行を出したいんだけど、無理? DataGridViewはデザイン性に難があるから、出来ればDataRepeater使いたいんだ それとも、他の良い手があるんかな
Framework2.0のInterfaceについて教えてください。 特定のIFを実装していたらIF経由で関数を実行するロジックで If (TestClass.GetType.GetInterface(GetType(TestInterface).Name) IsNot Nothing) Then TestIF = TestClass TestIF.TestSub() End If とやっているんですが、GetInterface以外に取得する方法ありますか? HasInterface(String) As Boolean とか GetInterface(System.Type) As Object(指定した型の実体を返す) とかなら判るのですが、何故わざわざStringで受けているのかが判らない
>>706 型の互換判定ならこうじゃない?
If TypeOf TestClass Is TestInterface Then
>>707 が正解だけど,もしオブジェクトじゃなくて型"TestClass"が
TestInterfaceを実装しているかどうかを調べるなら
If (GetType(TestInterface).IsAssignableFrom(GetType(TestClass)))
とするのが正しい
いきなりTryCastという方法もある。 C#の as と同等のキャストであとはNothing判定でそのまま呼び出し。 TestInterface hoge = TryCast(TestClass, TestInterface)
710 :
703 :2008/11/26(水) 21:36:58
>>707 ,708,709
ありがとうございます。
TypeOf Isでそのまま判定できたんですね
TryCastも初めて知りました
Reflection方面でしか調べてなかったんで
視野が狭くなっちゃってましたね
712 :
デフォルトの名無しさん :2008/11/28(金) 06:31:58
今作ってるプログラムは「フォームでいろいろ設定」→「処理実行」という使い方をするのですが フォームの設定内容を簡単に書き出す方法はあるでしょうか? 今のところは他のやり方を知らないので、チマチマ各パラメータを保存できるような形式にしてファイルに書き出す方針なのですが。
どうせ自分で書くなら必要なパラメータを1つのクラスにしてシリアライズできるようにしておけば? 起動時にデシリアライズかけて元に戻すとか 面倒くさいならユーザースコープで設定使えばいいんじゃないかと 勘違いだったらごめ
シリアライズ用のクラスにまとめて,カスタム属性やリフレクションでがんばる
カスタム属性がカタツムリ属性に見えた。 もう寝る。
VB2008 Expressを使用しています。 500×500の要素を3Dグラフにして表現したいのですが、標準でついているグラフコンポーネントってChart FXだけでしょうか? これで多くの要素を1画面に収めることってできます・・・? 多くの要素を1画面に収めるか、他にフリーのグラフコンポーネントがありましたら教えてください。 よろしくお願いします。
散布図ならgnuplotでも使って画像に出力したら
718 :
デフォルトの名無しさん :2008/11/28(金) 22:53:13
すいません、VB.NETで簡単なFTPソフトのサンプルソースが欲しいです 欲しい機能は スループットを結果で表示する ファイル転送の進行状況の表示 ファイルのアップロードダウンロード 宜しくお願い致します。 最初VB6で公開されているソースを参考に作っていたのですが、 スループットを結果で表示する事が出来なくてVB.NETで作り直しを命じられました。 VB6のコマンドボタンの配置法だけの教育でVB6を理解した事にされ、 VB.NET(2003)は昨日初めて触れたド初心者です。 助けてください、お願いします。 またVB6でFTPでの転送結果を取得する関数とかあるのでしょうか?
本質的に頭悪いんでしょw それと「悩んでる私」を他人に語って受け入れてもらいたい女々しいタイプなんだと思うよ。
スループットを結果でって…… しかもできないって…… ようするに転送量/時間でしょ?
しかも2003w
もうこのスレいらなくね?
この場合は結果(FTPクライアント(笑))が必要なんじゃなくて
>>718 自身の教育が目的なんだからこれでいい
725 :
718 :2008/11/28(金) 23:49:11
>>719-724 すいません
その検索方法で既に調べていたのですが、よく理解できなかったので。
転送量/時間で出すのがやはり王道なんですね。
皆様回答ありがとうございました。
こんなスレじゃなくて余所ならまた違った回答があったかもね めげずに頑張ってね
なるほど聞く場所が悪かっただけだから気にするな、と。 本当にそうかね。
ググれカスで全部片付くからこのスレいらね
一台のPCに複数のIPアドレスが割り当てられている場合に VB.NETのWebBrowserでそのIPを切り替えるにはどういう方法がありますか?
ググれかす 以後、VB.netの行く末を語るスレになります。
答えを理解するのにもある程度の知識が必要 わからないから、とりあえず聞いてみようなんて奴に教えても無駄無駄
すぱるたかす
733 :
712 :2008/11/29(土) 06:17:32
>>713-714 すいません、各パラメータを保存できるような形式にしてというのがパラメータを1つのクラスにしてシリアライズするという意味のつもりでしたw
ユーザースコープで設定というのを調べてみたところ、いろんな設定を読み込みなおして使う目的にはあまり適さないようでしたので、現在の予定のままでいきます。
ありがとうございました。
質問スレなのに >>聞いてみようなんて奴に教えても無駄無駄 ほんともうこのスレいらんよw
あほか
はい
VBユーザーって性格も悪いんですね^^
はい
BackgroundWorkerで動かしているスレッドから 他のメソッド(staticではない)を呼んだ場合、問題は発生しますか?
741 :
デフォルトの名無しさん :2008/11/29(土) 22:09:38
問題が発生するようなことをしなければ発生しないけど そんなことを聞いてるようじゃ間違いなく発生するね
staticだって作り方次第じゃ十分問題あるだろう。
他のメソッドを呼び出さなくても問題は起きるよ staticだからどうとかも関係ない なにをやったらダメなのかわかってないならスレッドなんて使っちゃダメ
どのような問題が発生しますか。
別スレッド=異次元 君が気づかない間に異次元から君の記憶が操作されていて 君の状態に矛盾が発生してしまう いつのまにか朝ごはんを食べなかったことにされたり 男なのに女にプロパティが変更されたりしてしまう
>>745 BackgroundWorkerで動かしているスレッドから
他のメソッド(staticではない)を呼んでみたら?
小数点以下を切り捨てしたいのですが Dim a As Double = 3850 Dim b As Double = 1.1 Dim re As Double = System.Math.Floor(a / b) Me.Text = re これが3500ではなくなぜか3499になります 3500になるように切り捨てするには どうしたらいいですか。
一行コピペ君って馬鹿だな、まで読んだ。 こういうコピペ君ってどや顔で一行コピペしてるんだろ馬鹿だよな、まで読んだ。
decimal 使うが勝ち
どや顔って?
わざわざVB関数紹介するなよw Math.Ceiling
755 :
754 :2008/11/30(日) 11:12:06
でもdecimalのほうがいいよ
浮動小数点を扱う以上、10進法とは誤差が出るのは当たり前。 If re = 3499 Then re = 3500 を挟むのが正解。 ってコードを金融系のソースで見て目ん玉飛び出た。 なんで浮動小数点で金の計算するんだよ。
まあ金融系って言っても色々あるんじゃないか
758 :
デフォルトの名無しさん :2008/11/30(日) 13:38:02
利子の計算とかなら端数でるから浮動小数点で多少誤差でてもわからんだろ?
筆算やソロバンで計算したときと同じ誤差が求められるから大変だよ
>>749 何をしたいかによるね。
単純にその演算に関してのみ正しい結果が欲しいのであり、
かつ必要な有効桁(というか小数点以下の桁数)がはっきりしているのなら
Roundで丸めればいいわけだし。
分数の演算を常に「数学的に正確に」行う必要があるのなら
そういう分数クラスを自分で作るしかないだろうし。
いろいろ試したけどdecimalだとうまくいきますね でも速度が遅くなるみたいだし・・・ しばらく悩みそうです
理屈がわかってる人間ならいいんだが、
>>749 みたいな質問をする人が
decimal使うのは正直どうかなと思うね。
まず実数演算の誤差がどうして起こるのかの理屈を理解するのが先決だよ。
通常は
>>760 に書いたように精度の仕様を決めてそこで丸めるようにすれば
済む用途が大半だと思うけど。
763 :
デフォルトの名無しさん :2008/11/30(日) 16:09:30
わかんなければ、小数演算するときは decimal、ってのはありだろ。
>>760 もあんまり理解していないのではないかな。
問題は1.1という数値自体が2進法であらわせないことにあるわけで。
2進法の丸めは2進法で表したときの少数点以下何桁(ビット!)目で
丸めるといったロジックになるのはわかってるのかな。
>>763 ひょっとしてdecimalって「誤差がでない魔法の型」とか思ってるんじゃないの?
まあそのようだけど、だから「正直どうかな」と思うわけ。
.NET 2.0でこれが追加された時はこれで勝つると喜んだよ。 偶数丸めと四捨五入の指定ができる。 Math.Round ( d As Decimal, decimals As Integer, mode As MidpointRounding ) As Decimal
767 :
デフォルトの名無しさん :2008/11/30(日) 16:22:23
演算誤差もわからんヴァカにいちから説明するのはめんどいからさ。 そういうやつには、「decimal 使え、理由はいちいち説明しないけど」で十分。
唐突と感じたのなら理解が浅いね。 decimalを使うだけだと手計算との違いは発生する。 decimal(10進化浮動少数点)で丸めの処理がコントロールできれば 手作業で計算したのと同じ結果が出せる。
一行レスってバカだなと思った
っていうか
>>760 でMath.Roundを出したが、
ひょっとしてこの引数のdigitに1を指定しろって前提で話をしているとでも
思ったんだろうか。
そういうことじゃないよ。
有効桁の要求仕様がはっきりしてるのなら〜とわざわざ前置きした意味を
すっとばして理解されては困る。
>>772 前提をはっきりさせないと何を持って正しいとするか決められないというのは了解。
上級者のフリしたいだけの奴は消えろよもう
>>774 その言葉自体は同意するが、だったら間違ってると思ってる意見に具体的に反論しろよ。
できないのならその言葉をお前さん自身に適用すること。
「コピペ君って馬鹿だな、まで読んだ」というレスが すでにコピペである件について 「一行レスってバカだなと思った 」というレスが すでに一行レスである件について
荒らしに構うやつは荒らし、ってレスを書くのと同じだな
ちょっと課題で悩んでいます。 Listbox1に表示させた文字列を部分検索して、該当する文字列を全てlistbox2に 表示させるプログラムを作らなければならないのですが、検索してもよくわかりませんでした。 低レベルの質問だとは思いますが、どなたか教えていただけないでしょうか?
何が分からないのさ
・Listbox1を表示させる ・Listbox2を表示させる ・文字列をListbox1に表示させる ・Listbox1に表示させた文字列を部分検索する ・該当する文字列を全て取得する ・取得した文字列を全てListbox2に表示させる これだけじゃん
782 :
779 :2008/12/02(火) 17:14:50
>780 >781 事故解決しました。すみません。 本当に質問するような問題ではなかったです
ユーザーとパスワードで制限されたネットワーク上のディレクトリのファイル一覧とそれらのファイルのタイムスタンプを取得するには どのようなコードを書けば良いのでしょうか?
どうやって公開されてるかによる
785 :
デフォルトの名無しさん :2008/12/02(火) 21:42:35
ネットワークに接続する 認証を通る ファイル一覧を取得する タイムスタンプを取得する コードを書けばOK
786 :
デフォルトの名無しさん :2008/12/02(火) 22:21:00
VB.NET初心者です。オブジェクト指向をマスターした人に質問です。 入門書を購入して一通り学習しましたが。オブジェクト指向やクラスの段階で、挫折気味です。 オブジェクト指向の前の段階までは確実に理解できて自分でコードが書けるのですが。 クラスとか応用してプログラムを作ることができません。 クラスは8000種類あるらしいですが、コードが書ける人はこれを全部覚えてる人なんているのでしょうか? クラスごとにコードの使い方のルールが違っていて、基本がわかっていてもクラスがうまく使いこなせません。 やはりいちいちMSDNを検索して参考にしてコードを書いてるんでしょうか? しかしMSDNを見ても書いてあることがよく理解できません。 今、見てる本が基本的過ぎるのでしょうか? みなさんはどんな本でなにを参考にしてプログラミングや勉強しましたか?
787 :
デフォルトの名無しさん :2008/12/02(火) 22:24:35
>>786 > オブジェクト指向の前の段階までは確実に理解できて自分でコードが書けるのですが。
> クラスとか応用してプログラムを作ることができません。
それは理解できてないと思う。まずは、構造化プログラミングをきちっと身につけた方がいい。
> クラスは8000種類あるらしいですが、コードが書ける人はこれを全部覚えてる人なんているのでしょうか?
いないと思うよ。
> クラスごとにコードの使い方のルールが違っていて、基本がわかっていてもクラスがうまく使いこなせません。
> やはりいちいちMSDNを検索して参考にしてコードを書いてるんでしょうか?
> しかしMSDNを見ても書いてあることがよく理解できません。
それは基本がわかってないから。
> 今、見てる本が基本的過ぎるのでしょうか?
> みなさんはどんな本でなにを参考にしてプログラミングや勉強しましたか?
基本的な文法を覚えたら、とにかくプログラムを書く。書いたら、別の方法を試してみる。
繰り返し、繰り返し。そのうち、コツがわかってくる。
788 :
デフォルトの名無しさん :2008/12/02(火) 22:31:07
>基本的な文法を覚えたら、とにかくプログラムを書く。書いたら、別の方法を試し>てみる。 >繰り返し、繰り返し。そのうち、コツがわかってくる。 これはプログラミングをマスターする王道だと思う。
サンプルソースをコピペ ⇔ ちょこっと改造 そのうち全部自分で書ける様になる 先輩方のコードを読むのは勉強になるよ
出来合いのクラスを使うだけじゃなくて 自分でクラスを書いてみるとよく理解できる
むしろモジュールだけ使ってソフト組んでいるといつかクラスが必要な時がわかるんじゃないかとw
今から始めるんだったらモジュールなんて飛ばしてもいいよ
793 :
デフォルトの名無しさん :2008/12/03(水) 17:36:41
ためになるスレだなぁ。
794 :
デフォルトの名無しさん :2008/12/03(水) 23:26:35
ねえ、VB中学校とか言うサイトがあるけど、このスレの人はどんな評価? あれわかりやすいですか?
>>794 なあ、それ他人に聞いて意味のある質問だと思う?
わかりやすい本やサイトなんて存在しないと思っていい。 どんなに噛み砕いて説明してるつもりでも、本当に助けが欲しいと思ってる人には理解出来ないことが多い。 やはり覚えたいと思ったことは、自分でやってみるのが一番の勉強になるし身に付く。 特に独学で体験した失敗はとても重要な財産になる。 一通り勉強した後に見る、自称わかりやすい本やサイトは「復習」として見る分にはいいと思う。
そうは言ってもVBに関しては中学校ぐらい初心者を意識した参考書なんてないよ 巷にあふれてるVB本はリファレンス形式のものが多いし.NETに限定してしまえば 「オブジェクト指向?なにそれ?」な参考書ばっかり なんでちゃんとしたクラス設計の説明などを省くのだろうかといつも不思議に思う
一冊や1サイトですべてがわかる奴はいないんだよ
初心者がしっかりオブジェクト指向勉強するならjavaの本でも読んだ方が早いんじゃね .NETでもC#の基礎的(≠簡単)な解説はわりとwebにも多いんだけど VBは本当に無いね
>なんでちゃんとしたクラス設計の説明などを省くのだろうか 簡単にそういうけど、君書ける? 初心者相手じゃなくても相当ハードな分野だと思うけど。 っていうか、VB中学校にはその種の内容の文章はないと思うが。
Processクラスでバッチファイルを起動しています。 そのバッチファイルから起動しているプログラムの プロセス名またはPIDを取得するにはどのように すれば良いでしょうか?色々調べてみましたが、 わかりませんでした。よろしくお願いします。
煽りじゃないという前提で聞いてくれ。 たまにプログラムが分からない、という奴がいるけど俺からすると そいつらが何が分からないか分からない。 オブジェクト指向で躓く奴もいるけど、そこもマジで分からない。 例えていうならファイアーエンブレムでクラスチェンジしたキャラで 合体する事によって両方の機能(メソッド)が使用出来るってだけの 事をなぜ理解できない?そして組めない? 前に国立理系院卒で確実に頭は良いであろう奴がいたけど、プログラムが 一切組めない奴がいた。マジでそいつらの頭は一体どうなっているんだ? プログラムなんて複雑な数学と比べれば簡単過ぎると思うのだが。
煽りの特徴のひとつ、1行とばし。
>>802 つまり君にとっての数学がその人にとってのプログラムなんだ。
>>805 オレは、すまんが数学もそれなりに得意。(院卒レベルには及ばないけどね。)
>>804 読み易くする為に行間を空けてるんだよ。
用は、オレが何を言いたいかというと、車で例えるなら車がどういうメカニズムで動いているか(化学・物理学等も含めて)
を突詰め様とすると難しいけど、既に出来上がった車(プログラム)を運転(組む)のが難しい訳が無い。
というのがオレの意見なわけ。だからこそ車のメカニズムまで分かっている奴がF1レーサーみたいな
運転をする訳ではなく、普通の運転をする事すら出来ないって事が不思議でならないという訳さ。
>>806 >院卒レベルには及ばないけどね。
つまり院卒レベルの人から見たらなんでこんな問題もできないのってなるのさ。
人には得手・不得手っていうのがある。
なんでも自分基準で考えないで、客観的に見たほうがいいよ。
世界中の人がプログラム組めたらプログラマの仕事がなくなるし。
俺にはVB.netスレでそんなスレ違いな愚痴を得意げに書くやつが不思議でならない。 明らかに面白い(と言うか恣意的な)例えを持ち出してるところとかも
>>806 お前の例えは分かり易くて良いね。
設計書もしっかりしていそう。
車のメカニズムとか量子力学とか超ひも理論とかを極めた日本人のほとんどが、 ロシア語とかスペイン語とか中国語を話せないわけだ。 あんなのその国の6歳児のほぼ全体が簡単に習得できているのにな。 あぁ失礼。お前さんはロシア語もスペイン語も中国語も簡単に習得できていましたか。
>>809 自演か知らんがその感覚はないわwww
さすがVB房
>>801 WMI使ってParentProcessIdが[起動したバッチファイルProcessのId]になってるWin32_Processを探す
>>806 全然読みやすくない、ってかウザったらしいだけ
2008で日本語を全部英語とかに変換できるとか聞いたんだけど (xmlがどうのこうのいってたような) 本当に可能? もし可能ならどうやってするんだろ・・・
817 :
255 :2008/12/04(木) 13:34:19
コネ━━━━━('A`)━━━━━━ !!
単にlocalizationの話じゃね?
SendKeysで半角カナを送る方法はないものでしょうか? SendKeys.SendWait("ア") だと ア が送られるけど SendKeys.SendWait("ア") だと 3 が送られてしまいます。 VBの SendKeys "ア" だとちゃんと ア が送られていたのですが、.NETへの移行でつまずいています。
オブジェクト指向とは合体して両方使えるようになるってことです。 こんな簡単なことが分からないなんて理解できません!!
>821 ggytz(ぐぐってやったぞ)ksですね、わかりますわかります
そもそもSendKeysは文字通りキー入力を送信するもんなのだから 半角カナなんてキー入力を旧VBがどうやって実装していたのか気になる
>>821 おおありがたや、と思ったら
VB.NETに関するメモ書き
のリンク先なくなっとる
どこを読んで「なくなってる」と判断してるんだ? エラーメッセージを読むのは言うまでもなく基本。 >CGIが、開設したホームページ領域以外から呼び出されました。 って書いてあるなら、URL直打ちなりグーグルキャッシュから見れる事も多い。 検索結果のリンクからCGIに飛ぶとそういうことがよくある。
もちろんそのサイト内入念に探した上での返答です
828 :
デフォルトの名無しさん :2008/12/04(木) 21:59:43
すみません、キャッシュまでは見てませんでした。 この方法だとIMEがきかないところなので無理そうです。
830 :
デフォルトの名無しさん :2008/12/04(木) 22:10:28
半角のアのキー入力を送りたいなら、カナモードにして送るしかないんじゃない? テキストボックスに半角のアを設定したいなら、WM_SETTEXT とかそういう系で。
>>813 ありがとうございました。
できました! m(_ _)m
>831 右クリック→ショートカットのコピー→ブラウザのURL欄に貼り付け でも行けた。
VBのSendKeysをラップしたCOMを作って使う
ちっちっちっちきち〜♪ うちうち♪ うちの父ちゃんは♪ 毎朝元気だyo!
フォームの中にラインを引く方法教えてくれ〜 なんで初心者用にツールボックスにDrawLineがないんだよ\(^o^)/
Visual Basic Power Packでも使ってろ無能
MouseEnterでフォームをアクティブにすることってできますか? サンプルなどあったらそれもお願いします
プログラミング初心者なのですが 変数は初期化して使い回した方がいいのでしょうか? 変数が多いと処理が重くなったりするんでしょうか? 今の作ってる部分の変数が100個位なのですがこの100個の変数は一気に処理するので これから増やしていくなら初期化した方が処理自体はおもくならないのですか?
そのレベルなら とりあえず書きたいように書け 動作が遅いと体感できてから改善を考えろ
速い遅いの前にまずは値型と参照型について勉強しようね それより,一つのメソッドに100個の変数へのアクセスが出てくるの?w自動生成ならともかく
まあ実際にどうかは計測するのが一番だよね その方が勉強になるよ
変数100個って想像がつかんのだが… いったいどういうメソッドなんだ…?
一気に処理するってことは配列を使うべき場所なのかもしれない。
ありがとうございます とりあえず完成させてから考えた方がいいのですね。そうしてみようと思います
849 :
デフォルトの名無しさん :2008/12/06(土) 14:02:48
それにしたって変数100個は頭悪すぎる
そもそもVB.NETスレよりもふさわしいスレがあるような
pictureboxにある画像を二値化したいのですが、やり方がわかる人おられませんか? 調べても全然出てこない・・・
Bitmap.LockBitsでロックして自分でピクセルデータを触る
>>852 2値化する為の何が分からないのかが分からない。
それだとアルゴリズムがわからないのがプログラムがわからんのかどっちだ。
VB.netでインストールパッケージを作っているのですが インストールが完了したら、ユーザのデスクトップにアプリへのショートカットを自動で 作成するにはどうすれば良いでしょうか? (VS2005)
あの画面構成を見て分からないようじゃアドバイスのしようがない。 頭の上に眼鏡があるのに「母さん、ワシの眼鏡知らんか?」と言っているようなものだ。
教えてやれや。 そんな長い文章まで書き込む位なら。
オマエモナー
>>860 理解したのなら
>>856 の言う事ももっともだと思ったんじゃないの?
とりあえず自分の○○(都合により自己規制)を棚に上げて「死ね」はちょっと酷くないか。
そうか。 そういう可哀想な人なら仕方ないね。
行間空けるタイプの人間はロクなヤツがいないという 私の持論がまた証明された!
865 :
デフォルトの名無しさん :2008/12/08(月) 19:18:51
タイマー処理をしたいんだけど起動直後にも処理をしてほしい MyBase.Load, Timer.Tick の両方で動作するイベントを書こうとしてるんだけど、タイマーをちょこっといじるだけで実現できたりする?
>>865 できるけど(そのためにイベントハンドラの引数eはEventArgsの派生クラスとするように
統一されてるんでしょ)やるな。
両方から同じメソッド呼べば済むしその方が読みやすいよ。
867 :
デフォルトの名無しさん :2008/12/08(月) 20:11:15
>>866 そうしました。ありがとうございました〜。
868 :
デフォルトの名無しさん :2008/12/09(火) 22:01:12
マウスのクリックを無効化したいんですがどうしたらよいですか? たとえばデスクトップ上でもアイコンをクリックしても 何も起こらないようなものです。 目的としてはデスクトップのハードコピーをとる際に、 範囲を指定できるようなプログラムを作りたいと考えています。 どなたか教えてください。
画面いっぱいに透明な窓を作るとか
870 :
デフォルトの名無しさん :2008/12/09(火) 23:19:33
>>869 イメージとしてはそんな感じです
APIとか使えばよいのでしょうか?
そんなに難しく考えないでいいよ
872 :
デフォルトの名無しさん :2008/12/09(火) 23:25:59
自分でもいろいろ調べてみたんですが APIなんかでマウスをフックして クリックイベントが起こったらExitSubとかすればよいですか?
おれはエクセルワークシートのクリック無効にする為にワークシート全体に 透明のラベル貼ったことある しばらく使ってるとメモリ不足になって止まっちまったけど (Windows95でExcel97使ってた頃の話)
フックする必要が無いでしょうに
デスクトップを触れなくするなんて どう考えてもまっとうな人間が作るまともなソフトとは思えんな。 好意的に解釈してもUIってものがまるでわかってないお馬鹿ってとこ? 一人で馬鹿やるのは勝手だけど、俺は犯罪幇助みたいなことはしたくないもんだな。
876 :
デフォルトの名無しさん :2008/12/10(水) 00:09:41
>>875 >目的としてはデスクトップのハードコピーをとる際に、
>範囲を指定できるようなプログラムを作りたいと考えています。
>どなたか教えてください。
よくお読みになってください!!
背景色をTransparencyKeyにしてFormBorderStyle = FormBorderStyle.Noneにして最大化するだけ
そんなのキャプチャしてからトリミングすれば済むことだろ常識で考えて。 そもそもトリミング範囲を指定するのにデスクトップをドラッグするわけ? そんなソフト絶対使いにくいわ。
>>878 マウスで指定した矩形範囲をキャプしたいってことだろ。
どちらかというとwinshotじゃね?
>>878 の
>トリミング範囲を指定するのにデスクトップをドラッグする
ってどういう意味だ?
>>883 普通はデスクトップのビットマップをウィンドウで表示して
そのウィンドウの中でトリミングするというが真っ当なやり方だけど
デスクトップを直接ドラッグしてトリミングするって意味で言ってると思われ
つーかそんなアプリはVistaに標準添付されてるから作らなくていいよ
>>875 Vista の Snipping Tool や、Mac OS X の CMD+Shift+4 てのを考えた奴は
お前よりまっとうな人間。
>>885 Home Basic にはないけどな。
まだ粘着してるのか その執念深さを検索に向けようとは思わないんだねぇ…
>>887 独り言でないのなら、アンカーくらい付けたら?
Dim fr As StreamReader Dim FileString As String FileString = "" fr = New System.IO.StreamReader(TextBox1.Text, System.Text.Encoding.GetEncoding("UTF-8")) Dim AoMS As String = fr.ReadToEnd fr.Close() fr.Dispose() -------------- Disposeを書けばCloseを書く必要なかった?
890 :
デフォルトの名無しさん :2008/12/11(木) 16:31:46
基本Disposeで全ての終了系処理はやってくれるんじゃないか? と思ってるんだが むしろUsing使うべきでは?
Closeはいらない Using使った方がいいけど,明示的にDisposeするなら必ずTry-FinallyのFinally内でやること
リソースを閉じるのは両方ともやるけど Closeはガベージコレクト任せ(内部の実装にもよる) Disposeは呼び出した時点で開放を行う だと思ってたんだが
全然違う Stream.Closeは中でDispose(true)を呼ぶだけ つまり明示的にDisposeを呼ぶ(もしくはUsingを使う)のと全く同じ
894 :
892 :2008/12/12(金) 12:44:51
ちょっと認識が曖昧だったんで「close dispose」でググってみたが Closeはスコープ内でインスタンスの再利用を考慮した時に使用 Disposeはインスタンス自体の破棄する時に使用 というように認識した StreamReaderの場合なら 再利用できないっぽいから明示的にDisposeのみがいいと思う それ以前に再利用できないならCloseを同時に実装するなと… ※意見が別れるっぽいから、コレはあくまで自分個人の感想ね
フォームが「移動し終わった」あるいは「リサイズし終わった」ことを知るには どうすればよかろう? (moveやresizeで再描画してるので重くてしょうがない)
つまり字面上の違いだけってことだな 昔はもっと曖昧な記述だった気がするんだけど,議論がよく出るからはっきりさせたのかな
Finaraise?ファイナライズをかけばDisposeもCloseもかかなくていい?
よくない 理由は上のリンク
ファイナライザは直接アンマネージリソース持ってたりしてどうしても必要な場合以外は「書くな」 GCに悪影響を与える
VS2003に作ったプログラムをVS2005に移行した際に、 InvalidOperationExceptionが発生されました。スレッドセーフな呼び出し方法を教えてください。 という例外エラーが発生してしまいました。解決法を御教授下さい。 以下コードです。 Public Class frmProgress Inherits System.Windows.Forms.Form End Class Public Class Progress Implements IDisposable Public Overloads Sub Show(ByVal owner As Form, Optional ByVal flg As Boolean = True) startEvent = New System.Threading.ManualResetEvent(False) ownerForm = owner thread = New Threading.Thread(New System.Threading.ThreadStart(AddressOf Run)) thread.IsBackground = True thread.ApartmentState = Threading.ApartmentState.STA thread.Start() startEvent.WaitOne() End Sub Public Sub Run() myform = New frmProgress myform.ShowDialog(ownerForm) ←ここでエラーとなります。 myform.ShowDialog() myform.Dispose() End Sub プログラム経験が浅い為、対処方が解りません。 どうか、御教授御願い致します。
異なるスレッドで作成されたFormをOwnerにしようとしない。 どうせモーダルにしたいならThreadなんて起こす必要はなくて ownerFormのスレッドでShowDialogしたらいいじゃないか。 具体的にはownerForm.Invoke(...)
904 :
デフォルトの名無しさん :2008/12/12(金) 21:59:33
> InvalidOperationExceptionが発生されました。スレッドセーフな呼び出し方法を教えてください。 > という例外エラー > 教えてください。 > という例外エラー mjd?
905 :
902 :2008/12/12(金) 22:11:50
frmProgressはプログレスバーの表示を行う為のフォームで、
Progressはプログレスバー等の表示状態変化させるためのクラスです。
ownerfom から frmProgressが呼び出され、Progressクラスによってプログレスバーの表示が変化されるようになっています。
frmProgressが呼び出されている間は、ownerfom は操作無効にしたいのです。
frmProgressは、どぼんさんのコードをほぼそのまま使用させていただいております。
ttp://dobon.net/vb/dotnet/programing/progressdialog.html 異なる点は、Showにownerの引数を追加して、
Runの中のshowdialogでownerを指定しているだけです。
VS2003では問題なく動いておりましたが、
VS2005にした時点でエラーとなってしまいました。
御教授御願い致します。
906 :
デフォルトの名無しさん :2008/12/12(金) 22:16:13
もう回答出てるだろよ・・・
えーっと、 どぼん氏の所のコードをそのまま2005で作ってエラーが出るかどうか試してみるところから始めてみたらどうだろうか
908 :
デフォルトの名無しさん :2008/12/12(金) 22:21:46
二次関数のグラフを描画するのってどうしたらいいですか?
フォームに自由に描画する→OnPaintをオーバーライド 線を引く→Graphics.DrawLine これで必要十分のはずだよ あとはVBと直接関係ない
910 :
デフォルトの名無しさん :2008/12/12(金) 22:27:50
あとは、Excel とかを含めてコンポーネントを使うか、だね。
>異なる点は、Showにownerの引数を追加して、 >Runの中のshowdialogでownerを指定しているだけです。 それが致命的なわけだ。 まあ2005でもデバッグ実行じゃなければ動くだろ。 どっかでおかしくなってても知らんが。
まあついでに言っとくと本当は重い処理の方を別スレッドで、 プログレス表示を元のスレッドでやるべき。
913 :
デフォルトの名無しさん :2008/12/13(土) 02:27:52
DefaultProc = SetWindowLong(oControl.hWnd, GWL_WNDPROC, AddressOf WindowProc) ↑これVB6.0のソースなんだけど VB.NETだとどうかけばいいの? AddressOf WindowProcのところでエラーになるんだけども (ちなみにAPI関数SetWindowLongは↓このように宣言してます) Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
>>913 「方法 : コールバック関数を実装する」で検索
APIを使うんじゃなくて、WndProcをオーバーライドするだけな気がする。
916 :
デフォルトの名無しさん :2008/12/13(土) 09:46:37
Delegate
サブクラス化ならNativeWindowクラス使えってことに
VB2008 Express Editionで教えて下さい 一つのFormに二つのPictureBoxを配置して、 片方のPictureBoxの任意の位置の四角い範囲を もう片方のPictureBoxの任意の位置へコピーする場合どのようなソースになるのでしょう? PictureBox1(x,y,w,h)の領域を→PictureBox2(x,y)へコピーしたいという事です よろしくお願いします
なんでもPictureBoxを基準に考えてはいけない Bitmap.DrawImageを使うんだ
VB2005を使ってれば2008に移行しなくても大丈夫?
921 :
918 :2008/12/14(日) 19:01:57
>919 Bitmapオブジェクトで実現するって事で良いのですか? 元の画像をbitmapに読み込んで、もう一つのbitmapに部分複写で作成 →出来た物をPictureBoxに貼り付ける方向で調べております しかし、VBも随分変わりましたね、オブジェクト思考?の基礎も よく判っていないので、何から調べてよいのかすら判りません Bitmap.DrawImageをキーワードに更に調べてみます ありがとうございました
922 :
デフォルトの名無しさん :2008/12/14(日) 20:33:42
usingとかいう見慣れないものは必要ないんだべ
ファイルサーバー上のファイルのタイムスタンプを取得するにはどうすればいいのでしょうか? ローカルのファイルは System.IO.File.GetLastWriteTime(FILE_PATH) で取得できるのですが、ファイルサーバーにアクセスするにはユーザー名とパスワードが必要なため どのようなコードを書けばよいのか分からないのです。
自己完結乙
ああ、割り込まれた!
>>924 。
ファイルサーバーじゃ抽象的でわからん。
もっと具体的に。
>>926 ファイルを置くためのサーバーで、普段はFFFTPというソフトでファイル転送を行っているのですが
その際の設定は
「ホストの設定名」→任意
「ホスト名」→192.168.x.xx
でユーザー名とパスワードを指定するという感じです。
FTPじゃん!
>>928 よくわかっていないのですが、WNetAddConnection2でドライブ名を割り当てて参照するようにすればいいのでしょうか?
FILE_PATH = "\\192.168.x.xx\home\foo.txt"
System.IO.File.GetLastWriteTime(FILE_PATH)
みたいな感じでドライブ名を割り当てずにできないかとも思っているのですが、ここでユーザー名とパスワードの扱いを
どうすればいいのかわからないのです。
FTP相手ならFTP相手用の方法とる必要がある FtpWebRequest辺りか
って共有フォルダにできるの?
まったく別物。 共有フォルダ VB.Net あたりでググれば出てくるかと。
>>933 ありがとうございます。
しかし、ググってもVB.netのサンプルが見つからないんですよ。
WNetAddConnection2を使えばいいのでしょうか?
結局、「Windowsのファイル共有」なのか「FTP」なのか判らずじまいという…
Location.Yになんで値を代入できないんだ?
Pointが構造体だから
画面を呼び出すときに表示するフォームの縦横幅と画面幅をとり、窓が真ん中に来るように計算していて、 プログラムを単発で呼び出すとちゃんと動作してくれるんですが、別フォームからmicrosoft.visualbasic.shellで 呼び出して表示すると取ってくるフォームの縦横幅がおかしくなってしまってます、画面幅は正常でした 何か原因に心当たりがあれば教えて頂きたい
939 :
938 :2008/12/15(月) 15:57:32
自己解決しました、原因はshellの第二引数でした
なんのことやら
942 :
デフォルトの名無しさん :2008/12/15(月) 23:05:55
>>934 相手が FTP なら無理。WebDAV ならありなんだけどなw
>>942-943 ありがとうございます。
ファイルサーバーは多分バッファローのNASだと思います。
dosでnetuseを使ってもいけそうな気もするのですが、自宅にはネットワーク環境がないので試せないのです。
今日は時間がとれなくて試せなかったけれど、明日辺り仕事の空き時間に少し試せればと思っています。
フォーム上のパネルに動的にコントロールを追加したいのですが、 スクロールバーが表示されるまで、パネルにある程度追加したあと、 スクロールバーを一番下までスクロールしたあと、コントロールを 追加すると、配置される場所が意図した場所でなくなります。 具体的には下記コードでボタンを連打してコントロールを追加する までは意図通りなのですが、スクロール後、ボタンを押すと間が開いてしまいます。 相対座標がポイントだと思いますが、アドバイスをお願いいたします。 Public Class Form1 Protected WithEvents _AddCtrlButton As New Button Protected WithEvents _Pane As New Panel Protected _LastTop As Integer = 10 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Me.Controls.Add(_AddCtrlButton) Me.Controls.Add(_Pane) _AddCtrlButton.Location = New System.Drawing.Point(0, 0) _Pane.Location = New System.Drawing.Point(0, 20) _Pane.AutoScroll = True End Sub Private Sub AddCtrlButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles _AddCtrlButton.Click Dim Ctrl As New TextBox _Pane.Controls.Add(Ctrl) Ctrl.Location = New System.Drawing.Point(1, _LastTop) _LastTop += Ctrl.Height + 2 End Sub End Class
パネルの(0, 0)はいつも「今表示されている」左上。 子コントロールの位置もそこから起算されるから、 スクロールするだけで子コントロールのLocationも変わる。 AutoScrollPositionを考慮に入れないと駄目。
947 :
945 :2008/12/16(火) 20:06:43
>>946 レスありがとうございます。
そういうことですか・・・・
AutoScrollPositionをキーワードに調べてみます。
948 :
デフォルトの名無しさん :2008/12/16(火) 23:41:03
テキストボックスの文字をフォントサイズ変えずに拡大、縮小って出来ませんかね? エクセルの拡大とか縮小のイメージです。200%みたいな。 方法ご存知の方いましたらご教授ください。よろしくお願いします。
949 :
デフォルトの名無しさん :2008/12/16(火) 23:58:14
初心者なんだけど、業務上必要な画像処理ソフトを作成中です。 JPEG画像をWindowsの標準回転機能(90度づつ右や左へ)回転させる機能が作りたい。 ボタンを2つ配置して、@左へ90度、A右へ90度回転としたい。 現状では、ピクチャボックスへ画像が表示されていて、見た目だけはフリップメソッドやらで動くんだけど、ファイルは 更新保存されていません。 JPEGの保存やEXIF情報の書き換えなんかは助力を得ながら完成したんだけど、 なにかヒントになるようなキーワードを教えて貰えませんか? 標準的な機能だとは思うので、神様がいれば参考コードをくださるとホントはありがたいのですけれど・・。
950 :
デフォルトの名無しさん :2008/12/17(水) 00:03:54
>>948 表示だけならいけると思うけど、入力もするの?
>>949 意味がわからん。できないのは回転? それとも保存?
何ができて何ができないのかを明確にしような。
ピクチャボックス内で画像処理ってちょっとお粗末設計すぎないか 簡単にやるなら回転後のサイズのBitmapオブジェクトを新しく作って 回転行列のColorMatrixを作ってGraphics.DrawImageの引数に渡す 本格的にやるならPaint.NETのソースコードをパクるといいと思う
>>950 ありがとうございます。
倍率を変えた状態で入力するかどうか決まっておりません。
表示の方法だけでも教えていただけませんか。
953 :
951 :2008/12/17(水) 00:09:41
何がしたいのかよくわからないけど
>>951 は間違ってたので訂正だけ
ColorMatrix→Matrix
954 :
デフォルトの名無しさん :2008/12/17(水) 00:11:27
>>952 CopyFromScreen() とか使って、イメージを拡大コピーすればOKでしょ
バイナリファイルや作業用ファイルを除いて つまりソースファイルだけをバージョン管理したいんだけど、 どの拡張子のファイルを管理すべきなのでしょうか?
>>954 ありがとうございます。
スクロール可能にしなければならないのでハードコピーでは無理かもです。
957 :
デフォルトの名無しさん :2008/12/17(水) 00:16:33
VSS2005 で確認してみればいいじゃん。
知るかよそんなこと。。 どんな質問だよ
答えられないヤシが書き込む理由を手短に
960 :
デフォルトの名無しさん :2008/12/17(水) 00:21:23
スクロールか・・・ フォントサイズを大きくする形で描画、でいいなら楽なんだけどな・・・ Excel もそういう動きじゃね?
>>955 実行ファイルが出来るbinとobjフォルダを対象外にするだけでいいんちゃうの?
リソースとかも対象外にしたいのかもしれんけど、更新頻度低いでしょ。
管理しても問題ないと思うけど。
963 :
デフォルトの名無しさん :2008/12/17(水) 00:27:16
つーか、何で管理してるか知らんけど、VSS でソリューションを VSS に追加すれば、 自動的にやってくれるんだけどな。
>>959 君「頭悪いなお前」ってよく人に言われるでしょ。
966 :
デフォルトの名無しさん :2008/12/17(水) 00:30:32
>>965 なんで? ソース管理ツールに何を使ってるか言わない時点で、VSS の可能性は
排除できないよ。単に、VSS の使い方をわかってないだけ、って可能性もあるし。
>>509 流れ無視して悪いが、めちゃ吹いたw
確かに起こらないイベントは拾えんなww
俺もあみちゃんは好みだ
>>968 zipファイルは見てないけど
BackgroundWorkerでぐぐれ
流れ無視して質問すまん。 重い処理やってる画面なんかで、 キー入力→コントロール移動(処理)→キー入力とか素早く入力すると、 2回目のキー入力がうまくいかないんで、なんとかしたい。 例 項目1に「ABC」と入力 ↓ 項目2へ移動(Validating処理で時間がかかる。処理中は砂時計) ↓ まだ処理中(砂時計)の状態で「123」とキー入力 ↓ 項目2には「23」と表示され「1」がどこかへいってしまっている。 調べてみたらバッファ?とかいうのが関係するかもしれないことまではわかったんだが、 具体的に何すれば解決するのかわからないんで、どうかアドバイスお願いします。
>>968 メインスレッドで時間のかかる処理しちゃダメ
>>971 のBackgroundWorkerを使うなら
バックグラウンドで別スレッドで処理させるのはそのループ処理の方
>>972 Validation処理がまずいだけなんじゃないの
どう実装しても時間がかかるなら項目ごとに検証せずにまとめてやるとか
974 :
デフォルトの名無しさん :2008/12/17(水) 17:54:13
バックグラウンドワーカー使えばよろし
次の項目の入力に移った後に前の項目に対するエラーが出るのはかなり不自然に感じない?
はぁ? なにいってんの?
VBでテキストエディタを作ろうと思ってるんだが、本かサイトかお勧めくれ
どの程度のものを作ろうとしてるのかによるな 既存のテキストエディタよりも便利なものを作って自分自身で使うとか考えているのであれば テキストボックス貼り付けて終わりみたいなレベルの話じゃないから かなり低いレベルから自分で実装することになる 自分で頑張れとしか言えない
>>978 そうか……地道にやるしかないか。わかった。頑張ってみるわ。
ありがと
>>979 SharpDevelopのソースでも見たらどうだ?
俺は挫折した。
レスサンクス
>>973 Validation処理は仕様とかいろいろ関わってくるからもう一度確認してみる。
検証についてはちょっと触ったことないんで調べていろいろ試してみる。
>>974 バックグラウンドワーカーについて調べてみたが、
処理状態を確認・キャンセルできるイベントが使えるようになる?みたいなことは書いてあったんだが、
どういう風に使うのか理解できんかった・・・すまん
>>981 状態確認とかキャンセルとかMSのサンプルだと確かに分かりにくいですね
長文で申し訳ないですが、下記がキャンセルと進行状況の例ですWorkerReportProgressとWorkerSupportsCancellationをtrueにしてくださ
い使っているのはボタン2とテキストボックス(multiline=true)とBackgroundWorker
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)
Handles BackgroundWorker1.DoWork
Dim cnt As Integer = 0
While cnt < 5
If BackgroundWorker1.CancellationPending Then Return
System.Threading.Thread.Sleep(1000)
cnt += 1
BackgroundWorker1.ReportProgress(cnt)
End While
End Sub
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As System.Object, ByVal e As
System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
TextBox1.Text += "..."
TextBox1.Text += e.ProgressPercentage.ToString
TextBox1.Text += vbCrLf
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As System.Object, ByVal e As
System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
TextBox1.Text += "End Of Thread!!"
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
BackgroundWorker1.CancelAsync()
End Sub
ステータスバーにセパレータを表示させるにはどうしたらいいでしょうか?
セパレータの意味が不明だがステータスバーパネルコレクションのこと?
間違い メニューです
991 :
デフォルトの名無しさん :2008/12/19(金) 22:34:00
次スレって立ってる?
>>989 フォームに ToolStrip 作って Separator を挿入、
Separator をカット&StatusStrip を選択してペースト。
なんで直接挿入できないかは知らん。
>>991 立ててみる。
ウメ
埋めるか
998
999なら願いが叶う。
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。