すみません。質問です。 VB.NETにおいて、メインメニューから、別のメニューに移る場合の フォームを開いたり閉じたりするコードは、どのようなものをかいたら いいのかを教えていただきたいです。 以前、テキストファイルを開いたり、書き込んだりする際に自分で 調べていると、入出力ステートメント(VB.NETではVB専用関数)を用いる方法と、 ファイル・システム・オブジェクトを使用する方法、それとは別に、 .NET Frameworkのクラス・ライブラリを用いる方法がある。 という感じでいろいろな書き方や概念がある事を知ったのですが、 サンプルコードだけではなく、こういう感じに説明がついているサイトを 教えていただきたいです。 なるべくなら、移植性などを考えると.NET Frameworkのクラス・ライブラリを 用いてのコードがいいのですよね?
「zedgraph」というクラスライブラリを使ってグラフを描写する ユーザーコントロールを作りたいと思っています テストとしてユーザーコントロールを貼り付けたフォームに、 textboxとbuttonを貼り付けて、textboxに入力した値を表示させ ようと試してみたのですが、値が渡っていてもグラフ自体が表示 されません。グラフをリロードさせるためにはどうすればよいの でしょうか。よろしくお願いします。
質問です。
フォームを閉じる
ttp://dobon.net/vb/dotnet/form/closeform.html このサイトを見ていると、アプリケーションを終了する際のコードは、
スタートアップフォームに指定しているフォームにて
Me.Close() と記述するか、Application.Exit() を記述する、
という事ですが、これは内部の仕様の関係でどちらを使った方が良い
というのはあるのでしょうか。
ちゃんと終了できなかった際の事も考えて、こういう記述にしておく方法も
あるのではとか思ったのですが、ここまで終了処理には気を配る必要は
無いのでしょうか。
Me.Close()
Application.Exit()
何度かソフトを起動したり終了したりするたびに、その都度メモリが
圧迫されていくという可能性が気になりましたので。
普通はCloseで十分
プロセスが終了すればメモリは開放される。 気にするな。
>>7 ありがとう御座います
取り敢えずやってみます
>>9 >>10 ありがとうございます。
closeを使ってコーディングしたいと思います。
VBは6から.NETに変わるにおいて大幅な仕様変更&サポートの打ち切りがあり、 さらに、バージョンアップごとに言語の仕様変更がある状況です。 あるソフト開発会社は、これが原因で.NETでの開発は見送り、javaに 切り替える方向で考えている、という方針を聞きました。 VBは、javaなど他の言語に比べて仕様変更が多く、サポート期間が 短い言語なのでしょうか?
そうです C#はむしろそれを売りにしています VBはそれに追従している感じです
>>14 レスありがとうございます。
一つ、念のために確認しておきたいのですが、「C#はむしろそれを売りに
している」というのは、「仕様変更が少なく、サポート期間が長い」という
意味合いでしょうか?
言語仕様を拡張しまくって実用最先端を突っ走るということ
Labelに数値を表示しているのですが、 数値が変化した場合にそれまでの数値より上か下を判断して BackColorを変えたいのですが、どのような方法が良いでしょうか? 前スレ998さんレスありがとうございます。解決しました。
このスレは、テンプレ以外価値のない書き込みばかりですね
>>13 >VBは6から.NETに変わるにおいて だろ
それまでのVB(6以下)と、VB.NETは別物と言っていいほど違う
.NETいちからやるならJavaやるって判断はまああるだろう
VBのサポート期間はかなり長かった
VB.NETの言語仕様の変更ってのはあんまり記憶にない
追加要素ってのはいっぱいあるが、それを変更というならJavaだってずいぶんと変わってきた
え? VB6 は Windows 7 でもサポートされますよ? 何言ってるんですか?
javaだって滅茶苦茶変わってるぞ。
>>17 ラベルの数値が変化した場合に色を変えるのだから、
ラベルの数値を変更する(値を代入する)タイミングで、上か下かを判断し、
BackColorを変えるプログラムを記述する方法が適切だと思います。
なんらかの理由でラベルの値が取得できない(表示が文字であるなど)
のであれば、そのフォームのメンバ(数値型変数)にそれに格納し、
その値で判断するしかないでしょう。
>>19 >>20 >>21 ご回答ありがとうございます。
java の場合も、リファレンスには、使用が推奨されないクラスが結構
ある事から、言語の仕様変更は多くあることが推測されます。
検索してみると、Win7でもVB6がサポートされるということでした。
ありがとうございました。
ハードウェアの性能と共に技術的な需要が変わっていくので
仕様変更は仕方が無いとしても、その言語のサポート期間が
気になっていましたが、VBの方もOSが変わってもサポートが続いて
いますので、それでの開発も問題なさそうですね。
開発環境はもうサポート終了だけどな
なにぃ〜
セキュリティパッチも提供されないけどな
そんなもんどうでもいいよ VB6プログラマがプログラム自体に作りこんだセキュリティホールのリスクの方が遥かに大きい
?
セキュリティホールなんか誰でもいくらでも作れるじゃん 何もおかしくないけど
Multimedia Fusion 2が来月発売されるらしい。
マウス操作だけでゲームを制作できるソフト。
プログラミングの知識がなくても、RPG 、シューティング、アクション、パズル、
アドベンチャーなどほぼすべてのジャンルのゲームを制作できる。
作ったゲームを Windows で動作する実行ファイルに変換したり、
Web ブラウザで動く Java アプレットとしても出力可能。
OS 問わずに実行できる Java アプリに変換にすることもできる。
願わくば、豊富な時間に恵まれて、
これからプログラミングを始めようとしている諸君らが、
プログラムの勉強を思いとどまってくれますように。
http://www.forest.impress.co.jp/docs/news/20091120_330540.html >“Multimedia Fusion 2”は、豊富に用意されたオブジェクトをマウス操作で
>配置していくだけでゲームを制作できるソフト。キャラクターの動きなども、
>あらかじめ用意されたコマンドを組み合わせるだけで表現可能。
>プログラミングの知識がなくても、RPGやシューティング、アクション、
>パズル、アドベンチャーなどほぼすべてのジャンルのゲームを制作できる。
>製品版では、制作したゲームをWindowsで動作する実行ファイルへ変換できるほか、
>Webブラウザーで実行できるJavaアプレットとしても出力可能。
>Mac OSでも利用可能なJavaアプリケーションへ変換することもできる。
2回同じ内容を書いているところあたりで、頭が悪そうな印象を受けた。
どなたかDelegateとInvokeの考え方を噛み砕いてもらえませんか?
VS2008のVB環境ですが理解しようと苦心しています。
いくつかサイトを見て
http://634.ayumu-baby.com/vb/vb_delegate.html とかは他よりかなり判り易い気して
「利用方法」部とかは判った気にはなるのですが
「サンプルコード」でコンストラクタ?何するPG??となり
最初からしっかり読もうと最初の「デリゲートとは」の部分で
関数ポインタ?委譲(コンポジション)??
とか、実際にコードを作るまでには至らない状況です。
ドラクエに例えて..とかとかネタで言いたい気もするんですが
なんかこの部分の考え方みたいなモノをどなたかレクチャーしてもらえないでしょうか?
助けて下さい、よろしくお願いします。
コンストラクタで疑問符が出ちゃダメだろう そこはデリゲート以前だ
まずクラスとかのオブジェクト指向関係をきちんとりかいしないとダメ その上で、デリゲートやイベントについては本当の意味で理解するにはデザインパターンも必要かも
VB.NETの場合、通常はCallを記述したりしないのが流儀なんでしょうか
>>39 流儀ということは無いと思う。
ま、場合によっては複数人でそのコードを書く場合、引継ぎを考えて
そういったルールを設ける場合もあるかもしれないけれど。
もしエラーが起きた場合、どこで起きているかを確認する為、
必ず返り値を取得し、確認するというルールがあるというのも
きいたことはある。
例外使ってれば全く不要だけどな
何でもかんでも例外投げてりゃいい、ってもんじゃないけどな。
まあVB6のようにCallの有無で機能が変ったりしないからね。 意味のないものをわざわざ記述する意味は通常ないだろう。
&H00としたいんだけど&H0に変換されてしまう &H0=&H00で合ってる?
うん。
ありがとう!
1秒ごとにタイマーでデータを更新してラベルに数値を表示するようになっているのですが、
文字を変更する際に、数値が変更前より上か下かでラベルの色を変えているのですが、
3秒後に元の色に自動的に戻るようにしたいのですが、どんな方法が良いでしょうか?
3秒未満にまた色の変更があったらそこからまた3秒をカウントしたいです。
たくさんのラベルの色を戻す処理が重なっても負荷が少なく、
フォームがフリーズしたような状態にならないようにしたいのですがどんな方法が良いでしょうか?
>>23 さんありがとうございます。
>>47 メンバ変数か静的ローカル変数でカウンタ持ってタイマーのイベントが動く毎にカウントアップ
3回目が来たら色を元に戻せばいんじゃないかな?
途中で色が変わったらカウンタをクリアすればいいし
フォームを止めたくないならDoEvents書くかワーカスレッド作るとか
初心者なんで見当違いだったらすいません
というわけで質問させて下さい。
開発環境 :VB2005EE
データベース : SQLSERVER2005EE
接続はSqlClientを利用しています。
データベースに20万件の初期データを生成するのですが
処理開始から終了まで平均して5分ほどかかります
大雑把に処理内容としては、SqlConnectionで接続して
SqlCommandからInsert文をパラメータ差し替える形で発行します
課題として提出したらもうちょっと早くなるようにしてみてと
言われてしまい途方にくれています
やはり作りが問題なのでしょうか?
こういった場合どうするのが一般的なのでしょうか?
また、あくまでVBから実行するようにとのことでストアドプロシージャは
使えません
微妙な内容で申し訳有りませんが宜しくお願いいたします
まずは、どこに時間がかかってるのか確認することだな。 ファイルに吐きだして、BCP で突っ込む、ってのが一番速そうだけど。
こんな感じのコードなんですけど。Tryで囲んであるのに異常が起きた場合 「WiimoteException はハンドルされませんでした。」のダイアログが出るです。 exをExceptionにしてもcatchされずに↑の例外ダイアログが出るです。 どうなってるの? Try ' Wii リモコンに接続する wiimote.Connect() Catch ex As WiimoteException MessageBox.Show(ex.Message) End Try
Connect呼び出し以外で投げられてんじゃね?
たぶん別スレ
そのライブラリ?がマルチスレッドでふぁ
ほんとにそこで例外が発生してる?
本当にそこで発生してます。 wiimote.Connect()にブレークポイントして調べた。
そういう問題ではなかろう…
>>56 ブレークポイントしたらどうなったんだ?
普通に考えれば有り得ない気がするんだが。
ちなみにキャッチブロックにブレークポイント仕掛けても止まらないんだよね?
DLLの中って落ちだろ
>>60 オチというか、たぶんそうだろうねえ。
ならそのまま[F5]押して継続すれば何も問題ない。
プログレスバーをオーディオのレベルメーターみたいに3色にしたいのですがどのようにやれば良いでしょうか?
プログレスバーにはそんな機能ないから、自作するしかない。
プログレスバーを元に改造?することはできますか? ゼロから自作ですか?
ゼロからじゃね?
改造できるにしてもゼロから作った方が圧倒的に早いのは確実
.NET のプログレスバーは、Windows コモンコントロールのプログレスバーをベースにしてる。 ベースの方でそういう機能がないので、改造は面倒だろうね。 いちから作っちゃった方が早いと思うよ。
そうですか 作ると言ってもまるで状況が想像できないのですがすごく難しそうですね ボタンでも無理そう><
数が固定なら簡単だろ? [][][][][][][][][][][][][][][][][] みたいに四角を描画していけばいいわけだ。左から、緑・黄・赤で塗りつぶすと。
その前の段階も良くわかっていません。 WindowsControlLiblaryというプロジェクトを開いて フォームの枠(コントロールを何も置かない状態のフォーム)みたいなのを レベルメーターみたいにしようと思ってやっているのですが、ここまではあってるでしょうか?
いやカスタムコントロールの方を使う いま君が開いてるのはユーザーコントロールだけどどうせデザイナ使えないから意味ない
カスタムコントロールで調べてみます。 ありがとうございます。
コントロールとして実装する前に、フォーム上でできるようにしてみるほうがいいんじゃね? できてから、コントロールにすればいいし。
まあ挫折するだろうな オーバーライドとかわかってないだろ
もう挫折してました 誰かが作ったのを探し始めてた;(vb レベルメーター コントロール 検索とかw 既存のプログレスバーのコードは見れないでしょうか?
未公開 見れても読めるとも思えないけどな、C言語だろうし
あ。VB4 って書いてあるな。
2002年にこんなもん出したのか アホだな
>>62 暇だったからサンプルコードを書いてみたよ。
ただ、手間だからLED状のブロック表示は諦めて単純な塗りつぶしにして手を抜いてある。
これなら意外と簡単でしょ?
Public Class LevelIndicator : Inherits Control
ReadOnly GreenZoneColor As Color = Color.Green
Const YellowZoneThreshold As Double = 60
ReadOnly YellowZoneColor As Color = Color.Yellow
Const RedZoneThreshold As Double = 90
ReadOnly RedZoneColor As Color = Color.Red
Private mPercent As Double = 0
Public Property Percent() As Double
Get
Return mPercent
End Get
Set(ByVal value As Double)
value = Math.Max(0, value)
value = Math.Min(100.0R, value)
If value <> mPercent Then
mPercent = value
Me.Refresh()
End If
End Set
End Property
Private Function PercentRangeToRect(ByVal percentFrom As Double, ByVal percentTo As Double) As Rectangle
Dim left As Integer = CInt(Me.Width * percentFrom / 100)
Dim right As Integer = CInt(Me.Width * percentTo / 100)
Dim width As Integer = right - left
Return New Rectangle(left, 0, width, Me.Height)
End Function
* 80続き * Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) MyBase.OnPaint(e) Dim g As Graphics = e.Graphics Dim greenRect As Rectangle = PercentRangeToRect(0, Math.Min(Percent, YellowZoneThreshold)) Using br As Brush = New SolidBrush(GreenZoneColor) g.FillRectangle(br, greenRect) End Using If Percent >= YellowZoneThreshold Then Dim yellowRect As Rectangle = PercentRangeToRect(YellowZoneThreshold, Math.Min(Percent, RedZoneThreshold)) Using br As New SolidBrush(YellowZoneColor) g.FillRectangle(br, yellowRect) End Using End If If Percent >= RedZoneThreshold Then Dim redRect As Rectangle = PercentRangeToRect(RedZoneThreshold, Math.Min(Percent, 100)) Using br As New SolidBrush(RedZoneColor) g.FillRectangle(br, redRect) End Using End If Dim rect As Rectangle = Me.ClientRectangle rect.Width -= 1 : rect.Height -= 1 g.DrawRectangle(Pens.DimGray, rect) End Sub End Class
おおーすごい! 早速やってみます!ありがとう!
動いたーー!! 完璧すぎてすご過ぎ ありがとう!!!!!!!!!!!!!! さっそくLEDみたいにするのをやってみます。 感謝!感謝!
なんという甘やかし・・・
ここは暇つぶしにプログラムするお題を探すスレになりましたw
>>48 場合によっては具体的なコードをここでさらして、処理過程を見直した方が
良いと思います。
DataTableを使ってまとめてupdateをしてみた場合はどうなのかとか、
いくつか実験をやってみてはいかがでしょうか。
質問です。 フォーム上にいくつか連名でオブジェクト(テキストボックス)を配置し、 その各テキストボックスにアクセスする場合のコードの書き方を教えて下さい。 AccessVBAだと、以下のような感じにコードを書く事が出来ますが、VB.NETだと me(....)を書いた時点でエラーが表示されてしまいます。 dim str1 as string dim i as integer str1="textbox" i=3 me(str1 & i)="a" ループで処理をしたいので、こんな感じにコードを書きたくない場合の話です。 textbox3.text="a"
CType(Controls(str1&i), TextBox).Text = "a" みたいな感じでできる気がするけどあまり褒められたものではない VBAとは全く別の言語だからVBAではどうとかいう考え方は捨てた方がいい
>>88 すばやいレスありがとうございます。
早速コードを書いて試してみたところ、動作しました。
VBAとは別の言語であるという考えで勉強していこうと思いますが、
一つだけ追加で質問させてください。
VB.NETの場合は、フォーム上にテキストボックスをたくさん配置して
おいて、それらを一括ですべてクリアにするとか、値を取得して
配列に格納するとかいう場合、以下のようなコードを書くのが一般的
ということになるのでしょうか。
Me.TextBox1.Text = "a"
Me.TextBox2.Text = "a"
Me.TextBox3.Text = "a"
Me.TextBox4.Text = "a"
Me.TextBox5.Text = "a"
・
・
・
VBAのフォームってこんなデタラメなことが出来たんだw フォームの既定のプロパティなのかな? こんなことができて嬉しい場面が思い浮かばないが・・・
配列作る
配列だな
>>90 コードが少なくて済むというメリットがあると思います。
>>91 >>92 配列とは、どのような意味なのでしょうか?
TextBoxに格納する文字列を、TextBoxとは別に配列を宣言し、
それに格納しておいて・・・その後の処理をどうしたらいいのかの
イメージがつきません。すみません。
>>94 配列っていうのは本当はいい答えじゃない。
要は何らかのコレクションになっていれば、そのコレクションが含んでいるアイテムを
「一括ですべて(まとめて)」操作することも出来るでしょ。
例えばVBのコントロール配列だって、君の書いているVBAのMe(コントロール名)だって
そういうアイデアだよね?
要はそのコレクションを自分で用意すればいいってこと。
それはList(Of T)だったり、Dictionary(Of TKey, TValue)だったり、
ただの配列だったり、目的に合わせて適切なものをね。
>>95 レスありがとうございます。
となると、VB.NETの場合は、必ず以下のような関数を作らないといけなく
なってくるという考えでよろしいのですよね?
・格納する配列の内容をフォーム上のオブジェクトに反映する。
・フォーム上のオブジェクトの内容を配列に格納する。
VBAでは、直接フォーム上のオブジェクトを操作していたので、
VB.NETのこの、つなぎを行う処理を書かなければならないという
考え方にはちょっと違和感を感じますが、慣れる様にしたいと思います。
そもそもまとめて操作する機会なんてそんなにあるか?
VB.NET でも、Controls コレクションって用意されてなかったっけ?
コントロールそのものをコレクションに入れてもいいけど 一般にはクラスやコレクションでデータだけ別管理にした方がUIと分離できて良い方法 VBAだろうと同じ
>>97 全般的に言うと少ないとなるでしょうね。しかし、似たようなコードを
たくさん書かないといけなくなったりすると、何とかならないかなと
おもったりするんですよ。
>>98 詳細をお願いします。
>>99 確かにMVCモデルという言葉があるように、データと表示は分離した
作り方をした方がいいと思いましたが、型指定されたDataSetみたいな
便利機能がないのが、今のところひっかかっています。
(プログラムをしていけば、慣れていくのだと思いますが)
DataTable作って各TextBoxバインドすれば 一括クリアーも配列への格納も楽だよー
型付きデータセットなんて、この文脈じゃまったく関係ないだろうに。 頭でっかちになる前に、手を動かせよ。
IExtenderProvider実装してやればいろいろできる。 グループ名プロパティ提供してグループ名で一括操作とかな。
>>104 私は、コードを書くよりも、いろいろ考えすぎてたようです。
もっといろいろなプログラムを作る事に集中します。
>>105 私の知識不足で、直感的にどのような操作なのかがイメージ出来ません
でしたが、出していただいたキーワードを元に検索などかけて調べて
みます。ありがとうございます。
>>106 とりあえずブログラムは経験だから頑張れ
すみません、質問です。 VB.NET Express のコントロールには、Lineなどというものはないのでしょうか。 フォーム上に、区切りとして、単に線を引いたり、枠線を描いたりしたいのですが。
labelで代用してる
VB系の拡張コントロールが提供されてなかったっけ? Lineとかそういうのが使えるやつ。
>>109 レスありがとうございます。
線や四角を描く部分をlabelで代用する場合、具体的にプロパティはどのように設定したら
よいのでしょうか?
BorderStyle を FixedSingle にするとラベルに枠が出来るというまでは思いつくの
ですが、その後、線にしたり、任意の大きさの四角にする部分が分かりません。
PowerPack だな。
Dim NewPen As New System.Drawing.Pen(System.Drawing.Color.Black) Dim FormGraphics as System.Drawing.Graphics FormGraphics = Me.CreateGraphics() FormGraphics.DrawLine(NewPen, 0, 0, 300, 300) NewPen.Dispose() FormGraphics.Dispose() こんな感じで無理だっけ?
かなり早く、多くの回答ありがとうございました。
>>110 >>112 拡張コントロールを使うんですね。
>>113 出来れば、フォーム上のオブジェクトとしてマウスで操作する
方法で配置したいと思っていたのです。
もし、その方法が無理であれば、紹介していただいたコードを書く
方法を使うしかないでしょうね。
>>114 >>115 labelで代用する場合は AutoSize を false に変えたらよかったのですね。
上手くリサイズが出来なくて苦労してましたが出来ました。
紹介していただいた@ITのサイトも見てみます。
イベントプロシージャーの外に宣言した Dim num As Integer という変数をTextBoxなどのように変更のイベントを発生させるにはどのようにしたら良いでしょうか?
無理。
>>117 その変数を自分で変更したら自分で定義した好きなイベントを発生させる
これを翻訳するとどうなりますか? Vector3[] vertexs; vertices = new Vector3[vertices.Length];
知らんがな。
DirectXかXNAかなんか? そんなの自分で調べられないと絶対無理だよ C#どころかC++も読めないと厳しい
2chスレッドのレス抽出をするプログラムを作ろうとしています。 URLからスレッドのHTMLを取得することはできたのですが、そこからどうすればいいのかわかりません。 プログラムの引数に指定範囲の最小、最大を与えてその範囲内のレスの本文とIDを取得したいのですが。
>120 VBでは無理
>>123 正規表現あたり
.dat取得したほうが解析は楽だと思うけど
>>123 Datファイルを調べれば幸せになれるかも
レスありがとうございます。 Datファイルからの取得のほうが楽そうですね。 Datファイルからの解析となると、Datファイルのパスを取得、レス番に指定範囲行を代入、ID、本文を格納という流れになるのかな。
むかしチャレンジしたが、POSTが分からずに断念した俺登場
ログ読むだけなんでしょ。 投稿するわけじゃないんだから、POSTは関係ないでしょ。
それは設計レベルの問題。 「ソフト作りたいのですが、設計ができません」 じゃ、教えるというよりも 代わりに考えて、といってるようなもの。 作りたいと思ったなら自分で考えろ。
自分で考えるのが嫌なら、既製品を使え。
>>127 ローカルに保存したdatは、テキストファイルをどのような形式で表示
させるかという話だと思う。
テキストファイルの操作について分からなければ、ファイルのopenやら
closeはどうやったらいいのか、といったレベルから勉強しなおした方が
良いと思う。
>>127 とりあえずテキストファイルの操作を学べばおk
すみませんが質問です。 コンボボックスやテキストボックスにて、未入力や未選択、任意に入力内容を 消した状態を確認するコードは、 If Me.TextBox1.Text = "" Then というコードのみでよいのでしょうか?それとも、 If Me.TextBox1.Text = "" Or IsNothing(Me.TextBox1.Text) Then という感じに、null判定も入れておくべきなのでしょうか? 細かいところですが、ある程度はユーザの操作内容を確実に取得できる ようなコードを書いておく習慣をつけておきたいと思い、質問してみました。
コントロールのTextがnullになることは普通ないけど (カスタムコントロールでTextをオーバーライドしてnullを返すような実装にわざとしない限り)、 一応String.IsNullOrEmptyで判断しておけば
>>136 null判定は不要だったのですね。
String.IsNullOrEmpty で判断したコードを書くように
したいと思います。ありがとうございます。
>>139 やはりそうですか。ありがとうございました。
>>140 ちょっとまて
それをFalseにして自分で警告ダイアログを表示すればいいんじゃね
>>140 そもそも 「存在しないパスが指定されたとき警告ダイアログを表示する」
なのに上書き警告ダイアログを表示するってのがよく分からん
>>142 それはおそらくコピペする行を間違えているのだろうw
>>138 OverwritePromptは、TrueかFalseしか指定できないので、それを
設定する方法では出来ない。となるが、
>>141 にあるように、
自作で、上書きしようとしているかどうかをチェックし、
警告ダイアログをMessagebox.Show( で表示すると可能ではある。
なるほど 自分でやればいいのか。ありがとうございました。
俺は質問者ではないが、実際にどんなコードを書いたらいいのかを 調べてたが、自作する場合はダイアログが一旦閉じてしまう方法 しかなさそうだな。(ま、それでキャンセルしたら再度ダイアログが 開くようにすればいいだけともいえるのだが) こんな感じになるんだろうな。 If sfd.ShowDialog() = DialogResult.OK Then If System.IO.File.Exists(sfd.FileName) Then ' filePathのファイルは存在する MessageBox.Show("上書きしてもよか?") End If End If
146 :
デフォルトの名無しさん :2009/11/24(火) 20:30:58
基本的な質問で申し訳ありませんが、お願いします。 一番最初に開くフォーム(Form1)で設定ファイルから値を読込み、それが、 他のフォームにおいても使えるようにしたいのですが、.NETの場合は、 オブジェクト指向言語なので、グローバル変数に値を格納というのは 良くないのですよね? では、具体的にはどうしたらよいのでしょうか? VBAの際は、モジュールを追加して、global 〜〜って感じに 変数を宣言すればよかったのですが。
Timerイベントで一秒に一回ファイルストリームに1行ずつ書き込んでいるのですが、 同じ時間が重複して書き込まれることがよくあるのですが、これは何が原因でしょうか?
>>146 public 変数 as integer
こんな感じでいけた気がする
>>147 >>147 >Timerイベントで一秒に一回ファイルストリームに1行ずつ書き込んでいるのですが、
ファイルストリームに書き込むとは?
>同じ時間が重複して書き込まれることがよくあるのですが、これは何が原因でしょうか?
現在の時間を書き込むってこと?kwskお願い
150 :
149 :2009/11/24(火) 20:52:44
ミスったorz
>>146 オブジェクト指向言語だからってオブジェクト指向で書く必要はない
オブジェクト指向する気ないんだったら
>>147 で十分
本当に勉強する気があるならJavaでもやった方がいい
>>149 一秒ごとに変化するデータを時間と一緒に書き込んでいます。
今日日中は無人でパソコンを使いながら実行していたのではないのですが
確認したら重複がたくさんありました。
>>149 ファイルストリームに書き込むというのは
StreamWriterのWriteLine(Str)という方法です。
連投スマソ
System.Windows.Forms.Timerは不正確だから呼び出し間隔を当てにしてはいけない
155 :
149 :2009/11/24(火) 21:12:54
>>153 ああ、そういうことね
Timerはそんなに正確じゃなかった気がするよ
了解です。 時間がとんだ時に取り戻すように同じ時間を書き込んでいる感じなのですが、 これはパソコンの速度の限界なので回避しようがないでしょうか?
157 :
149 :2009/11/24(火) 21:24:26
>>156 パソコンの早さはあまり関係ないと思う
ライブラリ自体が不正確だったかな
System.Threading.TimerかSystem.Timers.Timerを使えばかなり精確 どちらも別のスレッドで呼び出されるから扱いには注意
試してみます。 どうもありがとうございました。
ここにvbNullString vbNullChar ""の違いを説明できるヤシは居ない予感
vbNullStringはただのNothing vbNullCharは0 ""は空のStringオブジェクト
162 :
149 :2009/11/24(火) 22:27:06
>>148 >>151 レスありがとうございます。
オブジェクト指向する気が無いコードの書き方があるのも
分かりましたが、もし、オブジェクト指向する気がある場合だと、
どういう考え方になるのでしょうか?
値が格納されたクラス(もしくは構造体)を設定し、そのインスタンスを
Form2がopenする際に渡すという考え方になるのでしょうか?
まあそうするのがいいと思う あと特別な理由(主にパフォーマンス)がなければ構造体は使わずクラスを使う
>>162 逆に素直に教えてクン丸出しで質問してもググレカスと返される
あえて煽ったり釣ったりした方が、適度なマジレスが的確に返ってくる
度を越すと誰にも相手されずにおじゃんだけどな !
>>165 わけのわからんかけひきはしなくていい。
>>163 いやいやそんなタコ足配線みたいなコードはOOPしようがしまいが
普通のセンスをしてれば「やりたくない」と思うはず。
冷静に考えてみ?
どうして他のフォームの設定値を"Form1"が管理するの?
なんでその設定値を必要とするフォーム自身で管理しようと思わないの?
その方がずっとわかりやすいじゃない。
考えるより体で覚えろ
何も考えずに走れ!!!!
.NETフレームワークって実は内部でWIN32APIをうごかしてる?
まあそりゃWindowsとの対話は基本Win32API越しにするもんだからな
昔はDOSやPOSIXやOS/2のAPIも聞いてくれたけどな
174 :
デフォルトの名無しさん :2009/11/25(水) 15:14:02
WindowsサービスにIPCサーバーさせてるんですが、IPCクライアントから接続すると、 「IPCポートに接続できません。アクセスが拒否されました。」と出ます。 TCPの時は問題なかったのですが、IPCだとACL設定がいるようで、その方法がわか りません。 誰にでもアクセス許可させたいんですが、どのようにACL設定したらよいのでしょうか。 下記のようにしてダメでした(すいません、C#です...)。 SecurityIdentifier allUserSid = new SecurityIdentifier(WellKnownSidType.WorldSid, null); DiscretionaryAcl dacl = new DiscretionaryAcl(false, false, 1); dacl.AddAccess(AccessControlType.Allow, allUserSid, -1, InheritanceFlags.None, PropagationFlags.None); CommonSecurityDescriptor securityDescriptor = new CommonSecurityDescriptor( false, false, ControlFlags.GroupDefaulted | ControlFlags.OwnerDefaulted | ControlFlags.DiscretionaryAclPresent, null, null, null, dacl); App.configに何か書くサイトもありましたが、Expressで空のプロジェクトから自前でW indowsサービスにしたので、App.configがなく、自前で下記を追加したら「'application' のスキーマ情報が見つかりませんでした。」と怒られました。 <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.runtime.remoting> <application> <service> <wellknown mode="SingleCall" type="Server.MyRemoteObject, Server" objectUri="MyRemoteObject.rem" /> </service> <channels> <channel ref="ipc" portName="MyIpcChannel" authorizedGroup="Users"/> </channels> </application> </system.runtime.remoting> </configuration> どうしたらよいのか教えてください...
175 :
361 :2009/11/25(水) 16:20:34
>>174 スレ違い
C# の質問スレの方がいい答えがかえってくるはず
現在オセロ作っていまして 石を置くときにクルッと一回転させてから置くような感じの効果を付けたいのですが どのように考えればいいんでしょうか? よろしくお願いします
3Dでモデリングとか考えてないなら、 何枚か回転途中の絵を用意しといてタイマで絵を切り替えながら描画する
178 :
176 :2009/11/25(水) 17:29:18
あ、石は単純に円で表現してます 本当は円柱で描きたかったのですがそちらの方もやり方がわかりませんでしたので・・・ では改めてよろしくお願いします
181 :
176 :2009/11/25(水) 17:32:24
補足書いてある間に回答がきててすれ違いになってしまいました
>>177 、
>>179 両方のやり方で作ってみて見た目が良かった方でいこうと思います
どうもありがとうございました
182 :
176 :2009/11/25(水) 17:35:03
これまたすれ違いに・・
>>180 早速取り入れてみます
ありがとうございました
WebRequestとWebResponseクラスを使ってサイトにアクセスしているのですが、 HTMLソースをString変数に読み込んで、内容を正規表現で調べているのですが、 mshtmlクラスのように、GetElementByTagNameなどのメソッドで データの取得や設定が簡単に扱えるようにするにはどんな方法でやれば良いでしょうか?
標準では用意されてない
DOM やりたいなら、mshtml で読み込めよ。
レスありがとうございます。 DOMというのですか。この方法はAxWebBrowserを使う時の方法しか知らないのですが、 WebRequestとWebResponseクラスを使った方法でも使うことが出来るでしょうか? ヒントでも良いので方法を教えて頂けると助かります。
すいません、質問です。 (VB.NETというよりも、IDEに関係する話かもしれませんが) プロジェクトを作成し、プログラムを実行すると、ディフォルトでは Debugにexeが格納されますが、このexeのみを別のPCへコピーして 実行してみる事に問題はありますか? 基本は、インストーラーを作成して・・・となるのでしょうが、 私が作っているプログラムの規模が小さいのもあり、この操作方法で 今のところうまく行っているのですが、これによってどういった不具合が 予測されるかが良く分からない状況です。 どういう問題や不具合が起きると考えられるのかを教えて下さい。お願いします。
189 :
174 :2009/11/26(木) 07:44:24
>>175 了解しました。
ありがとうございます。
それで動くんなら問題ない。 マナーとして、debug ビルド版じゃなくて、release ビルド版の方を 配布した方がいいかもしれんが。
どっかに、汎用の「遺伝的アルゴリズム」のソース落ちてないですか?
>>188 Debug版は配布すべきでない。
単にDebug.WriteLineなどのログ情報が必要なだけなら、
ReleaseビルドでDEBUG定数の定義を追加すればよい。
>>188 外部ツール使ってなければ
気にするのはFrameworkのバージョン位だな
3.xが入ってれば
明示的に2.0入れなくても動くんだっけ?
>>188 Debugビルドの方が、Releaseビルドより容量が大きくなることがあるんじゃなかったっけ?
Debug用の情報が含まれるとかなんとかで。
ほとんど変わらんかったと思う。 でかいのはあくまでpdb。
pdbって何なの? ちょこっとプログラム組んだだけで、 ものすごいサイズのpdbファイルができることがあるんだけど・・・
どうやってデバッガがソースファイルや行位置やその他諸々を理解してると思う?
「pdbファイル」というキーワードを自ら出しておきながら ググれないとか、もうね。
>>187 ありがとうございます。
ほとんど意味がわかりませんがまた調べてみたいと思います。
VBはDebug.Break()ないのけ?
System.Diagnostics.Debugger.Break()
なんか俺みたいな初級者が「開発」なんて言葉こっぱずかしくて使えない
関数の戻り値で配列をReturnで返すには1行で書くにはどう書いたら良いですか? Function Hoge(hoge As String) As String() Dim res(1) As String res(0)="hoge" res(1)="hoge2" Return res End Function と書かずに Return {hoge,hoge2} のように書きたいです。
Return New String() { hoge, hoge2 }
Standard以上ならVisualStudioのImageLibraryにあるかもしれんが そうでなければ勝手に使うのはライセンス違反になる気がする
210 :
188 :2009/11/27(金) 07:51:56
debugのexeの質問へのレスをしていただいた方々、ありがとうございました。 なにやら、別の方が割り込んできている様子でしたので念のために断って おきますが、私は質問の投稿しかしていませんでしたので、それ以外の質問は 別の方だと思われます。 今のところ、特に凝ったものを使ったりはしていないのと、細かいレベルで プログラムの修正がある関係から、とりあえずは release ビルド版の配布を 行うようにしておきたいと思います。 ありがとうございました。
別にdebugビルドをリリースしてもええよ 細かすぎんだよプログラマは
質問です。 私はやっと、VB.NET Express Edition をある程度使いこなせるように なった者です。 このエディションだと印刷機能が低く、Line関数で座標を数値で 指定しながら程度しか帳票を作ることが出来ないようですが、 コストもある程度考えながら、保守性や生産効率性を考えた上で 帳票を作りたい場合は、どのような方法を取るケースが多いのでしょうか? 上位エディションや、Grapeなどのサードパーティー、Accessを使う方法など いろいろあるようですが、それらをそろえるには資金的な壁がありましたので、 ちょっとここで聞いてみたいと思いました。
ActiveReportsとかCrystalReportsとかが一般的だが要は金がないんだろ WordやExcelをCOM使って帳票の代わりにするとか検討してみれば 小規模であれば差込印刷とかで、アプリ側はCSVだけ作成して 帳票の印字調整はあらかじめWordに設定しておくとかすれば工数も掛からんだろ 後は時間と知識があるなら帳票コントロールの自作とかかね
iText.netがいいよ
215 :
212 :2009/11/28(土) 19:15:06
>>213 >>214 情報提供ありがとうございます。
出していただいたキーワードをもとに調べてみます。
自アプリのメッセージボックスをプログラムで消す(キャンセルを押す)にはAPIでハンドルを調べてAPIでメッセージを 送るという方法しかありませんか?
MessageBoxTimeOutA/W
プログラム側で勝手に「消す」ようなメッセジーボックスなら 最初から表示しなけりゃいいのに。 時限で自動的に閉じる、みたいなことがしたいのかもしれないが、 それならそういうメッセージボックスクラスを自分で作ればいい。 少なくとも俺はそうした。 別にたいした手間じゃない。
レスありがとうございます。 MessageBoxTimeOut で検索したらサンプルが出てきたので今回はそれを使ってみます。
Dim gyo As String Dim moji As Char Dim sr As New System.IO.StreamReader(Opendonfile.FileName, System.Text.Encoding.Default) '読込みモードでオープン Do Until sr.Peek = -1 '最終行が終わるまで繰り返す gyo = sr.ReadLine 'gyoに行を読み込ませる mojisu = gyo.Length '行の文字数をmojisuに代入 For count = 0 To mojisu Step 1 moji = gyo.Chars(count) MsgBox(moji) Next Loop 1行目までは行くんですが2行目に行くときに moji = gyo.char...の文で「IndexOutOfRangeExceptionはハンドルされませんでした」と出るのですがどうすればよいのでしょうか?
Lengthは文字数を返す ForはToで指定された値まで繰り返す 例えばLength=3だったとして、For 0 To 3 は何回繰り返す?
なるほど、文字数より1つ大きい値まで指定してしまったんですね。 ありがとうございました。
すみません、質問です。 クラス(DataBox)をコーディングにおいて、そのクラスの設定状況によって 別の値を取得できるかどうか、変更可能かどうか、などの動作を行うように したいと思っています。 このような動きにする場合は、プロパティでは不可能で、メソッドにて 行うということでよろしいのでしょか? イメージ的にはこんな感じです。 IF mSettei = 1 Then return mColor; Else return False; ' もしくは例外を返すとか End IF
プロパティでは「不可能」ではなく、「不適切」でした。 質問したいのは、プロパティとメソッドの使い分けの考え方の部分です。
よくわからんが…状況によって、どういう型を返すか解らんよ、ってこと?
>>225 ある状況であると、値をちゃんとかえす。
べつな状況であると、値を返さない。
という動きにしようと思っているのです。
箱が閉じて鍵がかかってデータが取れない状態と、
空いていて、データが取れる状態の二つの動作を
持たせようと思っているのです。
もしかすると、このような設計をすること自体が
間違いなのかもしれません。
箱が空いていてデータが取れるかどうかの区別は
DataBoxを使用する側の方が制御するべきなのかな?
1. 値を返せるかどうか 2. 値そのもの の2つを同時に戻したいなら、 A. 「Function Get〜(ByRef 戻り値) as Boolean」として 戻り値へ値をセットしたかどうかを返す。 B. 「Property 〜() as Nullable(Of 型)」として、返せないときは Nothing を戻す。 C. 戻り値の型が参照型なら Nothing を、値型なら (もしあれば) その型の Empty 値を戻す。 D. (プロパティだろうとメソッドだろうと構わないが) 別々に戻す。
>>226 それはダメ
Getで失敗させるのはMSのガイドラインに違反する
処理に時間がかかる大きな変数を関数に渡して その後すぐにその変数を書き換えた場合おかしな動作になりますか?
ならんよ。
了解です。
>>226 値を返さない仕様では無く、nullpoを返すとか0や有り得ない数値(時間の分なら59以上とかマイナスの値)を返す様にするんじゃないかな。
For Each Str As String In ????? で、ListViewのSubItem(3)をStrに入れるにはどのように書けば良いでしょうか?
> ListViewのSubItem(3) とかいう謎の言葉は良くない ListViewの各アイテムの4列目を列挙したいってこと? ならListView.ItemsをFor EachつかってListViewItem列挙して それのSubItems(3).Textを取得する
235 :
226 :2009/12/01(火) 11:21:31
みなさん、親切にご回答ありがとうございました。
>>227 「値を返せるかどうか」と「値そのもの」を、同時に一つのもの
として処理をするように考えるのではなく、別のものとして
処理するように考えれば良いのですね。
>>228 Getで失敗させてはいけないという設計は知りませんでしたが、
納得はいきました。Getを使用する際は、いちいち Try 〜 Catch 〜 は
使用しませんしね。
>>232 「値が返せない」状況の場合は、例外よりも、0などを返す
方向で設計するとよさそうですね。
そのクラスを使うプログラムの方は、例外を取得するのではなく、
ちゃんとした値だったら・・・0だったら・・・という
プログラムになるのですね。
>>235 エラーコード返すんだったら例外と変わらん
プロパティはあくまでフィールドのように振舞うべき
素直にGetHogeみたいなメソッドにしたほうがいい
>>236 レスありがとうございます。
クラス設計を行う場合、カプセル化の実現の為、必ずSetter/Getterを設定し、
外部のプログラムは、フィールドを直接操作しないような方向で考えるべきと
されていますが、VB.NETでは、そのあたりの必要機能すべてをプロパティにて
網羅している、と解釈してしまっていたところで、間違った解釈につながって
しまったようです。
純粋にフィールドの値を代入したり取得したりする場合のみ、プロパティを
使用する。そして、(オブジェクトの状態により振る舞いが変わるなど)
条件付きでデータを取得したり設定したりする場合は、メソッドを作る。
という考えでいるべきなのだなと思いました。
外からフィールドのように見えればいいんであって、 中身は自由に実装していいんだぞ。でないとプロパティの意味がない。 返す値が無いからNothingなのはかまわないが、そのNothingは取得操作が失敗したから Nothingをエラーコードとして返しているのではなく、そのプロパティの値自体がNothingという意味でなければいけない。
こういうセオリーだ、とか、これはバッドノウハウだ、とかってのは置いといて、 好きに作ってみればいいじゃん。で、ダメだったらやり直せばいいんだし。
1の位や10の位で切り上げや切り捨ては行えますか?
>>240 除余を引いてください。
っていうか、小学生でも思いつく知恵だと思うけど・・・
足して割って掛ければいいよ
int型なら10で割ると切捨てなので1の位が消滅する 105/10→10 これにまた10をかける
>>243 Dim val1, val2 As Integer
val1 = 99999 / 100
val2 = val1 * 100
Console.WriteLine(val2)
( ゚Д゚)
Math.Floor()
( ゚Д゚ )
\
/じゃなくて\ね。 っていうか、だから除余を使おうよ。
っていうか、馬鹿相手にレスするなよ。
初心者な質問ですが宜しくお願いします。 Button1をクリックしたら、Do While〜Loopを使ってi=1から10まで加算して 初回ループ ・Console.WriteLineで標準出力ストリームに「i = 1」 ・Form1のLabel1にも「i = 1」 n回目ループ ・Console.WriteLineで標準出力ストリームに「i = n」 ・Form1のLabel1にも「i =n」 と表示させる。ということをイメージして書いたのが Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer = 1 Do While i <= 10 Console.WriteLine("i = {0}", i) Label1.Text = "i = " & i i += 1 Loop End Sub Button1をクリックした実行結果は ・標準出力ストリームは1度も表示されない。 ・Form1のLabel1には1回だけ「i = 10」と表示される。 ・ループが回っていることはステップインで確認。 何が問題なのかアドバイスお願いします。
フォームアプリケーションだとそもそも標準出力先が用意されてない デバッガの出力に表示させたいならDebug.WriteLineとか使う そのループも画面更新も同じスレッドで行われるので、ループが回ってる間画面更新できない 定期的な処理ならタイマを使う 重い処理ならBackgroundWorker辺りを使う Refreshで強制的に再描画させられるけど普通ではないしそんなループ程度じゃ視認できないだろ
>>249 回答有り難うございます。
>フォームアプリケーションだとそもそも標準出力先が用意されてない
>デバッガの出力に表示させたいならDebug.WriteLineとか使う
フォームだと窓表示ができないのですね。なるほど!
>そのループも画面更新も同じスレッドで行われるので、ループが回ってる間画面更新できない
>定期的な処理ならタイマを使う
実行結果を見ると確かにPrivate Sub Button1_Clickを抜けて初めてLabel表示が更新されるので
そうかなあと思ってましたが納得です。
Labelに値をセットすることと、フォームを更新することが 異なるタイミングで行われるということなので、 Update()などで更新してやれば実現できる。 Label1.Text = "i = " & i Label1.Update() これでも処理中に画面が張り付いてしまうのは変わらないから、 本格的なアプリならTimerやBackgroundworkerをすすめる。
質問です。 以前C++で、構造体配列を宣言するために、 typedef struct tagA { CString strName; int iCount; } tagA; CArray< tagA, tagA > tagArray; というように宣言し、構造体要素をAddしたりDeleteしたりしていました。 tagArray.Add(...) のように。 VB.NETではどのように宣言してやればいいのでしょうか?
List(Of T)とか使う
>> 253 ほんとありがとー。 Cだけしかやったことないっていうのはほんとダメだねぇ・・・ たすかりました。
そういう教科書に載ってるようなのはたいがいあらかじめ用意されてるから 自分で書こうとしてはいけない
整数の数があるとして、 11個の連続した整数を取り出したいのに 60-50=10なのに でも50から60には11個の整数がある。 この矛盾はなに?
つれますか?
>>252 CArray 使うとか…いや、まあいい。
>>255 でもツリーとかグラフはないんだよねえ。
>>256 しょうがっこうの べんきょうは むずかしいですか?
すうじを 5 と 3 にしてみるとわかりますよ。
>>256 1-1=0なのに
1から1までは1という1個の整数がある!ふしぎ!
マジレスヨクナイ
>>238 >>239 レスありがとうございます。
とりあえず手を動かしていろいろやってみたいと思います。
すいません、もう一つだけ質問です。 メンテナンス目的時のみに使用するメソッドを設定する場合の 命名規則やルールはあるのでしょうか? コーディング規約ではそういうものは見たことがないので、 質問してみました。 _(アンダーバー)で始まる名前にするなど、適当な考えで やっておくといいのかな? 細かい事を気にしすぎだという意見が出るかもしれませんが、 多くの人が必ず関係するような事だと思ったので確認しておきたいと 思いました。
さすがにメンテ云々までMSのガイドラインは無いんじゃないかな? もし、あったらごめんね
VB.NETっていきなりWindowsアプリじゃなく C言語が一番最初コマンドプロンプトでprintfだのから始まったように初歩の初歩から学べないの?
>>264 プロジェクト作成時に、コンソールアプリケーションを選べばいいと思います。
場合によっては、VB.NETから離れて、BASICを学ぶという選択肢で考えた方が
いいかもしれません。
そもそも Visual なのだから、基本はフォームにコマンドボタンと テキストボックスを配置して、コマンドボタンクリック時のイベントに コードを書いていくというのが、初歩という考え方でもあると思う。 (GUIを作るまでの過程がマウスによる操作で出来るので簡単っていう 意味合いで、Visualです。)
とりあえずこれで ' save hello.vb module Program sub main Console.WriteLine("Hello World !") end sub end module vbc hello.vb hello
デバッグはドM作業っていうのがよくわかったよ 2時間悩んでもわからなかったのに寝て起きたらあっさり見つかったり
俺はシャワーのとき解決策を思いつくよ
俺はいつも丑三つ時に閃くな
正規表現難しいな 数字の桁数が定まってないのは\dでは探せないしなぁ
いつからここは愚痴をいうスレになり下がったんだ?w
オレは、トイレ入ってる時だな。。 一番思いつくのは
>>271 +とか*の量子指定じゃ駄目なの?
せっかくの質スレなんだから聞いてみろよw
質問
http://homepage1.nifty.com/rucio/main/kiso/Scope.htm このサイトを読んでいたのですが、「2.適用範囲」の Friend を
使う場合はどんなケースであるのがいまいちわかりませんでした。
同じプロジェクトであればということですが、基本的にモジュールは
自分が今作成しているプロジェクトに組み込んで使うものではないの
でしょうか。
例えば、AさんがJisakuクラスを作成し、Jisaku.vbファイルに保存。
それをBさんが、新規プロジェクトを作成し、Jisaku.vbファイルをその
プロジェクトフォルダの中にコピーしてForm.vbを記述。
Cさんが自分のPCにて、それとは別に新規プロジェクトを作成し、
Jisaku.vbファイルをそのプロジェクトフォルダの中にコピーして
Form.vbを記述。
という感じにやるのだと思っていたのですが、この考え方が間違いなのでしょうか。
>>275 プロジェクト内でも間違いではないが、同一アセンブリ内というのが正確だな。
アセンブリが異なれば例え同じ名前のクラスでも別のクラスという扱いになる。
.NETでは基本的にソースレベルでコピーや共有はしない。
>>263 レスありがとうございます。
使う人が使い方を間違えないような感じの名前をつけておきたいと思います。
現在VB.NET2005にて データベースの接続及びSQL文発行を行う DLLを作成しており、 接続には『SqlDataReader』を使用しています。 Transactionを指定しない場合に 排他制御がどのように行われているのか、がわかりません。 一切排他が行われないのでしょうか? また、排他制御を実装する場合はどのようにすれば良いのでしょうか? 行いたい制御としては、 @データ取得中(SELECT)にデータ更新を抑止する Aデータ更新中(INSERT/UPDATE/DELETE)にはデータの取得/更新を抑止する です。
データベースによる
280 :
278 :2009/12/03(木) 19:47:40
>>279 すみません、書き忘れました。
使用するデータベースは
『SQLServer2005 Workgroup Edition』です。
その質問の答えは回答者による。
SqlDataReader では接続できないんだが (SqlDataConnection だろ、ってのは置いといて) MS SQL Server の Isolation Level の設定次第。
select * from tab with(xlock)
>>278 とりあえず元スレに移動したことを書いとけよ。
マルチとかいわれんぞ。
皆プログラミングになんのエディタ使ってる? 俺はPCがカスだから動作が重いけど楽で便利だからVBの統合開発環境をそのまま使ってるんだけど
VBでVB使わないとかただのアホかマゾ
メモ帳でやりたいけどやり方わからんから仕方なくVisual Basic 2008 Express使ってる
edlin
.NETのクラスライブラリの糞長い型名やメンバ名なんかいちいちタイプしてられるか もともとインテリセンス前提で作られてるんであってPythonみたいな書きやすさ重視の言語とはわけが違う
>>276 レスありがとうございます。
分かりやすい説明でした。
年末ジャンボシミュレータ作る気ですね? 解ります。(゚ー゚ )(。_。)(゚ー゚ )(。_。)ウンウン 私も考えたのですが、どっかにメモしておくしか考えつかないです。 数学板かアルゴリズムのスレで聞いてみようかと思ってました。
295 :
デフォルトの名無しさん :2009/12/04(金) 14:22:59
未定のType変数を用意し、それを後から必要に応じてセットしてから 後でそれを使ってオブジェクトを設定したい場合、 たとえば Dim TypeA as Type = GetType(Integer) ・・・ Dim ObjectA as TypeA = CType(obj, TypeA) ・・・・・(*) このようにすると(*)でエラーします。こういう使い方はNGのようで、 どういう仕方で行なうものか教えてください。
296 :
295 :2009/12/04(金) 14:25:05
(*)ではコーディング状態で「TypeAは定義されていない」となります。
>>294 値型の理由は主にパフォーマンス ただし分かって使わないと却って悪化する
自分で定義する分には値型を作ることは(列挙体以外)まずないよ
>>295 Dim ObjectAのところでTypeAはプログラム上確定してないんだろ? 実行時に初めて確定する
ならTypeAにキャストしてどうするの? 何もできないじゃん?
298 :
295 :2009/12/04(金) 14:43:11
>>297 >Dim ObjectAのところでTypeAはプログラム上確定してないんだろ?
そうなんですが、たとえば、親のオブジェクトからプロパティで型を受け取って
それを使ってキャストしたいと思いました。それで元々定義されたメソッドを
子の方で叩くなどしたいと。こういうのは無理なものですか?
だからさ、TypeAが何型かコーディング時に分からないのに、 どうキャストすんのよ? VBならレイトバインドでも使っとけ。 おすすめしないけど。 何がしたいか具体的に書けばもっと真っ当な方法がある可能性が高い。
300 :
295 :2009/12/04(金) 15:23:55
>>299 コーディング時には実はわかっているのですが、クラス型は親の方で宣言して
おきたく、子の方はいろんな種類があって実行時に型を受け取りたいということ
でした。
ただ、どうも(*)という方法自体が不可能なような感じですかね?Type型のもので
オブジェクトを宣言したりキャストすること自体が間違いなのかなあ・・・
親が分かってるからとかそういう問題じゃないんだ。 コーディング時にってのは子のコーディング部分で分かってるかって意味だ。
マウスカーソルがフォーム上の指定した座標上に移動したときに その座標にグラフィックが描画されるようにしたいのですが、 そのようなイベント(?)はあるのでしょうか? どのようにすればいいのでしょうか? 現在はピクチャーボックスとマウスエンターイベントで実現しているのですが、 たくさんのピクチャーボックスを使うとものすごく重くなってしまうそうで ダメと言われてしまいました。
ひとつのピクチャーボックスでいいだろ なんでたくさん使うの
ポトペタ脳ってうざいよね
>>303 レスありがとうございます
現在はフォームにフォームのクライアント領域と同じ大きさのピクチャーボックスをすでに貼り付けていて
その上に一個ずつ麻雀牌のピクチャーボックスを貼り付けている形になっています。
麻雀パイにマウスエンターすると牌が浮き上がって見えるようにしたいのですが、
これもひとつのピクチャーボックスで実現できますか?
>>302 こんな感じで領域を指定するんじゃないの?
If MousePosition.X > 250 And MousePosition.Y > 250 Then
Me.PictureBox1.BackColor = Color.Aqua
Else
Me.PictureBox1.BackColor = Color.Blue
End If
データとビューはわけろよー
>>300 CType や DirectCast は「型名」を指定するものであって、
Type型で指定するわけじゃない。
>キャストすること自体が
動的な型変換は面倒だぞ。
つ[TypeDescriptor.GetConverter]
>>305 MouseEnter と MouseLeave のときだけ捕まえて描画したらええやん。
>>308 たぶん型変換したいわけではなくてどっちかというとレイトバインディングの方だと思う
311 :
295 :2009/12/04(金) 16:55:31
>>308 >CType や DirectCast は「型名」を指定するものであって、
>Type型で指定するわけじゃない。
やっぱりそうだったのですか。わかりました。ありがとうございます。
>動的な型変換
>TypeDescriptor.GetConverter
こういうものがあったのですね。勉強します、またよろしくです。
312 :
295 :2009/12/04(金) 17:00:55
>>301 >>310 >レイトバインディング
子のコーディング時にも親を見ているのでわかっているのですが、
子の方ではそのクラスを宣言できないので、クラスの宣言自体をオブジェクト
にして受け取りたいということなのでした。しかしそういうことは簡単では
なさそうな感じので、とりあえず別の方法も考えてみます。
>>305 がイメージしていることって、例えて言うと、ホームページで
Flashでデザインされたメニューのようなものか?
マウスを動かすとリアルタイムでボタンの色や形が若干変わるという。
314 :
デフォルトの名無しさん :2009/12/04(金) 17:30:16
あるイベントに対して、すでになんらかのハンドラが AddHandler されていることを知るにはどうすればよいでしょう?それらを全て 列挙することはできるでしょうか。
できないと言っていい そもそもそんなのが必要になるのってどんなときよ
ListBox を Form に貼り付けてプログラミングする場合の質問です。 ListBox は、1行につき1件のデータしか表示出来ないのでしょうか? Access の場合は、ListBox に対してテーブルそのものを貼り付けることが 出来、さらに1件目のデータを非表示にしておいて、クリックした時に そのデータを取得するということもできたりしたのですが、 そういったことができなさそうなので確認のため、書き込みました。
[質問] Panel の中に複数の RadioButton を貼り付けた場合、 現在、どの RadioButton が選択されているかをチェックするには、 Panel のプロパティからでは確認は出来ない? 貼り付けているすべての RadioButtion において If Me.RadioButton1.Checked = True Then みたいなコードを書いてチェックするしかない?
>>316 標準のListBoxはそう
まあListBoxだってDataTableをDataSourceにして
DisplayMemberとValueMemberを指定するぐらいならできる
それで不満ならネットでMultiColumnListBoxでも探せば
>>317 うん
まあ関数化しとけば便利だね
>>316 ListViewとかDataGridViewとか使うのは?
>>318 すばやい回答ありがとうございました。
とりあえずは DisplayMember と ValueMember を使う方法でやってみます。
それでうまくできない場合は、紹介していただいたコントロールや
Grid を使うなど別な方法を検討してみます。
>>319 回答ありがとうございます。
紹介していただいた ListView とか DataGridView の機能について
詳しく調べてみます。
初心者にも親切にありがとうございました。
arraylist(listbox.listindex)でいいじゃん
>>322 arraylist を工夫して使えば、 listbox でクリックした名前に相当する
数値データを取得することが出来るっていう意味かな?
ちょっと私の頭がついていけてなくてどういうコードを書いていけば
いいのかのイメージはついていませんが、いろいろとやってみます。
ありがとうございました。
324 :
317 :2009/12/04(金) 18:09:15
>>319 レスありがとうございます。独りで考えていて不安だったけれど、
他の人の考えを聞く事が出来てすっきりとしました。
DataSetとDataGridでできるだろ。 DataGridViewじゃなくてDataGridな。
コマンドボタンの色 Botan1.BackColor = Color.FromArgb(255, 95, 158, 160) の255のところは0でも255でも色に変化ないようなんだけどどんな意味が?
透明度
0でもボタンが透明にならなかったし
どれがどんなかんじに透明に
>>306 ありがとうございます!!
>If MousePosition.X > 250 And MousePosition.Y > 250 Then
↑のようにマウスの位置を検出できるとは知りませんでした
試してみたいと思います
>>313 はい、そういうイメージです
かっこいいアニメーションを作りたい気持ちもわからんでもないが、 パイの部分にマウスを持っていったらっていう処理にしようとするから 重たくなったりして、どうしたらいいのやら・・・ってなるんじゃないの? パイが描画されている座標部分をクリックしたら、浮いて表示される じゃだめなの?
>>332 さんのアイデアで伺いを立てたら
「それだとなんかイメージと違う」って言われちゃいましたTT
>>333 だったら、pictureboxをパイの数だけ貼り付けるしかないんじゃないかなぁ。
enterやleaveのイベントをひろって背景を入れ替えていくとか。
場合によっては、VB.NETを使うこと自体をあきらめるのを選択肢に入れた
ほうがいいかもね。
.NET になってから、java並みに重くなってしまってるから。
処理内容をどこまで考えているかにもよるけれど、 インターフェースはhtmlのスタイルシートでやって、 処理部分をjavascriptでって方法はどうかな?w この方法だとファイル保存は出来ないけどね。
>>302 その程度のことなら.NETのWindows Formでも普通にできると俺は思うよ。
というか、まず確実にできる。
要はマウスポインタの座標からOnMouseしている牌の特定と、あとは牌の描画が
出来ればいいだけのことでしょ。
だから、例えば牌を表し牌の描画も担当するTileクラスと、牌を描くキャンバスになるコントロールと
Tileのリストをフィールドに持って、OnMouseしている牌の特定などを行う
TimeManegerクラスを用意すればいい。
たいして難しい問題とも、パフォーマンス的に無理な処理とも思えない。
>>334 まだこういう恥ずかしい勘違いをしている人がいるのかw
337 :
334 :2009/12/05(土) 16:31:28
>>336 私は恥ずかしい人でしたが、Timerコントロールとマウスの座標位置を取得する
処理の組み合わせで、原型となるものを作り上げることが出来ました。
今までマウスのイベントのみで処理をしようと考えていたので、コントロールが
大量に必要だという結論に至ってしまっていました。
ありがとうございました。
WPF
use32.dllのSendInputでマウスを動かすってのをやってたんだけど XP32bitの時は問題なく動いてて、今Windows7 64に変えたんで試してみたら SendInputがまったく機能してないんだけどこれはどうすれば
まずソース 次にUAC
341 :
339 :2009/12/05(土) 18:30:23
x86でコンパイルしたら動いた
API の呼び出し方が悪いのか。
まずソース でひっかかったかな?
ポインタが必要なところをIntPtrではなくIntegerで宣言したりしてない?
>>330 ボタンのBackColorが透明ってことじゃないの?
Clipboard.SetText(リッチテキストボックス.Text) だと リッチテキストボックス内のテキストの改行が全部なくなっちゃうんだけどどうすれば
347 :
デフォルトの名無しさん :2009/12/06(日) 10:31:48
いまVS2005使っています。 #Regionで定義したものがコードウインドウのメソッド選択ボックスで 選択できたら便利だなと思ったんですが、VS2008以降ではそういった 拡張が行なわれていたりしてますか?
メソッド選択ボックスってインテリセンスのことか? #Regionってプリプロセッサだからコードの中身とは何の関係もないのでそんな機能あるわけがない
349 :
デフォルトの名無しさん :2009/12/06(日) 11:17:00
>>348 コードウインドウの上部にある、「クラス」の選択ボックスの右側にある
「メソッド」選択ボックスです。
>#Regionってプリプロセッサだからコードの中身とは何の関係もない
そうだったのですか。あればすばやく該当の場所を出せるので便利かな
と思ったのでした。
個人的にはリージョン嫌い。 まあ使いすぎてなきゃいいんだけど。 リージョンを大量にしかも入れ子に何重も書いてたソースは泣きたくなった。
あんまりでかいソースならPartialで分けるとかクラス分けるとかするべきだな
>>351 さすがにそれはないし、もっと悪い。
>>350 まさかマウス操作で展開してる、なんてオチじゃないよね?
カンジンのVB.NETの仕事が見つからない
354 :
デフォルトの名無しさん :2009/12/06(日) 13:28:21
VB6のときみたいに、仮想でそのメソッドだけ表示されるような モードもあったらわかりやすいということはないですか?
ないから無くなったんだろうね そういう機能があるとつい長いメソッドを書いてしまいがちになって良くないし
アウトラインを全部展開する方法が分からない。 普通の全部展開・折りたたみだと、VBの場合うまく行かない。
アウトラインを止めるみたいなのがあったはず
If 1 <= iR <= 100 Then End If ここらへんでプログラムがうまくうごかないけどどうすれば
if 1 <= ir and ir <= 100 then end if じゃなくて?
基礎ができてないがな If 1 <= iR And iR <= 100 Then End If
あ、ゴメン被った
この場合はどうでもいいレベルだけど、 基本的にAndAlso使う癖つけといた方がいいぜ。
>>362 それはどうしてですか?
「他の言語にも近いような書き方と」いう観点では、AndAlsoは使わないほうが
良いと思っていて、私は使っていないのですが。
これは、あおりとかじゃなくて、私はあまり経験が深いほうではないので、
そのメリットなどの確認がしたいという意味合いです。
ショートサーキット評価でぐぐろう
Form1から別のフォームのコントロールにアクセスするばあい もしForm2の名前が とってもながいなまえのフォーム だったら とってもながいなまえのフォーム.textbox1.text="abc" とかになっちゃうけどどーすれば ちなみに Dim frm2 as とってもながいなまえのフォーム frm2.textbox1.text="abc" としてもabcは入力されない
>>366 ・上の質問
withを使う
短い名前のForm2型に入れなおす
・下の質問
frm2.textbox1.text="abc"
でもコード上は問題なく文字が設定されるはず
frm2とfrm2.textbox1に実体はあるのか?
Nothingになってないかステップ実行して確認しる
>366 理由は判らないけど、 Dim frm2 As とってもながいなまえのフォーム frm2 = とってもながいなまえのフォーム frm2.TextBox1.Text = "abc" frm2.Show() で行けた。 詳しい解説は、誰か頼む。
イミディエイトウィンドウの文字化け.. プログラムが実際にどう動いているのかトレースする為に 下記の様なプロシージャを作り Sub TraceLog(ByVal strName As String) Debug.WriteLine(Now.ToString("HH:mm:ss @ " & strName)) End Sub で、各プロシージャの頭に TraceLog("TextBox3_GotFocus") とか TraceLog("fmClear") こんな感じでプロシージャ名を追加してみたんですが... イミディエイトウィンドウ中で下記の様に文字化けするです。 10:18:11 @ Ti18er1_Tick 10:18:11 @ or181_+09:00e97own 10:18:11 @ 11a午uei 10:18:12 @ Ge午Da午eTex午 10:18:14 @ PreV_o00 10:18:14 @ Tex午Box3_Go午ocu14 なーんとなく意味は判る様な文字化けなんですが これってどうやって直したら良いんでしょうか?
370 :
366 :2009/12/07(月) 10:29:06
できた Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim frm2 As New とってもながいなまえのフォーム frm2.TextBox1.Text = "abc" 'frm2 = とってもながいなまえのフォーム frm2.Show() MsgBox(frm2.TextBox1.Text) End Sub
>>364 処理時間を短縮する為ということなのですね。
ありがとうございました。
>>365 「覚えてしまえば良い」とかいいきってしまったら
反論は出来ませんが、ある言語特有のコードの
書き方のスタイルだけが身についてしまうと、
他の言語を使わなければならない状況になった時、
苦労しそうだなという意見です。
なので、よっぽど処理速度が遅くて・・・という
状況でない限りは、コーディングスタイルの方を
優先した方がよいのでは、と思っているのです。
DB接続時の設定なども、ウィザードを使っての
方法しか知らない場合は他の言語での応用性が
全くありませんし。
>>369 Debug.WriteLine(Now.ToString("HH:mm:ss @ ") & strName)
じゃないの?
どうしてNowの中に文字列を入れようとしているのかが
良く分かりません。やろうとしている目的や得たい結果
などもあわせて書いてください。
>>369 例えばTraceLog("TextBox3_GotFocus")だと
Debug.WriteLing(Now.ToString("HH:mm:ss @ TextBox3_GotFocus"))
になるだろ
この末尾のsは先行ゼロ無しの秒数を指してるし
tはAM/PM 指定子の最初の文字を指してる
374 :
369 :2009/12/07(月) 10:52:38
>>372 ,373
ああああああっーー
理解しました...ありがdです。
なんで"t"が"牛"に化けるんだろって思ってたら"牛"じゃなくて"午"だったのね...
>>371 なんかずれてるなあ。
パフォーマンスもあるけど、
例えばnullチェックの後でプロパティチェックするとか、
そういう時に必要になるんだよ。
そして他の言語って大抵ショートサーキットが普通じゃないか?
だから他の言語に合わせる意味でもAndAlsoなんだよ。
でもなー andalsoとかキモイんだよな いやわかるよ。処理をあわせたほうがいいのは。 つかVBの変態仕様を引き継いだのが悪い
最近プログラム組みだしたんだが、BASICも変わったんだなぁ。 AndAlsoとかOrElseとか論理演算子追加されてるのか。 やっぱ、頭からマニュアル読まないとダメっぽいな。
C#だってただの&は両辺評価で &&がショートサーキットなんだから同じだよ。
あれ? &ってビット演算で、&&が論理積じゃ無くなってるの?
C#では論理型と整数型が完全に分離されたから、 (整数) & (整数) はビットごとのAND (整数) && (整数) は文法エラー (論理型) & (論理型) はショートサーキットなしのAND (論理型) && (論理型) はショートサーキットありのAND VBスレだから触れとくけど VBの場合は暗黙の型変換があるからちょっと複雑
さんくすこ。
俺はショートサーキットすることを前提、またはしないことを前提にした コーディングはするべきじゃないと思ってる AndAlsoとか、IF文のネストを1段下げれられるだけだと思うがな VB.NETってベータで1回ショートサーキットありにしてみて、 結局製品版でなしになったんじゃなかったかな
思うのは勝手だけども、
>>375 の
>例えばnullチェックの後でプロパティチェックするとか
のような局面で2行に分けて書け、と今更言われても
かったるくてしょうがない。
>結局製品版でなしになったんじゃなかったかな
は?
>>382 ネスト減らせるだけって…
ショートサーキット無けりゃElseが必要なときに困るだろ。
例えば
>>375 でElseが必要なとき面倒な事になる。
わざわざ言語で使い分けられるようになってんのに、
どちらも前提にしない意味が分からない。
素人が理解せずに間違いやすいのは分かるが、
じゃあどちらも前提にしないときに
素人が間違ったことをやらなくなるかというと
そうは思えない。
VB.NETは開発中のときに、通常の演算でショートサーキットする仕様にするって話があった 結局従来通り通常の演算ではショートサーキットしない仕様に落ち着いた その代わりに、ショートサーキットする特別な演算子が追加されたんだ
古すぎて覚えてないな。ありそうな話ではあるがbeta以前じゃね?
C#などのC系言語ではショートサーキットが普通だから 読む人もちゃんと分かって読むから全く問題ないけど 確かにVBオンリーの人には馴染みが薄いだろうから 使わないことにするならそれもアリだと思う
クラスやメソッドを全部…でなくてもいいけどまとめてある本はありますか?
msdn
ですよねっ。w
>>388 んなこと言って阿呆を甘やかすから
いつまでたってもゴミグラマが死滅しないんだ。
じゃあVB定番のForm1.button1.Text = "クラスの外から変更!"とか禁止な
ゴミグラマなんてどうでもいいわ。
VBだからこそゴミグラマホイホイを目指せ
カプセル化の観点からは問題外です プロパティやメソッドを定義して間接的に触らせるのが正解です でもVBだからどうでもいい
vbでできるんなら使えばいいじゃん ダメなら他でいい
>>398 の考えも正しいが、突然、開発未経験の他の言語を使って開発を
しなければならなくなる状況も想定してであれば、カプセル化などの
観点を身に付けたやり方をしておいた方が良い。
Accessでは、GUIでテーブルやフィールドの指定が出来るクエリという
機能があるのでSQL文の読み書きが出来なくても良いかどうかと同じ話。
開発って言葉なんか気恥ずかしくない? なんだか俺が開発なんてそんな大そうな事とてもじゃないけど言えない
アナル開発とか
VBでできるできないじゃなくてカプセル化は作法の問題だぞ
そりゃC#でもJavaでも
>>393 のようなことはできる
記述の議論の話になっているので聞いてみたいのだが、 こんな感じの表記を使ったりしていますか? cnt = cnt + 1
+= 1 が使えるのは知ってるけど、 VBの場合その表記にしてしまうな。
はっはっはっ。 最初、cnt++と書いて通らないのに愕然としたのは秘密だ。
406 :
403 :2009/12/08(火) 13:44:21
レスありがとう。
私の場合は、概ねの言語で使う事が出来る
>>403 の表記を使うのが
一番だと思うんだけどね。
まちがえて =+ とコード書いてしまうこともあるし。
ふつー、+= があるならそれを使うだろう。
VB10 というものがリリースされるそうですが、今度はどんな変更なのですか? VB9 の時は、LINQ の追加、言語仕様の方は従来と同じ、みたいな感じだったけれど。
.NET 4.0ベースになるという他に、 これまで足りなかった分の補足といった感じかな。 Action型のラムダ式、ステートメント本体を持つラムダ式が書けるようになったのと コレクションの初期化構文。 Dim f2 = new List(Of Integer) from { 2, 7, 4, 0, 6 } 自動プロパティ。 public property Bar1 as string = "abc"
なんと。VBってC#みたいな自動プロパティなかったのか。 いちいちpublic int Number
趣味程度ならVBはやっぱりいいな。楽だし 何千行もガリガリ書くような言語じゃないかな
すいません。話についていけてないので質問なのですが、 自動プロパティってなんでしょうか?
getとかsetとかを書かないで作成できる単純なプロパティ
>>413 サンクス。
>>410 のコードの例だと、クラス名.Number = 10 とか出来るという
ことなんだろうけれど、その10が代入されたメンバを使っての
メソッドの定義は不可能ということになるんですよね?
あくまで、Get/Setのみが目的の限定されたメンバの定義という。
何言ってるのかわからない 普通のプロパティも分かってないでしょ君
>>415 じゃ、俺にプロパティというものを教えてくれ。
あおりとかじゃなくて、フィールドに対するGetter/Setterの役割を
持っているものだと思っていたのだが。
Dim children As Person() = Array.FindAll(persons, Function(p) p.Age < 18) とか VBのスタンスとしてはC#に合わせてるだけだろうけど
ラムダならF#をやるべきだな。C#のラムダじゃ物足りない!となること請け合い(笑 それは置いといて、VB9ではあまりラムダ式には熱心じゃなかったんだな。 ラムダ式はLinqのクエリ式を実現するための仕掛けと捉えていたので、 クエリ式をリッチにすれば、ラムダ式も拡張メソッドもいらないと考えられていた。
ラムダ式って何?
こういうの。とりあえず、関数内関数だと思えばいいよ。 ' Action型ラムダ Dim Lambda1 As Action(Of Integer) = Sub(x) Console.WriteLine(x) Lambda1(888) ' ステートメントを持つラムダ Dim Lambda2 As Func(Of String, integer, integer) = Function(s, i) for r = 1 to i Console.WriteLine(s) next return 0 End Function Lambda2("aaaa", 4)
>>421 なんじゃこりゃー
わけわかめ
要らないや
ラムダ式って、勉強しようとしても毎回わけわかめだ。 なんでも聞くところによると、ラムダ式はM$製ではないある言語によって、 その有用性を世の中に示したらしいが、それのレベルからやらないと 理解は難しいのかなぁ? 初めてDBに触れる人が、 ADO.NET & SQL Server のみでは SQL文 の習得は 難しい。なので、そこから一旦離れて、Accessのクエリを使うなどして、 SQL文や結果をチェックしながら学ぶと理解が出来、使えるようになる。 みたいな話のような気がしている。
ラムダ式ってオブジェクト指向なみに有用なの?
>>410 >自動プロパティなかったのか。
必要性がわからん。
>>415 俺の ESP 能力が
「get/set しかできなくて、例えば set されたときに OnNumberChanged() を
呼び出すことも叶わない」
という意味だよと囁いている。
>>425 リフレクションにおいてフィールドとプロパティは別モンだから
「取り敢えずフィールドにしておいてset実装が必要になったらプロパティにする」
のは良くない
「取り敢えず自動プロパティ」にしておけば一貫性が保たれる
ラムダ式か匿名メソッドどっちかは要るよ。 使うときはほんとに使う、ないとやってられない。 まあみた記事が悪いと思うよ。 もっと当たり前の使い方見ればありがたみが分かる。
赤間信幸著「LINQテクノロジ入門」(日経BPソフトプレス)によると、 自動プロパティは LINQでデータ加工する際に通常は匿名データ型を使う所で、 明示的にクラスを作成したいときに使うらしい ラムダ式の必要性もこの本に解説あるし、一度読んでみればいいかも
自動プロパティとあまり関係ないけど、VBはせっかくメソッドスコープの Static変数があるんだから、これをプロパティのゲッタからもセッタからも アクセスできる書き方ができるようにしておいて欲しかったな。 これがあれば鬱陶しいバッキングフィールドを隠蔽できる自動プロパティのよさと 普通のプロパティの柔軟性を両立できるのに。
>>422 たったこの程度でわからないとか勉強不足だろう。
関数やメソッドもよく知らないんでないか?
現在、静止画(JpgまたはBmp)の情報を 取得するクラスを作成しているのですが、 『System.Drawing.Image』クラスが使用出来ず、 困っています。 Windowsフォームのみで使用可能なのでしょうか? クラスライブラリでは同様の情報は取得不可でしょうか? 取得したい情報としては、 ・画像の解像度 ・PixelFormatの値 ・Flagsの値(YCCかどうかの判断に使用) などです。
DLLを参照に追加してないんじゃね
dllをちゃんと参照しなければ使えない
434 :
431 :2009/12/08(火) 21:11:15
>>432 >>433 ありがとうございました。
『System.Drawing.dll』を参照設定に
追加する事で対応出来ました。
For i =0 To arr(cnt) = "A" みたいにできないのが難点だなぁ
>>435 それが何をやりたいのか俺には理解できない
わからねー初心者はレスすんなや
WindowsCE6.0端末で動作するプログラムを作成しています。 PC上のエクセルで作成したCSVファイルを端末上に転送し そのファイル内のデータを下記の様なプログラムでメモリ上に格納したいと考えています。 Sub MemYomikomi() Dim StR As StreamReader Dim strLine As String = "" Dim intC As Integer = 0 Dim intCnt As Integer = 0 StR = File.OpenText(HanteiFilePath) Do While StR.Peek() >= 0 strLine = StR.ReadLine intC = InStr(strLine, ",", CompareMethod.Text) CODE(intCnt) = Mid(strLine, 1, intC - 1) Kekka(intCnt) = Mid(strLine, intC + 1) intCnt = intCnt + 1 Loop TextBox1.Text = intCnt StR.Close() End Sub しかし、プログラムは正常動作するのですがメモリ中の結果を見ると文字化けしています。 色々調べてみた結果、OpentextはUTF-8のエンコードを読み取るとのことなので 問題のCSVファイルのエンコードが違うのかと思うのですが 運用時に制限を加えるより現在のエクセルからCSVで保存されたエンコードを読みたいと考えています。 現在のエンコードが何なのかも判っていないのですが なんとかUTF-8以外のエンコードも文字を認識する方法はないでしょうか?
出来る言語って有るのかな?
>>438 取り敢えずStreamReaderを調べるといいよ
441 :
438 :2009/12/09(水) 11:21:43
>>440 見たつもりだったのに..
StR = File.OpenText(HanteiFilePath)
の部分を
StR = New StreamReader(HanteiFilePath, System.Text.Encoding.GetEncoding("Shift-JIS"))
としたら解決でした。
ありがとございましたー
カウンターに使う変数で 0から加算されて10になったらというのを判断したい場合には If Counter = 10 Then ・・・・・ Counter = 0 End If でいいですか? 念のためIf Counter > 9 Then の方がいいですか? カウントアップが早かったりパソコンの処理が重かったりして10を飛び越してしまうことはないですか?
Counterが整数ならお好きに。 ただ10という数字に積極的な意味があるなら 9より上より、10以上のほうがいいかな。
誤差が出る計算だったり、別のスレッドでカウントアップしてるとかじゃなければ 心配してるようなことは起こりえない 仮に飛び越す可能性がある状況だったとして、そのIf Counter > 9のところ だけうまく通ったところで、そんな状況で他のところがまともに動くとは思えないな
>>442 カウンターを間違えて2回増加させるとか
カウンターにうっかり2を足してしまうとか
そういった不安要素を排除したいなら>=10のがいいんじゃね
ま、そんなレベルのプログラムでまともに動くわけないってのは>444に同意
コントロールって、メンバに自分自身(Excel VBAで、RangeオブジェクトのCellsメンバのようなもの) は持ってないのでしょうか? 例えば、※行の()の中をWithを活かして書けないものでしょうか? With Form2.TextBox1 '色々設定 Form2.Controls.Add(Form2.TextBox1) '※ End With よろしくお願い致します。
>>446 真面目に日本語でオッケー過ぎる質問だと思う。
エスパーの俺でも訳がわからん。
Me
VB.netで複数のマウスからの情報を制御して、1つのマウスからのみの情報をカーソルに送るプログラムを組もうとしています。 今のところ、WM_INPUTのメッセージから各デバイスの識別はできたのですが、いらないマウスからの情報を破棄する方法が見あたらず困ってます。 今後どのようなステップを踏めば良いのか御教授お願いします。
>>449 多分RawInputじゃ入力の破棄はできないはず
WH_MOUSE_LLなら破棄できるけど、このタイミングで入力元の識別できるかなー
WM_INPUTでdwExtraInfoを設定できる余地はあったっけ…と思ったらそもそもWH_MOUSE_LLの後か、WM_INPUT
WH_MOUSE_LLの最中にGetRawInputBufferは有効かどうか…?
Dim f As Boolean とするとfはTrueとFalseが選べますが、これを自分で定義する方法を教えてください。 例えばYes,Noとかできないでしょうか?
比較的要望に近いのは列挙型か? あーそうだ、モジュールで Yes As Boolean = True とかすればいいんだー(棒
レスどうもです。 出来ればコードエディタで入力時に選択肢が出るようにしたいですがそういう方法はないでしょうか?
すみません。列挙型を調べたら希望通りのものができました。ありがとうございます。
このスレ、質問がない時読むと、 ほんと興味ないつまらない話ばっかな。
>>451 返信ありがとうございます
WM_INPUTのフック無理なんですかね...
ちなみに検索をかけたら、dll作成というキーワードが出てきたのですが、この方法だと実現可能なのでしょうか。
Dim i As Integer の後に また Dim i As Integer と書きたい場合は Dim i As Integer と Dim i As Integer の間に何を書けば
なぜ書きたいのか
Redimのことか?
Dim i As Integer を先頭に書けばいい
"Red"という文字列を Color.Red にするにはどうすれば
Enum.Parse
System.Drawing.ColorのRedはプロパティで列挙型じゃなかった。
>>463 は間違い。
リフレクションを使うか。
よくわかんない
KnownColorが列挙体だった。 dim kc as KnownColor = System.Enum.Parse(GetType(KnownColor), "Red") dim col as Color = Color.FromKnownColor(kc) Console.WriteLine("{0:D} {0} -> {1}", kc, col) -- 141 Red -> Color [Red]
EnumとかKnownとか0:D} {0} -> {1}とかしらんけどコピペして使ってみる
>>457 WH_MOUSE_LLはグローバルフックでもDLLは不要
フック用DLLが必要なら.NETだと作れなくなってしまうしな
ColorConverterだったか使えば?
いやColor.FromNameっていうそのまんまなのがあるんだが
おお、忘れてた。 システムカラーとか要らないならそれで良かったな確か。
できた Color.FromName メソッド 定義済みの色の指定した名前から Color 構造体を作成します。 名前空間: System.Drawing アセンブリ: System.Drawing (system.drawing.dll 内)
デバッグ>ウィンドウ>イミディエイト でフォームが表示されるはずなんだけどピクリとも反応しない。 普通にデバッグすればフォームは立ち上がる。 なにか設定がおかしいのかな?
>>473 >デバッグ>ウィンドウ>イミディエイト
>で
「イミディエイト ウィンドウ」が開きましたか?ならば正常です。
ttp://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet08/vb6tonet08_01.html このサイトには、ファイルの入出力においては、いくつかやり方がありますよ。
ただ、.NET Framework のクラス・ライブラリで動かすやり方で記述した
方がいいですよ。という印象を受けるような記事がかかれていますが、
私が感じる.NET Framework のクラス・ライブラリで記述するメリットは
Monoなど、「移植性」という部分だけだと感じるのですが、それ以外にも
何かあるのでしょうか?
.NET Framework そのもののバージョンアップ時の互換性が保たれ易いかは、
大きな違いがなさそうに思いますし。
クラスライブラリ関係の事がよくわかってないので、質問をしてみました。
誘導でも良いので何かヒントをお願い致します。
476 :
デフォルトの名無しさん :2009/12/10(木) 18:52:58
記事読んでないけど、 .NET Framework は、Windows 標準でもあるし VBやC#などでもクラスライブラリを使いまわしやすいからじゃない?
今のVBでまだ Open "Hhhhh.dat" For Input As #1 みたいな書き方できるんだっけ?
無理 FileOpen関数が代わり 有効なファイル番号とかマルチスレッドのかけらも考慮されてないよな まあVB6までは存在しなかった概念だから仕方ないが
Transparency で透明にしたフォームは 画面を動画としてキャプチャするソフトに写らないけどどうすれば
>>475 古いやり方に何のメリットがあるんだよ。
ただ不便なだけ。
VB.NET2003で作ったプログラムにバグがあったと思ってデバックしようとしたけど、 IDEで実行しても再現しない。よく考えると、どうやらVisual Studioo .NET 2003 に付属のDotfuscator Community Editionで難読化したものを実行すると動作がお かしくなるらしい。 何なんだこれは、出来損ないではないか。 これ使ってる人いるのかな。
1/297.9を x/16bit に書き直すとして 16bitの10ッしんすうと xの10進数の値の部分はどうなるか計算できない
何を言ッているかわからねーと思うが(ry 10/2979 じゃなくて?
意味がわからない 16bitって何? 一般的に16bitっていうと具体的な値じゃなくて 値の記憶域の幅だぞ
487 :
484 :2009/12/11(金) 11:18:19
分母が6万ごせんなんちゃらかんちゃらのときの分子の値
Dim y As Double = 2^16 Dim x As Double = 1 / 297.9 * y Console.WriteLine("{0}/{1}", x, y) もしかしてこれだけのこと? 宿題としては意図が分からんな 整数なら理解できるがなぜ小数点・・・
>>487 ああ、1/297.9 ってBB確率か何かか。
そんな算数も判んなくて大丈夫か?
492 :
デフォルトの名無しさん :2009/12/11(金) 23:01:55
いや、ちゃんと説明されてるやんけ。。。(−_−;)
493 :
デフォルトの名無しさん :2009/12/11(金) 23:16:06
・アセンブリを次の場所のいずれかに移動またはコピーします。 ・現在のプロジェクト ディレクトリ。 ここにあるアセンブリは、[参照] タブに表示されます。 ・同じソリューション内のその他のプロジェクト ディレクトリ。 ここにあるアセンブリは、[プロジェクト] タブに表示されます。 ・Public Assemblies フォルダ (Program Files\Microsoft Visual Studio 9.0\Common7\IDE\Public Assemblies)。 ここにあるアセンブリは、[.NET] タブに表示されます。 と書いてあるよ?
Public Class Form1 Private Sub Button_goukei_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button_goukei.Click Dim kosuu, goukei As Integer : goukei = 0 Dim ctl As Control For bangou = 0 To 2 ctl = Me.Controls(bangou) kosuu = CInt(ctl.Text) goukei += kosuu Next TextBox_goukei.Text = CStr(goukei) End Sub End Class 「Formに、TextBox1、TextBox2、TextBox3、TextBox4、TextBox_goukei(Text = "表示")、 Button_goukeiを配置し プログラムを実行しButton_goukeiをクリックたら TextBox1、TextBox2、TextBox3に数字を入力し、合計をTextBox4に表示する。」 と言うことをしたいんだけど、 bangou = 0のループでctl.Text = "表示"となって型が合わないという理由でエラーになる。 コントロールの配置順でControls(bangou)が決まるようなんだけど、狙い通りに行かない。 テキストボックスのプロパティを見ると、順番らしきものはTabIndexしか見あたらないんだけど これとは違うみたい。 コントロールの順番を設定するにはどうすれば良いのでしょうか?
×「Formに、TextBox1、TextBox2、TextBox3、TextBox4、TextBox_goukei(Text = "表示")、 Button_goukeiを配置し ↓ ○「Formに、TextBox1、TextBox2、TextBox3、TextBox4、TextBox_goukei、 Button_goukei(Text = "表示")を配置し
>>494 番号でコントロールを指定できて何か嬉しいことある?
本当にある?
よーく考えた方がいいよ。
>>493 C:\Windows\Microsoft.net\DirectX for Managed Code
とか、あきらかにその三つに含まれないものも.NETタブにあるんだけどなんで?
ここにあるアセンブリ*だけ*が、とは書かれてないだろ。
Format(Single,"0.00") だと少数3位で切り捨てになっちゃうので 3位を四捨五入するにはどうすれば
+0.005してからformat?
切り捨てて本当かよそれ
VBのFormat関数の動きってどうだったかな…
質問です。textbox で右クリックしたときに表示される コンテキストメニューをrichtextboxでも同様に使いたいのですが、 デフォルトで無い状態です。 どうすればいいですか?
無理
了解
VBってひとつの行にいっぱい書く方法ないの? C言語だと int x,y; x=10; y=x+10; printf("%d",x+y); みたいにいっぱいかけたんだけどVBは?
:
もう、熟成しきって、そんなレベルでしかネタが無くなりましたか。
なんかXNAのページでC#専用みたいに書いてるけどDLLさえあればVBでもいいんだな。
Xboxでは動かせないよ 審査が通らない
511 :
デフォルトの名無しさん :2009/12/13(日) 19:03:27
すんません、教えてください。VS2005でVBで開発していますが、 ブレークポイントを設定して止めたり、一時停止ボタンで実行を 止めたりしたときに、やたらと開発環境がハングして困っています。 これはソースコードに問題がある場合がありますか?それとも VS2008以降ではこういうことはなくなっている問題なのでしょうか? ご指導ください。
スタートページを表示しない設定にしてみて
低スペ乙
514 :
デフォルトの名無しさん :2009/12/13(日) 19:15:03
>>512 一応スタートページは表示していないのですが、コードウインドウはたくさん
残したまま終了していて、再度立ち上げるときにはたくさんのコードウインドウが
開かれて立ち上がります、これがいけないのでしょうか・・・
>>513 マシンのスペックが足りていないということでしょうか?
メモリーは一応4GB積んであり、物理メモリーは850MGぐらいまでしか
使用されていない状態のようで、そちらの余裕はあるようなのですが。
515 :
514 :2009/12/13(日) 19:34:21
(訂正)>850MG→850MB
516 :
514 :2009/12/13(日) 19:42:09
あと、それとExplorer等でファイルやフォルダを削除すると、その最初の実行の際に やたらと時間がかかる傾向にありました。2回目以降はそれほどかからない のですが、1回目のときは30秒ぐらいかかっています。CPUは、一応 Core2Duoの2.6GHzなのですがこれでも遅いのか・・・
ブレークポイントとか使ったことない msgboxデバッグで十分
>Explorer等でファイルやフォルダを削除すると、その最初の実行の際にやたらと時間がかかる傾向 VSとは関係なく、何かしらのファイルを削除しようとすると30秒かかるって事なら OSのファイル管理の具合が悪いか、ドライブの物理的異常かもねー。そうなると板違い
まずはスキャンディスクだ
トドメになることあるから覚悟して実行しろよ…
オブジェクトブラウザ日本語にしてくれよMS
メッセージボックスの文字列をAPI(SetWindowText)で書き換えたいのですが、 メッセージボックスのメッセージ部分のウインドウハンドルを取得する方法で Windows全体の子ウィンドウを列挙して調べる以外の方法があれば 流れのような感じでも良いので教えていただけないでしょうか?
自プロセスなら CBTフックができるかも。 他プロセスなら列挙しかないだろ。
524 :
デフォルトの名無しさん :2009/12/13(日) 21:48:44
ありがとうございます。 CBTフックの方法で調べてみたいとおもいます。
>>525 何故かは知らんけ瀕死のHDDにそんなことしちゃダメなのは常識でしょ。
しかし、最近のHDDはSMART当てにならんね。
死ぬときは何の予兆もなくコロッと逝く。
その辺は10年ぐらい前のHDDの方がまともだった気がする。
HDD瀕死なら、たまにOSが起動しないとか 他にも色々と問題が発生してそうだけどな 一応SMART確認して、ヤバそうなら他HDDにバックアップしてから 平気そうならいきなりスキャンディスクかな それでもデバックやらで固まるならVS入れ直すな それでもダメならOSから入れ直し
すみません、VB2005で開発をしているものです。 規模の小さなアプリ開発で ファイルベースのデータを扱う際のDALC (データアクセスロジックコントロール)の作り方がわかりません。 どういう点に注意して作れば良いのでしょうか。
現在VB.netで自動でWEBページへログインを行うツールを作成しているのですが、
どうしてもGoogleAdsenseには自動でログインをする事が出来ません。
(Yahoo mail等には普通にログインする事は出来ています。)
■Google Adsense のページ
https://www.google.com/adsense/login/ja/ ■記述したVB.netのコード
objeBrowser.Navigate(strNavigate, Nothing, Nothing, Nothing, Nothing)
Do
Loop Until Not objeBrowser.Busy
Dim HTMLDoc As mshtml.HTMLDocument
HTMLDoc = objeBrowser.Document
Dim iCol As mshtml.IHTMLElementCollection
iCol = HTMLDoc.getElementsByTagName("input") ← ここで通常は iCol に複数のオブジェクトが取得されなくてはならないハズが
取得されません。
一体なぜGoogle Adsenseのログインページだけinputタグの値を
上記のコードで取得する事が出来ないのでしょうか?
たいてい、そういうツール作ってるのはブラック。 悪用しないで下さいと言われても 悪用以外に使い道がなさそうなツール。
>>529 そのページinputタグが無いみたいだけど
>>529 inputじゃないね
ページによってソース違うからソース見てみ
ログインには Java Script が必要です。 だって
534 :
529 :2009/12/14(月) 21:23:36
>>531 恐らくJavaScriptでDOMを操作して作成しているのだと思います。
>>532 FireFoxのアドインで「要素を調査」でページが表示され切ってから
確認すると間違い無くinputタグが吐き出されているのですが、、、
どうしてもGoogleのこのページだけ自動でログインする事が出来ません。。。
誰か凄腕の方。この牙城を突破する方法をご指南下さい。。。。
このページだけ自動ログインできない、、、
がんばってください
そういうことやっても問題ないと思っているようなら googleに直接メールして聞いてみりゃいいじゃん
Busy 判定じゃなくて、DocumentComplete のあとに、しばらく待ってみたら?
>>537 一応5秒程度スリープして試してみてもダメでした。。。
Googleトラップをなんとしても突破したいです。。。
凄腕のPGさん突破できた人はいますか?
マジでここだけ無理。。。
5秒とかじゃなくてさ・・・。
loginとこiframeになってるのか
凄腕のPGさん(笑) いい加減しつこい VIPでヤレ
iframeのとこのURLでやったらログインできたよ
adSense の URL -> iframe(awlogin) -> outerhtml -> input タグ(Email, Passwd) でいいのかな。
>>542 すみません。ソースを iframeで検索してもヒットしませんでした。
どうやってURLを見つけられたのでしょうか?
またURLを教えて頂けると非常に助かります。
>>542 >>543 どうもありがとうございます。Googleの牙城を突破する事が出来ました^^;
やっぱ上には上がいますね。凄いです。
>>541 低脳は氏ね。
これだけ説明聞いてもダメならあきらめろよ。
../../login-box.js このソースがログインボックス生成してるのわかるじゃん でこれを読むと document.write('\n\74iframe style\75\・・・・ ってことはログインボックスのあたりを右クリックでプロパティで URLゲット
つか、iframe とって、getAttribute("src") でいいだろ。
凄腕のPGさん以外書き込むんじゃねーぞカス共
解決した途端、強気になる
>>545 解決して良かったね、もう来るなよ。
ファイル名が違っても内容が同じファイルを探したいのですが、 容量がぴったり同じものを最初に探し出して 次にファイルの適当な位置を何箇所か比較するという 方法を考えているのですが、いきなりファイルの途中を読み込む 方法がわからないのですが、良い方法があったら教えて頂きたいです。
ハッシュするとかでいいんじゃね?
FileStream使えばランダムアクセスできるよ ファイル比較は比較対象を想定できるかどうかで望ましいアプローチが結構変わるね
どうしても分からないので質問させてください。 カスタムコントロールを自作してフォームに貼り付けようとしたところ 以下のようなエラーメッセージが吐かれて貼り付けられません。 「コントロールSystem.Windows.forms.tabcontrolがデザイナでハンドル されていない例外をスローして、無効になりました。 例外: DataSourceのプロパティまたは列SettingNameにバインドできません。 パラメーター名:dataMember スタック トレース: 〜以下略 このエラーはどういったときに発生するものなのでしょうか? よろしくお願いいたします。
>>556 フォームではなくコード上でまずインスタンス生成するコードを書いて、例外でストップするように設定し、デバッグ実行してみたら?
デバッグすれば? その手の問題の多くは、DesignMode への考慮不足だけど・・・。
>>557 ,558
ありがとうございます。
仰るとおり DesignMode の考慮不足だったようですorz
次から tabcontrol を扱う際は注意したいと思います。
560 :
553 :2009/12/16(水) 00:54:58
レスありがとうございました。 FileStreamでできました。
VB2005でシュオッチ(キーボード連打回数測定ソフト)を作っています。 キーを叩くごとに効果音が鳴るようにしようと 「My.Computer.Audio.Play("")」を使ってみたんですが 連打するたびにこの処理だと、重すぎてプログラム全体に支障が出てしまいました。 もう少し負担の軽い、効果音専用のようなコードは無いでしょうか?
563 :
562 :2009/12/16(水) 18:38:37
DirectXを利用するのが一番簡単みたいだな DirectXすごいな
>>562 さっそく試してみようと思います。
ありがとうございました!
アプリケーションの設定の作成について質問です。 ListBoxの値をユーザーが追加、編集できるようなプログラムを 作りたいと考えているのですが、値をどう保存すればよいのか、 が分かりません。 アプリケーション構成ファイルに簡単に保存できるのでしょうか? iniやcsvファイルなどを使って保存しておくしかないのでしょうか?
多分そういう方法を取るのが一番
ありがとうございます。 やってみます!
その方法は二番だな
xmlファイルに保存とかでもいいんじゃね?
じゃ、一番は何?
一番はJSON
それはないわ・・・
簡単なのはXMLだな フォーマットを意識したコードが一切不要
一番はアプリケーションセッティングのカスタマイズ。
俺のスタンスでは、設定情報は原則XMLにしておくが、 リストボックスに表示するような系統のもの(データ件数が多いもの)であれば、 mdbファイルにまとめておくだろうな。 SQL文書いてアクセスするだけで目的のものがすぐに取得できるし、 そういうSQL文での抽出が便利であると感じるケースが多いから。
オレは、csvだなぁ
件数次第だな。
親プログラムから子プログラムを呼ぶんだけど、 子プログラムから数値以外の値を返す方法はない? 親と子は両方VB.NETで作成します。 子をDLLにしろってのは無しで。別プロセス別アプリケーションでお願いします。 子がファイルにシリアライズ出力してそれを親が読み取る以外の方法があれば教えて。
クリップボードとかじゃダメなん?
標準出力か、普通のプロセス間通信。
SendMessage で WM_COPYDATA とか
やったことないけど、GlobalAddAtom() して、ATOM を親プロセスに返す、ってのはどうだろ?
>582-585 ありがとう。それぞれ調べてみるよ。
>普通のプロセス間通信 普通ってなんだよっ
親子のプログラムってどういう状況の話をしているのかがわからん。 いや、あおりとかじゃなくて。 異なるフォームでのデータのやり取りではなさそうだし、親となるクラスが、 子どもとなるクラスを持っているというわけでもなさそうだし。
いい方法かどうかは別としてよくあると言えばよくある話だと思うが。 特に理由がなければ基本的にはやらない方向で考えるけどな。
すでにVB.NETの枠をはみ出て、Windows OSの機能とかAPIとか ついでにDCOMとかの話だもんな。
そんなこと言い出したら.NET Frameworkのクラスの使い方すらスレ違いだ
子がConsole.Writelineで文字列を出力して、 親がProcess.StandardOutput.ReadToEndで読めました。楽でいいね。ありがとう。
それは無理だろうw
?
>子がファイルにシリアライズ出力してそれを親が読み取る以外の方法
>>593 なら実質的に同じようなもんだと思うんだが
「ファイルシステム上のファイル」でさえなければ、何でもよかったんだろう。
599 :
デフォルトの名無しさん :2009/12/18(金) 20:39:03
RvResult = MessageBox.Show(MSG, "CAUTION", _ MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, _ MessageBoxDefaultButton.Button1, 0) こんな感じで記述しているメッセージボックスなんですが、 なぜか素通りしてしまう場合がありました。これまで、 ここまでしっかり引数を書いたときには発生していなかったのですが、 ここのところ頻発してしまうので困っています。環境はVS2005ですが 何か注意するべき点があるでしょうか?よろしくです。
クラスビューがあるらしいんだけど表示メニューにない。 VB2008Expressだからですか? VS2008Exだとあるんでしょうか?
601 :
600 :2009/12/18(金) 21:19:42
602 :
599 :2009/12/18(金) 21:21:01
あんまり頻発するんでしかたなくブレークポイントを置いて止めながら 見てみるとそういう場合はほとんど例外なくMessageBoxは表示されます。 ゆっくり一つ一つステップを確認しながら実行する分には表示されるという 感じなのです。こういうことはしばしばあるものでしょうか?あるとすると 原因はどんなことが考えられるでしょう?
603 :
600 :2009/12/18(金) 21:41:26
その行の前にデバッグプリントでカウントしてみたらどう? 99%勘違いだと思うよ。
トラックバーについて質問です。 トラックバー内のどの部分でマウスの左ボタンを押下しても、 つまみをつかんだ状態にしたいのですが可能でしょうか? つまみのない場所で、マウスの左ボタンを押下すると、 つまみがその位置に移動し、その状態でマウスを動かすと つまみも連動して動くといったような処理がしたいです。 よろしくお願いします。
605 :
599 :2009/12/18(金) 21:56:33
>>603 どうもです。Debug.Print()がもちろんやってみています。
確実にMessageBox.Show()のすぐ次のDebug.Print()が実行されて
います(100%)。
こうしたことは、以前にはMessageBox(MSG)とだけ簡略に書いたとき
にはときどき起きていたもので、それからは多くの引数を書き、かつ
戻り値を受ける形で書くことにしてほぼそうしたケースはなくなって
いたのですが、本日になってやってみているとそれが同様にすり抜ける
場合が頻発してきたのです。不思議なのですが、どうも現実のようです。
どうするべきだろうか、どうしてもYesNoCancelで表示したいのだが。
606 :
600 :2009/12/18(金) 22:00:51
いや、あなたが表示されるはずと思っている時にデバッグプリンとではカウントしているかどうかを見てほしい
607 :
599 :2009/12/18(金) 22:06:41
>>606 >デバッグプリンとではカウントしているかどうか
カウント、というと意味としては「Debug.Print("ABC")」という行を
MessageBox.Show()の直後の行に置き、実行したときに、イミディエイト
ウインドウに ABC と表示されるかどうか、というチェックでいいのですよね?
ですから、そのチェックでは確実に100% ABC と表示されているのでしたが。
そういう意味じゃなくて、でしょうか??
いや絶対勘違いだから(100%) 賭けてもいいよ
609 :
599 :2009/12/18(金) 22:09:37
>>607 それで、その上で、その直前のMessageBox.Show()は実行されていない
のは確かなのでした。
ところが、その前からブレークポイントで止めておいて、そこから
ステップ実行していくと、確実にMessageBox.Show()が実行されて
メッセージが出てボタンで選択できるのでした。
つまり、出てきていいはずのところが、通常実行では出てこないという
状況なのです。
610 :
600 :2009/12/18(金) 22:10:20
それでもいいんですけど、要するに制御がその行に入ってないんじゃないのかという事。 素通りなんて普通に考えてない。 メッセージ表示する行だけにして、何度も実行してみて表示されない時があるならそういうこともあるということだろうね。やってみては?
611 :
599 :2009/12/18(金) 22:15:19
>>610 どうもです。この現象、どうも書く場所(メソッド)によるようなのです。
あるメソッド内ではほとんどそういうことは起きませんが、ある場所では
高確率で発生します。そのときにその場所は確実に通っています。条件分岐
されていないフローの中でDebug.Print("ABC")して確認していました。
そんなの聞いたこと無い
もういいから再現可能なコードを晒せ
614 :
600 :2009/12/18(金) 22:20:31
ブレークでとめるって、メッセージ表示の行に入る直前で止めれば、そりゃ表示できるでしょう。メッセージ行へ制御がちゃんと移動してるんだから。 コード全体見えてないんで私はどんな制御してるのか知らないけど。 どうしてもマシンのせいにしたいならリソース不足でメッセージが表示できないとかじゃないかなw
そういうときはとにかくログ入れまくって予想通りのログに なってるか確認するのが大事だ debug.printじゃだめ
616 :
599 :2009/12/18(金) 22:25:31
>>612-614 一つ奇妙な現象としてあることは、実行しているアプリのウインドウが
アクティブで動いているときに、その箇所にきて、本来メッセージが出る
べきタイミングで出ないときには、開発環境がアクティブになって、画面上
前に出てくるのでしたw。
そしてそこが流れたことを示すイミディエイトウインドウ上のPrint結果が
出ていて、そこを通ったときに開発環境がアクティブになったことを示して
いました。
正常にメッセージが出るときにはそうした奇妙な現象は起きず、アプリの
ウインドウがアクティブになりっぱなしで普通なのでした。どうも変な現象
なのです。
周りの処理は?
618 :
599 :2009/12/18(金) 22:28:59
>>615 >debug.printじゃだめ
ではテキストファイルなどに書き込んでみるのもやってみます。
いろいろご助言ありがとうございました、また思いつく限り調べて
みてわかり次第報告します。
環境がぶっ壊れてる可能性もあるな。
620 :
599 :2009/12/18(金) 22:33:53
>>617 WindowMsgなどをフックするコントロールを使っていて、
可能性としてはもしかするとそこが悪さしているのでしょうか・・・。
開発環境がアクティブになるというようなソースコードは存在して
いないので、なぜそういうことがあるのかはわからないのです。
またわかったら来ます。
たぶんそうだろね。
なんだ最初からどこが怪しいのか見当が付いてたのかよ。 ただ人に「悩み」聞いてもらいたかっただけってか。 なんか女のグチみたいだな。 やな感じ。
623 :
600 :2009/12/18(金) 22:46:25
IDEがアクティブになるのは単に元のフォームが非アクティブになったからでは?メッセージ表示するときは非アクティブになるからね。 で本来のメッセージはなぜか表示されないので、かわりに直前にアクティブだったウィンドウが・・・
ソース晒せばいいんだけどね
>WindowMsgなどをフックするコントロールを使っていて、 どう考えてもそれが怪しいだろ。
クラスビューってC++の見通しが悪いから生まれた機能だからなあ .NETでは無くてもほとんど問題ない
628 :
600 :2009/12/18(金) 23:41:31
質問者であることを示すために数字コテを使うのはわかるけどさ。 関係ないのにずーっと使い続けてるのって、バカみたいだよ。
630 :
600 :2009/12/18(金) 23:45:38
いちいちくだらねぇことでつっこんでんじゃねーよカス
キチガイを刺激すんなよ。
632 :
600 :2009/12/18(金) 23:47:52
かまってほしそうだな
633 :
600 :2009/12/18(金) 23:49:00
うるせー死ねカス
634 :
600 :2009/12/18(金) 23:49:24
誰がキチガイだって? 死ねよハゲ
635 :
600 :2009/12/18(金) 23:49:35
おめーが死ねよキチガイ
636 :
600 :2009/12/18(金) 23:49:45
荒らすなよハゲ
637 :
600 :2009/12/18(金) 23:50:27
さすが馬鹿が多そうだなここはwほんとカッスい
638 :
600 :2009/12/18(金) 23:52:01
こんなところで質問してる俺って・・・
639 :
600 :2009/12/18(金) 23:52:34
回線切って首吊れよカス
640 :
600 :2009/12/18(金) 23:52:51
くっだらねぇ質問はここにするに限るからなw
641 :
600 :2009/12/18(金) 23:55:09
さっさとデバッグしろ、今日も帰れないぞw
何が面白いわけ? よそでやれ。
ホンモノのキチガイかw
644 :
600 :2009/12/19(土) 06:01:58
他所でやるにも適したスレがない。 いや、俺この書き込みが初参戦だが。
ド初心者な質問で申し訳ないですが Formの背景イメージをcomboboxで選んで変更できるようにしたいんですが 難しいでしょうか? ピクチャーボックス内の画像変更はできたのですがFormのほうがどうしてもできませんorz どなたかお願いします ((○| ̄|_
646 :
600 :2009/12/19(土) 23:27:40
同じようにやればいいだろ。
同じようにやってなるんだったら ここで質問してません
Me.BackgroundImage = Image.FromFile("画像ファイル名")
>>648 ありがとうございました
Meの部分を直球でForm1としていたのが原因でした
単純ミスですがとても助かりました┏○ペコ
650 :
600 :2009/12/20(日) 00:04:51
単純ミスというより、何もわかってないだけだな。
Processクラスに WaitForExit() がある。
shellでって曖昧 Process.WaitForExitでいいじゃん
Dim hProcess As System.Diagnostics.Process hProcess = System.Diagnostics.Process.Start("起動する外部プログラム名", "引数") hProcess.WaitForExit() hProcess.Close() hProcess.Dispose()
656 :
600 :2009/12/20(日) 00:36:23
Dim proc As System.Diagnostics.Process proc = System.Diagnostics.Process.Start("プログラムファイルの名前", "引数") proc.WaitForExit() proc.Close() proc.Dispose()
VB.NET 2008 アクセス制限がされているフォルダに保存されているファイルを 別のフォルダに保存したい。 ファイルをコピーする瞬間だけ「別のユーザーで実行」のような 処理をしてくれるクラス(方法)はないでしょうか。 現在は、ファイルコピーのみを実行するアプリケーションを作成し、 それを別のプログラムから「別のユーザーで実行」してファイルコピーの アプリケーションを起動しています。しかし、Windowsをログオフした状態で タスクスケジューラーのようなもので起動するとうまく動作していないようなので、 他の方法を模索しています。 なにか上手い方法をご存知の方がいましたら教えてください。
Windowsのコントロールパネルのタスクで、 そのフォルダへの実行権を持つユーザー名で タスクを登録すればいいんじゃない? タスク登録時にユーザー名とパスワードを入力しておけば タスク実行時には聞かれないし。
runasコマンドを使うとか runas /env /user:%USERDOMAIN%\権限を持ったユーザー名 "実行するプログラム名"
今夜は冷えるな
662 :
661 :2009/12/20(日) 01:58:03
ミス
このスレは色々勉強になるなぁ。先人の皆さんに感謝。
>>657 です。
>>658 ファイルコピーは一連の処理の中の一部分になります。
メインのプログラムは、フォルダにアクセス権を持っていないユーザーで起動します。
(セキュリティの関係上、なんでもできるユーザーを作りたくないので)
>>659 >>663 >「別のユーザーで実行」してファイルコピーのアプリケーションを起動しています。
「別のユーザーで実行」をProcess.Start メソッドでやってみて
ダメだったので質問しました。説明が足りず申し訳ないです。
タスクスケジューラーに実行アプリケーションを登録しておいて、
ログオンしたままだと問題なく動作するのですが、
ログオフすると動作しませんでした。
(ユーザーとパスワードを指定しないとログオフしても問題なく動作するので、
タスクスケジューラーに登録したユーザーでアプリケーションを実行しているのに、
さらにその中で別のユーザーとしてアプリケーションを実行しているのが
悪いのかなと推測しています。)
>>660 runas は、対話型でパスワードの入力を求められるのでログオフした状態だと
どうすればよいのか分かりません。
>>665 >>659 のページのやつでログオフして実験したけど、出来たよ。
最初は、失敗したんだが、呼び出される側のコピーするプログラムを
フルパスで書いたらちゃんと実行された。
管理者しかアクセス出来ないフォルダへアクセスできた。
コントロールにカーソル合わせると表示される説明のだしかたを教えてください。
Tooltip かな。
KeyedCollection でkeyに割り当てるプロパティを 2つ以上持つことは出来ますか? クラスが item.ID item.Code item.Name とあったとき、 とName(String)とID(integer)の両方をKeyとして コレクションの要素を取れるようなことはできるでしょうか?
VB.NET(VS2005)にてDLLを作成しております。 DLLファイルの格納先を1つとし、 各exeがそのDLLを参照する、という運用をしたく、 GACを用いて実現する方法は調べてわかりました。 しかし、DLL更新時に使用するexe側の再コンパイルが必要な点や、 exe側が使用しているDLLのバージョンが判断しずらい点などを考慮して その方法は採用しない事になりました。 DLLを各exeのローカルに配置するほうが良いかとも思うのですが、 『regsvr32を用いて登録すれば実現出来ないか?』という提案が出ました。 しかし実際に"regsvr32 xxx.dll"とすると、 『xxx.dllは読み込まれましたが、DllRegisterServerエントリポイントが見つかりませんでした。』 といったエラーメッセージが表示されます。 これはDLL側の設定に何か問題があるのでしょうか? ご存知の方がいればご教示下さい。
>>671 COMとして登録しても.NET間の呼び出しには使用できない。
またCOMとして登録する方法もregsvr32ではない。
アセンブリはexeのあるディレクトリか
exeのあるディレクトリからみてサブディレクトリに置く必要がある。
特定のネーミングルールに従うか、構成ファイルで指定する必要がある。
DEVPATHは開発用なのでお勧めしない。
これも構成ファイルにDEVPATHを使うための設定をする必要がある。
.NETじゃDLLはそれぞれのexeごとにローカル配置が基本だぜ app.configの<dependentAssembly>使えば厳密名付きdllならexeのサブフォルダ以外以外でも見に行けるな、一応
>>670 collection(ID)とcollection(Name)どっちもで取りたい?
ならKeyedCollectionだけじゃ無理だね
675 :
671 :2009/12/21(月) 19:04:47
>>672 >>673 レスありがとうございます。
>COMとして登録しても.NET間の呼び出しには使用できない。
>またCOMとして登録する方法もregsvr32ではない。
ということは、VB.NET2005で作成したDLLは
GACを使用しない限りEXEファイルと同一フォルダ
或いはサブフォルダに配置する以外ない、ということでしょうか?
方法が全く無いわけではないが、 わざわざやる価値がないしトラブルの元。 ハードリンクでも作っとけw
あいや、ハードリンクでもファイル上書きしたら意味ないか… まあ、あきらめて個別に置くのが無難だよ。
ああ、厳密名つけてコードベース指定する方法もあるが、 これも手間が増えるだけで余りメリットはないと思うよ。
あと、厳密名で改竄防止出来るとかってメリットもよく言われたりするけど、 現実にはあまり意味ないから。
VB2005+SQL Server 2005で開発を行っています。 次のような感じのコードでデータを一時テーブルに保存し、 別の場所でそれを読み出しています。 Dim sql as string = "select * into #tmp from hoge" Dim cmd as New SqlCommand(sql,connection) cmd.ExecuteNonQuery 上記の内容だと期待通りの動作をするのですが、 抽出条件を指定するためにwhereを追加すると動作しなくなります。 Dim sql as string = "select * into #tmp from hoge where id = @id" Dim cmd as New SqlCommand(sql,connection) cmd.Parameters.AddWithValue("id", 1) cmd.ExecuteNonQuery プロファイラで調べてみると パラメータを指定すると sp_executesql を使用して sql を実行する様で、「ストアド内で作成した一時テーブルは ストアド終了と共に削除される」という仕様に従い削除されているようです。 これを回避するいい手があれば教えてください。 出来ればグローバル一時テーブルは使用しない方向でお願いします。 よろしくお願いします。
>>670 できる
自分でインデックス付きのItemプロパティを定義すればいいだけ
検索は線形検索でもいいしID専用のDictionaryを持ってもいいし
Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" (ByVal hWnd As IntPtr, _ ByVal hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, _ ByVal cy As Integer, ByVal wFlags As Integer) As Integer Private Sub SetWindow() SetWindowPos(p.MainWindowHandle, 0, 0, 0, 100, 100, &H40) End Sub として、XPでは問題なく動くのに、VistaやWindows7では、32ビット版でも全然動かないのですが、 どうしてなのでしょうか? 教えて下さい。よろしくお願いします。
683 :
671 :2009/12/21(月) 21:21:41
>>676-679 ネットなどで調べてみても、共有化についてメリットよりも
デメリットのほうが多いという意見が多数でしたので、
使用しない方向で話を進めてみたいと思います。
ありがとうございました。
>>682 とりあえずハンドルやポインタにはIntegerではなくIntPtrを使う
返値確認して、GetLastError くらいしろよ。
>>684-685 ありがとうございます。
GetLastErrorの使い方を調べて、拡張エラー情報が1400というのは分かったのですが、
それが何なのか、調べても見つけられませんでした・・・
できましたらどのように調べたら良いのか教えて下さい。お願いします。
Error Lookup ってのに入れると、エラーメッセージを教えてくれる。 1400 は、「ウィンドウ ハンドルが無効です。 」だってさ。
>>687 welt見つけられました。ありがとうございました。
メモリ256MBの糞マシンでも VS2008pro動きますか?
C#だとabstractだの書かないと駄目なのがMustInheritとかになってて面白いな 概念より機能を重視か
>>690 ???
真面目に言ってる意味がわからんぞ
マシン語でOK
DOS画面でipconfigを入力したのと同じ機能をVB.NETで実現するにはどうすれば
ipconfigして出力をリダイレクト
>>693 VB.net IPアドレスを取得するには
でググル
ネットワークインターフェイスを列挙して色々する必要があると思うよ。 Vistaや7とかでうまく動くかも確認した方がいい。
VB.NET 2003のツリービューコントロールについてご存知の方いましたら 教えてください。 ツリーノードのForeColorで色を変えているのですが 選択状態のときは背景色、青、前景色白になってしまいます。 選択状態のときの前景色もForeColorで指定した色に したいのですが難しいでしょうか? よろしくお願いいたします。
698 :
697 :2009/12/22(火) 10:56:56
VB2005で開発しています。 D&Dでエクスプローラに対してファイルコピー、移動等を行う際、 ドロップ先のフォルダ・パスのみを取得する方法はありませんか? D&D直後は一覧に処理する内容をまとめておき、最後に開始ボタンがクリックされた際に、 まとめてファイルのコピー、移動を行わせたいと考えています。 自分なりに検索してみたところ、ICopyHookとかいう高度な?処理が 必要なのではないか、というところまで確認しました。 ただ当方英語がチンプンカンプンなものでMSDNとか見てもさっぱりです。 日本語で解説されたサイトや書籍をご存知の方がいましたら、そちらについても 教えていただければ嬉しいです。
どなたかご存知でしたら知恵をお貸しください。 やりたいことはVB.NET2008,PowerPoint2003で、スライドショーの遠隔(同期)操作です。 WebBrowserコントロール上で展開しているPowerPointのスライドショーがあるとき、 スライドショーで発生したイベント(例えばボタンのクリックなど)をフォーム側で取得、 また、イベントを発生させる、といったことはできるのでしょうか? 開始や終了であればPowerPoint.Applicationクラスのイベントで取得できるのですが……
SendMessage
>>701 VB.net SetWindowsHookEx
705 :
701 :2009/12/23(水) 23:31:29
レスありがとうございます。 とりあえずは、調べて試してみようと思います。
706 :
デフォルトの名無しさん :2009/12/24(木) 12:17:38
DirectCast(sender, TextBox).Select() DirectCast(sender, TextBox).SelectionStart = 0 VB2005で開発しています。 テキストボックスとボタンのフォーカス移動にて 問題が発生したので教えてください。 テキストボックスからtabキーで、 タブインデックスで次に指定しているボタンへフォーカスを動かす際に、 ボタンへフォーカスが移動しているのに、 テキストボックス内にキャレット(カーソル)が残っています。 キャレットが出た理由・消す方法を教えていただけませんか。 tabキー押下後にEnterを押すと、ボタン押下の動作をするのですが、 キー入力を行うと、テキストボックスに入力したキーが表示され、 フォーカスがテキストボックスへ移動してしまいます。 処理のルートとして、 Handles TextBox7.Validating の動作としては、データの取得を行い、 異常ルート: DirectCast(sender, TextBox).Select() DirectCast(sender, TextBox).SelectionStart = 0 正常ルート: 取得したデータを表示 DirectCast(sender, TextBox).SelectionLength = 0 DirectCast(sender, TextBox).DeselectAll を正常ルートの最後に配置してみてもだめでした。 よろしくお願いします。
707 :
706 :2009/12/24(木) 18:24:19
自己解決しました。 ここに提示した情報だけでは、結果は出せないような情報でした。 すみません。 tabキーを押下した際に、 ActiveControl.Name でアクティブなオブジェクトを取得してみたところ、 Enabled = false になっている項目が、選択されている場合に発生していたようです。 ボタンを連打した場合の対処で、 処理中はオブジェクトを一時的にEnabled=Falseとして、 処理終了後にEnabled=Trueに復帰させるという処理を行っていたのが原因でした。 テキストボックスからEnabled=Falseなオブジェクトをアクティブなオブジェクトとして 設定をした場合に発生するようです。 対処としては、一時的なEnabled処理のオンオフ後にフォーカスを設定する。 で解決しました。。。
現在の時間が午前6時〜午前8時までの間というのを判断するには どんな形で計算すれば良いでしょうか?
宿題は宿題スレにどうぞ
できた
俺は中卒だからよく分からんけどさ、 宿題ってそんなもんが出るのか。 独学の方が早くね?
やる気がある奴ならな
グループボックス内にたくさんあるラジオボタンのどれにチェックが付いているか調べるにはどうしたらいいですか?
禅問答でもしたいんだろうか? 真面目な話、「どれにチェックが付いているか調べ」ればいいんじゃないの?
1000個くらいあったら大変じゃん
ループにすればいいだろ・・・
そこまでアホみたいに大量なら、 チェックされた瞬間にどのボタンをチェックしたかを変数に入れときたくなるな。 もっとも1000個ぐらいじゃたとえ総当りしても対して時間はかからなさそうだけど
設計見直せよ 1000個でまとまったラジオボタンをユーザがどう使うんだ? C#のスレでも同じように数千個のラベルがどうとかってレスが以前あったな
VisualStudioスレかここで見た気がする。
VB.NET2005からSQLServerへ接続するプログラムを作成しています。 その中に、カーソルを定義し、カーソルにて取得した結果を データセットに格納するという処理があるのですが、 カーソル定義の際に指定した列以外に『ROWSTAT』という列が データセット内に存在しています。 内容を参照するとDBNullとなっているのですが この列は何なのでしょうか? また当該列をデータセットに含めない方法はあるのでしょうか?
>>721 どう「うまくいかない」のかが分からないので答えようがないです
>>722 文字列そのものがプレビューに表示されるように出来ないのです。
プレビューには、画像のみが表示されています。
私が書いたコードは以下の通りです。やりたいことは、画像と
矩形の文字を表示させることです。
Private Sub pd_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs)
' 以下4行は「印刷プレビュー」のコピペ
Dim img As Image = Image.FromFile("c:\test.bmp")
e.Graphics.DrawImage(img, 0, 0, img.Width, img.Height)
e.HasMorePages = False
img.Dispose()
' これより下は「折り返して描画する」のコピペ
Dim g As Graphics = PictureBox1.CreateGraphics()
Dim drawString As String = "智に働けば角が立つ。情に棹させば流される。" _
+ vbCrLf + "意地を通せば窮屈だ。とかくに人の世は住みにくい。"
Dim fnt As New Font("MS ゴシック", 12)
Dim rect As New RectangleF(10, 10, 100, 200)
g.FillRectangle(Brushes.White, rect)
e.Graphics.DrawString(drawString, fnt, Brushes.Black, rect)
fnt.Dispose()
g.Dispose()
End Sub
>>723 その後半のgは関係無いよね
それとHasMorePageの意味分かってる?
>>724 そうです。このコードだと、後半のgが関係ないで終わって
しまっているので、そのgを、印刷プレビューに関連付けたいのです。
HasMorePageの意味は、次のページに関する指定だと思いますが。
ゴメンHasMorePageの件は勘違い その後で描いても問題無かった つか試してみたらちゃんと描画されたんだけど…
Expressは2005?2008?
関連付けっつーか、e.Graphics使えよって話
htmlの表からデータを取得したいのですが、それようの方法があったら教えてください。 縦と横の項目名を指定するとそのデータが得られるという方法はないでしょうか?
DOM舐めるしかない それ以上はHTMLの知識の問題なのでスレ違い
レスどうもです。 HTMLを解析する方法でやってみます。
TextBox.Textに大きなString(100,000行ぐらい)を放り込んでるんですが重い・・・ 多分全部分描写してるのが原因だと思うんですが、これを回避するような方法ってありますか?
・数千個のラベルがうんたらかんたら ・数千個のラジオボタンがうんたらかんたら ・100000万行のStringをTextBoxにうんたらかんたら ← New!
画面内に収まる分だけ描いとけ
class というのでdllファイルを作ったのですが、使い方がよくわからないのですが aaa.dllというものの中に、Functionが複数入っていて、 最終的に一つの結果を得たいのですが、それを使う際には参照設定をして それ以外ではどんな風に書けば良いでしょうか? (複数の関数というのはそれぞれは単体で外部からは使わなくて 1つのメインの関数が他の関数を使って結果を得るようになっています) Dim MyFunc As New aaa と定義して res = aaa.hogehoge(hoge1,hoge2) とすると結果は得られるのですが、いまいち正しい方法のような感じがしません。 普通の関数やAPIなどの時のように res = hoge(hoge1,hoge2) のように書ける方法があれば教えて頂きたいです。
なんというVB脳
>>735 public classじゃなくてpublic moduleにすればそういう使い方ができるよ。
resをretにすれば動く
739 :
デフォルトの名無しさん :2009/12/26(土) 05:03:10
.net frameworkって3.x spが入ってれば1.0や2.0削除してもいいの?
それぞれ対応したバージョンが必要
だったと思う
742 :
697 :2009/12/26(土) 09:44:23
基本は上位のバージョンがあればいいでしょ
ハードディスクの中のすべてのフォルダとファイルを列挙するプログラムは?
>>726 文字の描画は、PictureBox1ではなく、帳票の中に行いたいのです。
>>727 2005を使用しています。
>>728 g.〜 を e.Graphics に変換すると帳票の中に印刷出来ました。
解決しました。ありがとうございます。
可能。WorkBooks.Open でファイルを開けばいい。
749 :
746 :2009/12/26(土) 14:39:42
>>747 ありがとうございます。Excelファイルの処理が出来ました。
文法について質問です。 Dim hash As [String] = [String].Empty なる記述をWebサイトで見つけました。 この [ ] の記述は何を表しているんでしょうか。 よろしくご教示お願いします。
ならそのWebサイトを貼れよ
ここです、よろしくお願いします tp://wednesdaymoon.net/kzweb/articles/vbnet/article.aspx?articleid=92
754 :
750 :2009/12/26(土) 17:13:47
ヘルプで Visual Basic 言語のキーワード を見れ
かんすー
757 :
750 :2009/12/26(土) 17:59:36
>>755 ありがとうございます。
HELPで調べてみました。
Visual Basic 言語のキーワードから
> 次のキーワードは予約済みであり、プログラミングの要素 (変数やプロシージャなど) の名前として使用でき
> ません。ただし、名前を角かっこ ([ ]) で囲むと、この制約を回避できます。詳細については、「宣言された要素
> の名前」の「エスケープされた名前」を参照してください。
「宣言された要素の名前」の「エスケープされた名前」から
> 通常は、Visual Basic によって予約されているキーワード (Case や Friend など) と一致する名前を要素名
> として使用することはできません。ただし、名前を角かっこ ([ ]) で囲んで、エスケープされた名前として定義
> できます。角かっこによってあいまいさがなくなるため、エスケープされた名前では、Visual Basic のキーワード
> と一致する名前を使用できます。定義した名前を後でコード内で使用するときも、同じように角かっこで囲みます。
[ ]で囲むと予約語でもエスケープされてその名前を変数名やプロシージャなんかで使用できるということですね。
全然知りませんでした。
ありがとうございます。
でもそうした場合、Webサイトの例のStringはStringとして使われるべきで、それ以外に利用しようが無いように見えます。
Dim hash As String = String.Empty とするのが普通に正しい気がします。
私の認識は間違っていますでしょうか?
>>756 ??
もう少しヒントください orz
そう書いてる奴に聞けよ。
Stringは予約語の他にSystem.Stringクラスがある []を使えばこのクラス名を指すことになる 予約語Stringは単純にSystem.Stringのエイリアスに過ぎないが なんで予約語の方を嫌ったのかは書いた奴に聞けとしか言い様がないな
760 :
750 :2009/12/26(土) 18:28:47
>>759 なるほどです。
分かりやすい解説、ありがとうございました。
>>758 >>759 > 書いてる奴に聞け
なるほどごもっともです。
ですが、私のあずかり知らぬ世間一般の論理が其処にあるのかな・・とも思いましたので
こちらで質問させていただいた次第です。
--
皆さん、ご親切に導いてくださりありがとうございました。
感謝いたします。
>>737 それはどんなふうに書けばよいでしょうか?
試したところ
Unable to find an entry point named aaa in DLL module1.dll.
というエラーが出てしまいました。
少々質問です。 エクセルのような項目を使いたいのですが何かありませんか?
DataGrid
>>763 ありがとうございます。
次にテキストボックスとボタンを作成し、テキストボックスにあるフォルダのアドレスからフォルダ内のファイルを読み込んできて、
ファイル名やファイルサイズ等の情報をDataGridに表示させたいのですが、このような事に関する分かりやすく紹介しているサイト等はありませんか?
もしくは説明していただけるようでしたらお願い致します。
>>765 「表示するだけ」ならlistviewが一番簡単だと思うけどな
向いてないからあきらめろ。
もう少し自分の手足を動かしてから質問しろよ、と思う。
>>765 テキストボックスに入力されたアドレスの解析(ファイル, フォルダ, ドライブ, etc.)とか
それらの存在チェックとか面倒だろうし、TreeViewでフォルダを対象にして
選択されたものをListViewに表示するだけでいいんじゃね
フォームの左側にTreeView、右側にListViewとかはまぁ結構ありきたりだけど
正直に課題の内容を書けば、教えてくれる奴が居るかもしれないぞ。
あぁいや、色々すいません。 課題じゃなくここ半年ちょっとの間、プログラミング一切せずにいたらなんか出来てた事がまったく分からなくなってしまっていて、 ちょっとヤバイと思って丁度フォルダ内のファイルを管理するソフトが欲しかったものでちょっと慣らしに作ろうと思ったもので。 根本的にDataGridの存在自体を忘れていたのがちょっとまずくて質問しましたが、 もう暫く自分で調べて頭動かしてから分からなければきまた質問させてもらいます。 失礼しました。
773 :
697 :2009/12/27(日) 20:03:04
半年のブランクでそこまで落ちぶれるものなのか
3月まで仕事で制御ソフトやらPOSやら作ってたんですがね・・・。 さすがに自分でも恐いレベルに何も出来なくなってます。
日常で全角英文字を使う人が作ったソースは使いたくない。 という、偏見を持ったプログラマーがココに居ます。
他の言語でプログラミングしながら半年程度ならそんなに腕も落ちないだろうが 完全にプログラム以外の仕事を半年やってればまぁ分からなくもない
コーダーならそんなもん。
日本語読みのローマ字変数(kekkaとか)だけは勘弁
全角英文字を使ってる時点でプログラマかどうかも怪しい
字面を暗記しただけでプログラムが書けた気になってる人多いよね
プログラムが書けるとか出来るとかはこのスレに限らず 議論の対象になることはたまにあるが それらに厳密な定義も基準もないわけで 本人がそう思えばそれまでだろ そんなの議論したって水掛け論になるだけ
誰も議論なんてしてない。
propertyitemsでexifの撮影日読んでるんだが、exif情報が無いか 壊れてるファイルでGDI+で一般的なエラーとか出るんだが、現在は tryで無視してるけどそのエラー回避する方法あるかな? watchで見るとerrorcodeとかあるんだが、それ指定するとそんなものはないと 言われるし
>>783 どんなコード書けば「一般的なエラー」なんて例外が出るのか知らんけど、
普通にMSDNライブラリのPropertyIdListの解説にあるとおりじゃないの?
----
イメージにプロパティ項目がないか、イメージ形式でプロパティ項目がサポートされていない場合、PropertyIdList プロパティは、空の配列 (長さが 0 の配列) を返します。
----
しかし、「……んだが」って語尾を口語で使うのはただでさえ爺臭いのに、
重ねて使うとさらに効果抜群だねw
思うんだが、2chだってもう10年も歴史があるわけで、いい加減ガキ臭い訳のわからん
2ch風の言い回しを無理に使うの止めたらどうかなと思うんだけど、
少しもそういう空気が醸成される雰囲気がないのが日本のネット文化の痛いところだなあ。
つくづく。
ネットスラングってアメリカのほうが色濃いと思うんだが こうですか?わかりません><
じつにくだらないことで・・・・これが、若さか・・・
2ch 如きで「日本のネット文化」を語り始める痛さについては 触れてはならないんですかね?
788 :
デフォルトの名無しさん :2009/12/28(月) 12:46:35
思うんだが、「……んだが」って語尾を口語で使うのはただでさえ爺臭いんだが 重ねて使うとさらに効果抜群だねw
帳票部分を Access で代用する方法を考えています。 ADO.NET にて、(テーブルとレポートオブジェクトなどを作って) あらかじめ準備しておいた mdb ファイルに接続し、 テーブルの内容を変更し、VB.NETからの操作で、Access(もしくは Accessランタイム)を起動し、あるレポートオブジェクトを開く という事は可能なのでしょうか? 帳票1種類でmdbファイルを1つ準備しておいて、マクロでAutoexecを 使用して起動時に自動的にレポートオブジェクトを開く以外に方法が 無いかが気になって質問してみました。
791 :
デフォルトの名無しさん :2009/12/28(月) 17:59:09
コンパイル時に、constAと書いた部分をa(0)に自動で置換するというような事はできないでしょうか? 今後、a(1)やa(0,0)に簡単に置き換え可能なようにして置きたいのですが・・・
C#ならできます
>>790 できるよ。Access がインストールされてれば、Access.Application で。
ランタイム版のみだとやったことないなぁ。
>>793 VB.NET側で、Accessのmdbファイルのどのレポートオブジェクトを
開くかを指定はできますか?
>>795 VB.NETから呼ぶ場合の具体的なコードをお願い致します。
そのようなサンプルサイトがヒットする検索キーワードの案内でも結構です。
まず、自分で探してからにしような。
>>797 探して見つけ切れなかったから質問してるのですよ。
ADO.NET関連など、テーブルの操作ばかりがヒットしてしまうのです。
そうか。ググったら2秒で見つかるけどな。
自己解決しました。
じゃ、紹介しなくていいな。
2秒もかかる検索って、相当重い処理じゃね? 通常は0.数秒の世界だと思うんだが。
確かにそうだな。もう一度やってみたら || 検索結果 約 2,800 件中 1 - 10 件目 (0.07 秒) だった。
>>805 その検索を行った際のキーワードを教えて下さい。
これを書いたらmdbファイルのあるレポートのみを指定して印刷 することが出来るというところまでわかりました。 このコードだとAccessを終了してしまうのですが、Accessを終了 しないままで処理を終える事は可能なのでしょうか? (印刷プレビューを確認するだけの処理です) Dim access As Object access = CreateObject("Access.Application") access.OpenCurrentDatabase("C:\test.mdb") access.DoCmd.OpenReport("レポート名称未設定1", 0 )
acViewPreview を指定すればいいんじゃないの?
>>808 それでも終了してしまいます。
acViewPreviewは値が2なので、以下のように記述しても終了してしまうのです。
Dim access As Object
access = CreateObject("Access.Application")
access.OpenCurrentDatabase("C:\test.mdb")
access.DoCmd.OpenReport("レポート名称未設定1", 2 )
その access 変数をフォームの Private スコープにしてみるとどうなる?
>>811 それをやってみても、同じでした。
私なりにいろいろ見てみたところ、タスクマネージャで確認してみると、
プロセスは残っていました。
そこで、表示モードかと思い、以下のコードを追加で書いてみると、
うまくいきました。
access.Visible = True
もうひとつだけ、確認したいのですがこのコードのみでは、後処理の
問題が残ると思います。
ちゃんと以下のようなコードを実行する必要があると思うのですが、
ユーザがAccessの右上の×印をクリックして終了する場合は、
必要はないと考えても良いのでしょうか?
(最後のNothinはどこかで処理を含める必要がありそうな気が
するのですが・・・)
access.CloseCurrentDatabase()
access.Quit()
access = Nothing
COM参照が残ってれば、Marshal.ReleaseComObject() する必要があるけど、 ユーザーが Access を閉じてくれたんならいらない。
>>813 素早い回答ありがとうございます。
目的のものを作ることが出来ました。ありがとうございました。
なんじゃこりゃあ!!何故急にスレが伸びる?
そうか?前から平均して勢い20前後だったと思うけど
エクスプローラーからファイルをドラック、ドロップして リストボックスにファイル名を登録するようにしているのですが、 複数のファイルを同時にドロップした時に 複数選択にした順番で登録したいのですが、 順番が変わってしまいます。 登録はForEachで配列を順に登録しているだけなのですが、 選択した順番で処理する方法があったら教えて頂きたいです。
エクスプローラを使ってる限り無理 そもそも選択順の情報自体が存在しない
しかし、コード書いててそれぐらい分かんないのがむしろ不思議だw ちなみに、プログラムにファイル名が通知されるときの順番は、 ドラッグ&ドロップを開始する時、マウスポインタがポイントしていたファイルを 先頭に円筒ループするような順番となるから、ユーザー側では(その気になれば) 順番を制御することはできたはずだと思った。
自分が知らない方法があるんじゃないか? って思って調べる/訊くてのなら、不思議じゃないべ。 そういう疑問を解決することで、より知識が増える/理解が進むものだろう。 「出来ない」って言われて、「そうですか」で終わるのなら進歩はないだろうけど。
しかし縦書きでも左から右に書いてくれるとは思わなかったw
LinearGradientBrushってcolor.blueみたいな名前で定義出来る 色でないとダメ? 普通にカラーダイアログで拾った色使うとワケワカな動作するんだが… 黒→白&左→右で例えると 1列目は白(ここですでにおかしい)2列目が黒でそこから右に向かって 白くグラデしていくという つまり本来のグラデの右端に来るべきものがある一定の幅左側に来て しまっているという 斜めだともっとおかしい…つかその白い部分の幅が1文字分〜対角線 までだったり安定しないし エラーは何も出さないけどどうなってるものやら
>普通にカラーダイアログで拾った色使うとワケワカな動作するんだが… 絶対にこれが思い込み。 そんなわけねえじゃん。 単にLinearGradientBrushの開始点と終了点の問題に決まってる。 こんなの質問する前に自分で確認しろよ。
ZIPを操作するプログラムは良く見かけるけど LZHやRARやGCAはどうすれば。 さらに、Q4やMAGなどの画像をVBで見るにはどうすれば。
それぞれ添付されている資料(SDKとかAPI.txtとか)を参考に作ればいいだけでしょ CやC++で書かれていようがVBとそんなに使い方が違うこともない
まあC用のライブラリをDllImportして使うだけだな C読めないとか論外
あの手の奴って大体同じインターフェイスもってなかったっけ?
COMもたいがい面倒だろ レジストリ弄らないといけないし
831 :
825 :2010/01/05(火) 11:19:07
VB2008で、
http://support.microsoft.com/kb/319524/ja を参考にフックを触り始めたのですが、
疑問に思うところがあったので質問させていただきます。
SetWindowsHookExの第4変数wParam に渡す値ですが、
MSDNのリファレンスでは AppDomain.GetCurrentThreadId は旧式だから
Thread.ManagedThreadId を使え、とのこと。
そこでThreading.CurrentThread.ManagedThreadIdを試してみましたが、
返ってくる値が GetCurrentThreadId とは違うようです。
適切な代替手段はあるのでしょうか、ありましたら方法をお願いします。
マネージコードからは原則「取得してはいけない」決まりになってるらしい どうしても必要ならWin32APIのGetCurrentThreadId呼べるけど そんなことしたら本末転倒だから警告抑止して古いの使い続けた方がマシだと思う
>>830 いまどきは、Reg-Free COM とか、分離 COM って呼ばれるモノがあってな・・・。
みなさんこんばんは。 VB2005Proにある「ReportViewer」と「CrystalReportViewer」は 通常はどちらを使用すればよろしいのですか? また用途や機能の違いなどもご教示いただければ幸いです。 よろしくお願いいたします。
ReportViewerはおまけ。CrystalReportViewerも機能制限版。 あんまり使うもんじゃない。
>833 レスありがとうございます。 調べていたらそれらしい記述にぶつかりました。 警告だけなので無視していきます。
どっちにしろ本当はやっちゃいけないことをやってるんだから一緒 将来バージョンのWindowsや.NETで仕様が変わったりして 本当にマネージコードからは使えなくなったときには AppDomain.GetCurrentThreadIdは削除されるだろうから気付きやすいかもしれない
>>836 ありがとうございます。
ではみなさんは帳票類は何で作っているのですか?
PrintDocument??
サードパーティのコンポーネントを買う
おれは iText.NETでPDFにしてる
そんな変態なURLに触れたくねぇよ・・・
違法ダウンロードは犯罪になるしな。
パケットモニタとかでブラウザでのHTTPリクエストとの差異を調べな
ユーザーエージェント、リファラー、クッキー、getメソッド、postメソッド
WebRequestを作成 webreq webreq.referer = URL ダウンロード
>838 >839 同じスレッドでも、OSに管理されているスレッドと、 コード上のThreadオブジェクトは別物、という感じですね。 前者を後者でラップして直接触れないようにした、と言うべきかな? 今はサンプルいじってる段階なんでどっちでもいーや、ですが、 きちんとしたものを作るならAPI使って取得しておいたほうが無難ですかね。
>>850 >きちんとしたものを作るならAPI使って取得しておいたほうが無難ですかね。
おれもそう思ってAPI使って取得してるけど
>>839 氏のいうことも分る
「本当はやっちゃいけないこと」なんだろうけど、messageboxの表示位置を
指定したいので仕方なく使ってる
メッセージボックス位でやっちゃいけない事やらないといけないなら 俺はめんどくさくても自作する。
>>852 やっぱり自作が一番かな・・・
めんどうだから自作しなかった(ていうかCBTフック使って新クラス作ってた)
けど一から自作も検討してみるかな
>>853 うちはメッセージボックスもどきとエラーの時はVSみたいな概要とエラー詳細が出るようなメッセージボックス2つ用意して使い分けてるよ
あとメッセージボックスは一定時間経過後自動で閉じるオプションとか付けてる
どうせダイアログでメッセージ開くだけなら大したことないだろうし、レイアウトやアイコンも自由だから試しに簡単なの作ってやってみればどうかな?
VB2005使ってます。 自前でクラスを初めて(6.0以来)作っているのですが、 Public Shared にして宣言した変数を外部から代入したりすると警告が出ます。 Public Class hogehoge Public Shared hogege as String End Class Dim hg as New hogehoge hogehoge.hogege = "test" のような感じです。一応これでも代入は成功して参照も出来るですが、本来はどうあるべきなのでしょうか? Newで実体をインスタンスの実体を作ったオブジェクトへの代入に警告が出る理由が今イチ分かりません・・・。 警告文は以下のような感じです。 「インスタンスを経由する共有メンバ、定数メンバ、列挙型メンバ、または入れ子にされた型へのアクセスです。正規の式は評価されません。」
まさにそのままだと思うんだが・・・? 型.変数 ="" だと思うけど?
857 :
855 :2010/01/08(金) 14:48:56
すいません、書き間違えた点がありました。 hogehoge.hogege = "test" ↓ hg.hogege = "test" でした。。
VB2005 + Access TableAdapterを使用してプログラムを作成しています。 連続型のオートナンバー型のフィールドについて質問があります。 オートナンバー型のフィールドの名前を【ID】とします。 データメンテ画面上でレコードを削除(たとえば【ID】は、25)した後、 すぐにレコード追加を行うと、【ID】フィールドに、25と表示されてしまいます。 (さきほど削除したレコードと同じ【ID】) 保存されたデータを見ると、【ID】フィールドには正しく26と入力されています。 この現象は、回避できないのでしょうか?
860 :
855 :2010/01/08(金) 17:39:26
>>858 レスありがとうございます。
一応そこは目を通してあるのですが、
では一体どういう形であるべきなのか・・・が解らないのです。
使えてしまう分だけ、無視していいものか、それとも回避可能な形があるのか解らず。。すいません。。
>>860 意図的にSharedで定義しているんだから迷わずインスタンスからは使わないようにすればいいんじゃない?
インスタンスごとに何かするのならSharedで定義するはずもないし
VB6でいうモジュールの変数みたいな感じになるんだからインスタンス化して使うのは逆に抵抗があると思うんだけど・・・
質問です。 複数のコンソールアプリでApp.Configを作成しました。 設定内容を共通Configで持ちたいのですが 共通Configはどこに作ればいいのでしょうか?
C++にて作成されたDLLを VB.NETから使用する処理を作成しているのですが、 DLL側の関数の戻り値の型が『HANDLE』型となっています。 調べたところ、VB.NETでは『System.IntPtr』型で 対応可能という記述を見つけたので そのように対応したのですが、 正常に動作しない状態です。 原因が戻り値の型の定義ミスなのか、 その他にあるのかの切り分けが出来ない状態です。 『HANDLE』型=『System.IntPtr』型の認識で問題ないでしょうか? なお、下記のようなエラーが発生していました。 『保護されているメモリに読み取りまたは書き込み操作を行おうとしました。他のメモリが壊れていることが考えられます。』
>>863 単純にP/Invokeの使い方を間違ってるだけだから
とりあえず、DLL側のC(?)の関数のプロトタイプと、
Declare部分の定義をさらそうよ。
865 :
863 :2010/01/08(金) 21:11:59
>>864 すみません、自己解決致しました。
引数を指定する箇所に誤りがあり、エラーとなっていたようです。
お手数をおかけ致しました。
>>857 >書き間違えた点がありました。
正しいわけだが。
例えば
Dim hg As New hogehoge, mg As New hogehoge
があったとして、hg の hogege と mg の hogege は同じ場所にあるわけだからして
「インスタンス (ここでは hg や mg) の hogege」ではなく
「クラス (hogehoge) の hogege」と指定するのが正しい。
>>854 なるほど、自動で閉じるオプションはいいかも
ひまができたら簡単なの作ってみようと思う
アドバイスありがと
リストボックスのアイテムを上にずらせないけどなんで? Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click If ListBox1.SelectedIndex < 1 Then Exit Sub Dim S As String S = ListBox1.SelectedItem Dim i As Integer i = ListBox1.SelectedIndex ListBox1.Items.Insert(i, S) ListBox1.Items.RemoveAt(i + 1) End Sub
馬鹿だから
n番目の内容をn番目に挿入して (この時点で同じ内容が並ぶ) 元n番目(今n+1番目)を削除したら、そりゃ元通りになると思うのね。
871 :
デフォルトの名無しさん :2010/01/10(日) 23:19:52
2次元配列のSortメソッドの使い方なのですが、 Dim ar(2, 1) As String ar(0, 0) = "みかん" ar(1, 0) = "りんご" ar(2, 0) = "ばなな" ar(0, 1) = "100" ar(1, 1) = "200" ar(2, 1) = "300" ar(2,1)="300" このような配列を名前で並べ替えたり数量で並べ替えたりしたいのですが Sortメソッドはどのように使ったら良いでしょうか?
できない
2次元配列は他にも何かと冷遇されてるから使わない方がいいよ
配列の配列を使いましょう
でも
>>871 の場合はそういう話ではなくてクラスを使うべきだと思う
そもそも二次元配列を並び替えるって・・・ 一体どういう結果を期待してるんだ? N次元配列がどういうものか根本的に誤解してるとしか思えん。
行で並び変えたいんでしょ そういう場合は,行を表すクラスを作ってそのオブジェクトの配列として扱う
こういうケースはDataTable使うんじゃないの?
>>872 俺は質問者ではないが、ちょっと確認させてくれ。
> 配列の配列を使いましょう
これは具体的にどういうことでしょうか?
私は「構造体の配列」だと思うのですが。
Dim ar()() As String
>>876 「配列の配列」は文字通り「配列の配列」だよ。
dim hoge as Integer()()
例えばこれはIntegerの配列の配列、つまりInterger()の配列。
それからソートするのなら値型より参照型の方がいい。
879 :
871 :2010/01/11(月) 01:10:25
レスありがとうございます。 2次元配列の並べ替えで検索してもあまりそれらしいものが出てこなくておかしいなと思ってたんです。 配列の配列という方法だと思うのですが、Dim ar()() As String の宣言を使う方法で調べてみたら 説明してくれてるページが見つかったのでそれでやってみたいと思います。 ありがとうございました。
>>871 が誤った方向に進んでしまったぞ
どう考えても構造体かクラスの配列にすべきなのに
次善の方法としてはDataTableもありかとは思うが
プログラミングの勉強は、コーディングテクニックだけじゃなくて
設計もいっしょに勉強した方がいいぞ
だってVBだもん
俺はオブジェクト指向の流れを考えると、データの処理を行う都度、 配列を準備してそれを操作なんていうプログラミングをしているのは ナンセンスだと思うけどな。 既存のクラスを活用して、もしくは、クラスや構造体を作って行うのが 本来の方向では?
みんなそれができればVBなんかいらねーよw
いくらなんでもできない人のがよっぽど珍しいレベル
方向性に答えも糞もねぇだろ どうせそのうちこのやり方では難しい時が来たら自然と気がつくだろ
糞はあるだろ
888 :
デフォルトの名無しさん :2010/01/12(火) 18:11:54
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ResultArr As New ArrayList Dim Result(9) As String Dim c As Integer = 0 ResultArr = GetArrList("hogehoge") For Each Result In ResultArr Console.WriteLine(Result(c)) c += 1 Next End Sub Function GetArrList(ByVal str As String) As ArrayList Dim Result(10) As String Dim Ret As New ArrayList For i As Integer = 0 To 9 For i2 As Integer = 0 To 10 Result(i) = i2 & " - " & i Next Ret.Add(Result) Next Return Ret End Function 上のコードで結果を表示すると10 - 0から10 - 9までしか出ないのですが、 0 - 0から9 - 9まで出るようしたいです。 どこが間違ってるか教えていただけないでしょうか。
>>888 何がしたいのかが分からない。
配列のリストが欲しいのか、
単に "1-3" といった文字列のリストがあればいいのか。
890 :
デフォルトの名無しさん :2010/01/12(火) 18:30:21
0-0 0-1 0-2 : : : 10-0 10-1 10-2 10-3 : 10-9 配列の中の数字を全部表示したいです。 Button1_ClickのFor Eachを下記のように書き直しましたが 配列の最後のものしか出てこないです。(10 - 0 〜 10 - 9 の繰り返しが10回出ます) For Each Result In ResultArr For i As Integer = 0 To 9 Console.WriteLine(Result(i)) Next Next
だったら配列は不要。 Dim ResultArr As New List(Of String) For i2 As Integer = 0 To 10 For i As Integer = 0 To 9 ResultArr.Add(i2 & " - " & i) Next Next For Each Result In ResultArr Console.WriteLine(Result) Next
レスありがとうございます。 説明が悪くてすみません。 一覧を表示したいだけではなくて、0-(0-10)、、1-(0-10)という親番号ごとには 配列に格納したいです。 その配列を格納したArrayListから読み出したいです。
突っ込みどこはほかにもあるが、 VBの配列が.NETでは参照型になったにもかかわらず、 記述上は値型のように見えるのが誤解の元だな。 For i2 As Integer = 0 To 10 Dim Result(9) As String ' この位置に注意。 For i As Integer = 0 To 9 Result(i) = i2 & " - " & i Next Ret.Add(Result) Next
レスありがとうございます。 できました。値型、参照型でこのようなのに出くわしたのが始めてだったので勉強になりました。
895 :
デフォルトの名無しさん :2010/01/12(火) 19:45:51
質問お願いします(VB.NET2008EE, VistaSP2) FontChangedイベントハンドラ OnFontChangedメソッドのオーバーライド Fontプロパティのオーバーライド これらのコードのどれか一つを書くとMe.Fontプロパティにイタリック体や太字などの スタイルや、取り消し線や下線などの文字飾りが設定できなくなります。 (Me.Font = Dlg1.Fontなどで設定してもスタイルと文字飾りが設定されない) (上記のコードを削除すると設定できるようになります) どうすればこの状況を回避できますか?
なんというお馬鹿質問・・・
897 :
デフォルトの名無しさん :2010/01/12(火) 19:57:19
895です 自己解決しました 自分で書いたコードの所為でした (他のイベントハンドラに書いたコードが原因でした) スレ汚し大変失礼しました。
>>893 いや、まず値型か参照型か以前の問題があるだろ
そっち突っ込んでやれよ
元のコードの直接のバグは
For i As Integer = 0 To 9
For i2 As Integer = 0 To 10
Result(i2) = i2 & " - " & i
Next
Ret.Add(Result)
Next
だったんじゃないか
で、行と列が入れ替わってるだとかの問題を修正して
それでも思い通り動かなくて参照型の問題になるんだが
>>894 参照型うんぬん以前の問題があるのは理解できてるか?
もとのコードだと、すべての変数が値型だったとしても正常に動いてないぞ
899 :
894 :2010/01/12(火) 20:34:07
ほんとだ 表示のところのi2 - i の並びを逆にしたりしているうちに 気付かないうちに正しくなっていましたが最初のはおかしかったですね
違いが面白い。 ' VB6 Dim i As Integer, j As Integer For i = 0 To 9 Dim t(9) As Integer t(i) = i For j = 0 To 9: Debug.Print t(j);: Next: Debug.Print Next ' VB.NET Dim i, j As Integer For i = 0 To 9 Dim t(9) As Integer t(i) = i For j = 0 To 9: Console.Write(t(j)): Next: Console.WriteLine() Next
901 :
835 :2010/01/12(火) 23:37:50
以前、ここでみなさんからいただいたアドバイスを上司に話して みたところ、サードパーティの帳票ツールを購入する予算もないので VB2005Proに入っている帳票ツールを使うように言われてしまいました。 そこであらためて相談です。VB2005Proのみを使用してシステムを 作り上げる場合、帳票は「Report」と「CrystalReport」 はたまた「PrintDocument」のどれがいいのでしょうか? ざっと見たところ、CrystalReport(.rpt)はある程度の自由度のある 帳票が作れそうですが、Report(.rdlc)はPDFにも出力できるようです。 よって甲乙付けがたいように思えるのですが、実はPrintDocumentが 一番オススメだったりするのでしょうか? と同時にそれぞれの一長一短をご教示いただければ幸いです。 当方の会社はソフト開発とは無縁の会社です。 今回「発注入荷の管理システム」を自社で作ることになり、 (理由はソフト会社へ依頼する予算がないからだそうです) Access.adpをチョロっといじくっていた私にお鉢が回ってきたのです。 では何故、Accessで作らないのかと申しますと、上司が 「長く使えるシステムを作るのならAccessよりVB」と何処からか 聞いてきたらしく、問答無用でVBで作ることになったのです。 (なぜか上司が持ってきたのは2008ではなく、2005でした。) ですので現在、参考書を片手に奮闘中です。 どうかご教示の程、よろしくお願い申し上げます。
For i=1 to 10 i=i+1 RichTextBox.Text &= i & vbcrlf Next 1づつ増えない助けて
VSに付いてるのは体験版みたいなもんだから無いものと思った方がいい そりゃPrintDocument使えば何でもできるけどちゃんとやろうと思ったら システム本体の作成よりもそっちの方に遥かに時間かかるよ
単純なレポートなら、クリリポでもMSレポートでもどっちでもいい。 複雑なことをやりたいなら、PrintDocumentでごりごりやるか、もしくはExcelってのもあり。
Excelがいいな
>>902 forを書く時は、stepを書くように心がけよう
帳票の話は、
>>212-214 あたりでも同じようなものが出てる。
そっちも参考にすると良いと思うよ。
>>901 > 「長く使えるシステムを作るのならAccessよりVB」
何を根拠に言っているのか分からないが、インターネットから切り離した
ネットワークで、WindowsUpdate等を行わせなくて、別なソフトを勝手に
インスコしないという状況だと、長く安定したシステムが構築出来る。
AccessとかVBなどは関係が無い。
複数同時アクセスが多い状況であれば、Accessの方がファイルが壊れる
などのトラブルがおきやすいというのはあるが。
(VBでもネットワーク障害などのエラーでデータの再入力の手間は必ず
発生する。)
「オブジェクト」ってなに? 「コンストラクター」って?
オブジェクト すべてのクラスの基本型 コンストラクター クラスのインスタンス作成したときに勝手に呼び出されちゃうへんなサブルーチン
914 :
デフォルトの名無しさん :2010/01/13(水) 10:10:00
だいたい,VBならなんでもできるからちゃんと作ればよいものも作れるというだけのことであって, 初心者が無理にVBで作ってAccessで作ったものより信頼性のあるものが作れるわけないだろ
内製の時代が来てるな
オブジェクト 対象の男 コンストラクタ 後の処女膜貫通儀式
ボタンの文字を Past&OK にしたいのに &をかくとへんになっちゃうからふつうに Past&OK というボタンテキストにしたいどうすれば
&&
Past&&OK
ためしてみるなり
ニーモニックなんかつかわねえよ、というのならUseMnemonicをfalseにしちゃうのもあり
コントロールの背景色が黒だった時、の処理をしたいんだけど If Button1.BackColor = Color.Black Then だとエラーになってしまいます どうすればいいんでしょうか? よろしくお願いします
まずは、エラーの内容を確認してここに書く。いつエラーになったかも忘れずに。
924 :
922 :2010/01/13(水) 14:58:39
>>923 System.Drawing.Colorでは演算子(=)は使えないと言うエラーだったと思います
エラーになったのは書いた時に出るエラーメッセージです
言い忘れてましたが環境は2003です
じゃあ If Button1.BackColor Is Color.Black Then で
つか、それでエラーにならんぞ
わかった If Button1.BackColor.ToArgb = Color.Red.ToArgb Then だ
928 :
922 :2010/01/13(水) 15:08:08
>>925 'Is' 演算子は型 'System.Drawing.Color' のオペランドを受け付けません。オペランドは参照型または Null 許容型でなければなりません。 C:\Documents and Settings\ryu\Local Settings\Application Data\Temporary Projects\WindowsApplication1\Form1.vb
と言うエラーが出て行けませんでした
>>926 2003ではエラーになりました
今手元に2003が無いので詳しく確認出来なくて申し訳ない
>>927 2008で行けました!
ありがとうございます
これでやって行きたいと思います
回答下さった皆様ありがとうございました
ニーモニックねなるほろ
931 :
922 :2010/01/13(水) 15:17:07
>>928 .NET1.1にはop_Exualityが無いのかと思ったがしっかりあった。
それでC#では==で大丈夫だった。昔のVBは難儀だったんだね。
普通はEqualsを使うのだがBoxingがないだけ.ToArgbのほうが速いかもしれない。
If Color.Equals(Button1.BackColor, Color.Black) Then
>>914 問題が摩り替わってないか?
VBがいいかAccessがいいかを
>>901 は聞いているんじゃないだろ。
VBを使わざる得ない状況にあって帳票はどれがいいかを聞いているんだろ。
俺はAccessが使えているのであれば、作り方は違うが
CrystalReportだと、Accessのレポート近い雰囲気の物を作れると思うぞ。
PrintDocumentは
>>905 や
>>906 が言うようにプログラムを
ごりごりと書かなければならないから、君にはちとつらいと思うぞ。
といってみたかっただけ。
↑人に文句を言うだけで自分では何も解決出来ないオタクがいますよ。
フォームアプリでForNextの繰り返し処理中にフォームを閉じると タスクマネージャー上でイメージ名の一覧から中々消えないのですが すぐに完全に終了にするようにするにはどのように書けばよいですか?
時間のかかる処理はスレッドにする。 または、ループ内で頻繁にDoEventsをcallする。
Microsoft Visual Basic 2008 Express Edition をインストールしました。 新規のフォームアプリケーションを開いて実行してもすぐに実行が終わってしまいます。 なぜでしょうか? あまりにも初歩的な質問ですみませんが、本気でわからないです。 ウインドウズアップデートで最新状態にもしました。 他のPCでは、インストールするだけで、普通に使えるようです。 よろしくお願いします。
>あまりにも初歩的な質問ですみませんが、本気でわからないです。 質問の仕方が初歩的な点、および本気でわからない点にも同意しておこう。 せめてステップ実行して、どこで終了してるかくらい調べたら?
941 :
939 :2010/01/13(水) 22:52:44
まったく何もコードを書いていない状態です。 普通なら、実行すると、なにもないフォームが表示されると思います。 ところが、実行すると何も表示せずに、終わってしまいます。 インストールがうまくいっていないようです。 VB2008のインストール以外にも必要なことがあるのでしょうか?
一回アンインストールして入れなおしてみたら?
Mybase.Load Application.Exit()
なんかおかしいね。ステップ実行してもダメなの?
どうせ 下手にデザイナいじったんだろう
947 :
939 :2010/01/14(木) 00:06:15
再インストールしてもだめでした。 よくわからないものを、いろいろアンインストールして、もう一度入れなおしてみます。 ありがとうございました。
コンソールアプリなんじゃね?
テキストボックスをインプットボックスみたいに モーダルにしたいんだけど、いい方法ないですか?
>インプットボックスみたいに ない。自分で作って ShowDialog() しる。
951 :
950 :2010/01/14(木) 04:05:28
きゃほー!C#スレと間違ったぜー! orz
質問者が何を聞いているのかという点では、
>>934 のいうことももっともだと思うが、
AccessよりもVBという考えは間違いでもあるので、そのあたりの情報を収集し、
上司を説得する方法も考えた方がいいと思う。
VB.NETに関係する部分はこのスレで引き続き質問出来るわけだし。
上司を説得するなんて仕事してたら無理ってわかるようなものなのに
えっ!? キミがリストラされた会社ってブラックリストに有るんだ。
<samplelist> <sample> <test>test</test> <testlist> <factor> <factor1>100</factor1> <factor2>1</factor2> </factor> </testlist> </sample> </samplelist> 上記のようなXMLをDOMとXPathで読み出したいと思っています (<sample>、<factor>要素は実際は複数存在します) <sample></sample>の中のデータをsampleクラスのインスタンスに それぞれ落とし込んで管理しています。 XMLnodelistにSelectNodesでそれぞれの要素のリストをつくって 取り出せないことはないのですが、データの抜き方が気持ち悪いです [samlpelist]-[1番目のsample]-以下それぞれの要素に処理 というような処理は可能でしょうか
>>955 selectNodes(".//*")
だが
>>901 の上司はいわゆる部下の提案など聞かないタイプ
実際に彼がVBで作ったものを上司に見せれば上司も考えを改めるだろう 悲惨な出来になるのは間違いないから
>>956 XPathについての知識が全然足りないということが分かりましたので
ロケーションパスをしっかり把握できるぐらいまで学習します
ありがとうございました
で、どのレポートツールがいいかって話はどうなった?
962 :
955 :2010/01/14(木) 22:02:46
>>956 ありがとうございました。
やりたいことが形にできました。
>>938 レスどうもです。スレッドでやってみようと思います。
VB2008EEを使っています。 Color構造体って TextBox1.BackColor = まで書いた時に列挙体のように候補が出てくるんですが、 これを自作構造体でやるにはどうすればいいですか?
>>964 Sharedで自分自身の型のプロパティを書く
Color構造体のメンバ一覧をまず見れ
ボタンを12,12等のサイズにしてbackcolorを黒にし、Textに何も入れない時に点線みたいなのが表示されます 点線を無くし、ただの黒いボタンにするにはどうするのでしょうか?
>>967 それ、オブジェクトを選択したときの表記の点線じゃないの?
>>968 ・・・!
どうもそれみたいでした
消す事って出来ないのでしょうか?
>>969 ボタンじゃなくピクチャーボックスとかラベルにすればいいんじゃない?
>>970 ボタンでやりたかったのですが無理っぽいですかー
諦めてこのままやります!
ありがとうございました
Buttonクラスを継承して独自のボタンを作ります。 この独自クラスでは、コンストラクタあたりでSetStyleメソッドを呼び出して、 スタイルからControlStyles.Selectableを外せば、選択できないボタンになり、 結果として点線の枠線はでなくなります。 だそうだ
できた Public Class Class1 Inherits Button Sub New() Me.SetStyle(ControlStyles.Selectable, False) End Sub End Class
なんというか・・・・うん・・・
なんだよー
HttpWebRequest クラスでサイトにアクセスしたいのでヘッダー情報を設定したいのですが メンバの一覧に出てこないヘッダー(サイトの固有?)はどうやって設定したら良いでしょうか?
HeadersにAddする
>>977 ありがとうございます。できました。
webreq.Headers.Add("Host: www.hogehoge.com")
webreq.Headers.Add("Proxy-Connection: Keep-Alive")
この二つの設定が通らないのですが、どうやって設定すれば良いでしょうか?
HostはWebRequest.Createで指定したURLのホストに強制的に設定 変更できない Proxy-ConnectionはProxy設定してKeepAlive=Trueで
980 :
964 :2010/01/16(土) 00:30:26
>>966 すみません、質問がわかりにくかったかもしれません。
= を書いた時点でインテリセンスを働かせて候補を出したいという意味です。
Private _myBackColor As MyColor
Public Property MyBackColor() As MyColor
Get
Return _myBackColor
End Get
Set(ByVal value As MyColor)
_myBackColor = value
End Set
End Property
Public Enum KnownColor As Integer
Red = 1
End Enum
Public Structure MyColor
Public Sub New(ByVal knownColor As KnownColor)
Me.value = CShort(knownColor)
End Sub
Private ReadOnly value As Short
Public Shared ReadOnly Property Red() As MyColor
Get
Return New MyColor(KnownColor.Red)
End Get
End Property
End Structure
を記述して、Me.MyBackColor = まで打ってみましたが
Color構造体のように候補はでませんでした。わかる方いましたらお願いします。
こうなってくるとプログラマーというより、 Visual Studio ユーザーだな。 マニュアル嫁。
>>980 んー、確かにColorのStatic Readonlyプロパティがインテリセンスに入力候補として
いきなり出てくるのは不思議。
何かそういうことが可能になる属性でもあるかと思って調べてみたが、
今のところ見つからない。
さっき気付いたけど、これVBのみでC#はない機能のようだから、
ひょっとするとVB専用にIDEレベルでColorを特別扱いするように実装されてるのかも。
>>981 980はそうおかしなことは言ってないぞ。
何がマニュアル嫁だ馬鹿かw
超初心者です。 コンボボックスで初めから選択肢のうちのひとつを選択させておきたい (要するに標準の選択肢を用意したい)のですが、 プロパティの中にもそのような項目はありませんでした どうすればよいでしょうか。 当方visual basic 2008 express editionをつかっています。
超初心者が来るスレでは無いです。 初心者にジョブチェンジしてから来て下さい。
HttpWebRequest クラスでサイトにアクセスしたいのですが、 最初にIDとパスワードを使ってログインしなければならないのですが、 IDとパスワードをPOSTするアドレスがhttpsのため、普通の方法では駄目なようなのですが、 対処方法を教えて頂きたいです。
コンボボックス.SelectedIndex = 10;
>>986 ん?httpsでも何も変わらんと思うが、普通の方法ってどんな方法?
990 :
980 :2010/01/16(土) 03:37:25
>>982 >VB専用にIDEレベルでColorを特別扱いするように実装されてるのかも。
C#で出ないならその可能性が高そうですね。
構造体でのインテリセンスは諦めることにしました。
ありがとうございました。
別のアプリケーションもしくは特定のアプリケーション実行中に ワンキーでForm1のウインドウをアクティブにしたいんですけど どうすればいいですか?
ローレベルフック。コンビネーションでよければホットキー。
もう少しわかりやすくお願いします
とりあえず単語でggrks Windowsツールを使ったことあるならホットキーくらいは知ってそうなもんだろう
VB.netってC#とどういうつながりなんだろう C#のほうはVS2008であったけどVBにはなかったい自動実装プロパティいれたり・・・ C#でテストしてからVB作ってるのかな
996 :
デフォルトの名無しさん :2010/01/17(日) 18:53:49
MSの中の人が使ってるのは基本的にC#だからMSの意向がより早く反映されるんだよ
ああ、それは元々C#はVSのインテリセンスとかの恩恵を最大限に受けられる事を前提に マイクロソフトが開発した言語なわけで、VBとはちょっと思想が違うんでしょ だから、新しい機能とかはVBよりも選考してC#側で取り入れているんじゃないの LINQの記述方法がfromからだったりするのもインテリセンスが影響しているとか
VPNや専用回線やaspxを使わず、Windowsフォームから離れた施設の SQL Server 2005 Express にネット経由で接続することは可能でしょうか? 一応、サーバーがある施設はダイナミックDNSの登録はしてありますが。 ConnectionString の DataSource に ドメイン名:ポート番号 を記述しても うまく接続してくれません。 もし接続&データ取得が可能でしたら、どうかその方法をご教示下さい。
>>998 すすめはしないがサーバーやサーバー側ルータの1433tcp/1434udpポートを空けとく
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。