乙
6 :
デフォルトの名無しさん :2005/11/09(水) 23:37:27
クラスを内包させる理由がわかりません。 class OuterClass { public InnerClass{} } ってなぜ内包させるの? private等でならわかるが・・・
>>6 class ListView.Item ...
class TreeView.Item ...
こういうノリ。
8 :
デフォルトの名無しさん :2005/11/09(水) 23:45:24
ネストクラスからは外クラスのprivateメンバが見えるというのもある。普通はstaticメンバしか使えないわけだが、 class OuterClass { private int id; public class InnerClass : OuterClass { public int GetId() { return id; } } } なんてコードも有り。乱用はできないが。
10 :
デフォルトの名無しさん :2005/11/10(木) 00:02:45
PCのマイクで喋った言葉を録音して再生したいんです。 DirectShowっていうので出来るっぽいんですが、良い資料とかサンプルはありませんか?
11 :
10 :2005/11/10(木) 00:03:22
C#からDirectShowを使うっていうことです。
Managed DirectXの記事ってのはほとんど無いので、C++辺りのDirectXの記事を流用。
13 :
デフォルトの名無しさん :2005/11/10(木) 00:45:44
俺は9ではないがJavaとの相互運用を考えるようになってからは プロパティを使いたくなくなった
15 :
デフォルトの名無しさん :2005/11/10(木) 00:59:23
質問です。 皆さんはC#をどうやって勉強したでしょうか? 専門学校とか大学で勉強してるのでしょうか? 私は、一から本で勉強してるのですが、自分でちょっとオツムが足りないのかなとへこむほど なかなか先に進めません。 どっか、学校に行った方がいいのでしょうか・・・・。
マジレスすると学校いってもしょうがないと思う。たぶんレベル低い。 できれば知り合いとかにいて色々どんな風にやってるのか見てみるのがいいと思うけど。 とにかく自分で何か作ってみるべし。
>>14 getter、setterメソッドを見るとJavaの泥臭い部分を思い出すので素直にプロパティを使ってください。
Javaがとっととプロパティサポートすればいいんじゃね?
enumが付くくらいだからプロパティが付いてもおかしくないか
21 :
デフォルトの名無しさん :2005/11/10(木) 02:15:08
何も知らずにいきなりC#始めたら、そりゃなかなか理解できんだろうな。
そもそも学校でC#とか教えてくれるのでしょうか。 教えてくれる知り合いがいればいいですが、いないですし・・・・。 本読んでやるしかないのかな・・・。
>>22 とりあえず貪欲に(C#に限らず)本読みまくってコードを書きまくる。
MSDNをただ読むのもいいな。あれはこれ以上にない参考書だな。
そのとき分からんでも2度目3度目は段々分かるようになるものだ。
人のコード読むのもよし。
ぶっちゃけ継続的にやり続けていくしかないな。どうせどこまでいったって
ずっと勉強し続けなければならんのだから独力で勉強できるようになっと
いたほうがいい。
PrinterSettingsの内容を保持して、次回起動時に設定内容を復元したいのですが XmlSerializerなどではエラーで保存できませんでした 何か良い方法ありませんか?
[Serializable] ってのが付いてるだろ
26 :
デフォルトの名無しさん :2005/11/11(金) 00:35:41
DataSetを使って、図書データなどを保存して、検索する。という物を作った場合 100MBのDataSetを使うと、必ずメモリに100MBのデータを読み込んでしまうのでしょうか?
27 :
デフォルトの名無しさん :2005/11/11(金) 03:10:47
なにいってのこのしとは?
掲示板で回答もらうのと、テストで組んでみるのってどっちが早いんだろうね。
いまVS2005つかってるんですけど、C#の開発にEclipse使ってる人います? C#の開発に特化する場合でEclipseの使い心地どうなのか知りたいです。 インテリセンスとか、リファクタとか。ぜんぜん知らないんですが、色々な連携するならEclipse、C#だけならVS2005というイメージがあります。
今2chブラウザつくってるんだけど、webBrowserを使わずに仮想ブラウザ機能をつくりたいんですよ。 何を使って作るのがベストでしょうか?
Control から派生させる
仮想ブラウザとやらがどんなのを目指してるのか分からないことにはさっぱりだ。
ブラウザコンポーネントを使わない2chブラウザって OpenJane Doe 以外になんかあったっけ
このスレC#で検索しても出てこないと思ったら・・・ C♯かよ 表記統一しろよ
#はスレタイにできねぇんだよ馬鹿
プログラム板だけ特別に#付きでスレ立てられるようにしてもらおうぜ
#なら立てられるだろ #だと#で検索しても引っかかんだよ とか思ったが、#のスレって変なのが多いのな このまま♯でいいよ(´・ω・`)
ハッシュはお門違いだしな
42 :
デフォルトの名無しさん :2005/11/11(金) 20:41:33
ListView
あとはButtonだな、一応w
45 :
42 :2005/11/11(金) 20:58:23
>>45 ユーザ登録すればソースコードをダウンロードできるでしょ
>>27-31 ありがとうございます。
データベースは使わずにお手軽に大量データを扱いたい。
検索などが遅いのはよいけど、データのロード(初動)に時間をかけたくない。みたいな感じで何かないかと
微妙な質問でした。
48 :
デフォルトの名無しさん :2005/11/11(金) 23:02:45
Windows2000 IE6.0 ASP.NETでC#でつくってます。 画面にテキストボックスやチェックボックスが縦にいくつか並んでいます。 それをDBに保存するのですが、未チェックや未入力箇所があったら その箇所が分かるように画面を自動スクロールして該当箇所が分かる ようにする方法を教えてください。 それか最下部に移動でもかまいません。 現状では更新ボタンを押すとPostBackして必ず画面の最上部に移動してしまいます。
上司にC#よりC++の方がいいって言われたんですが、 どうなんでしょうか?
状況も分らずこたえられるわけなかんべ
>>37 …「#」は「ナンバー」で「♯」が「シャープ」なんだよね…
>>25 XmlSerializer使ったらエラーになったので質問しました。
C#2003じゃダメだったけど、試しにC#2005でやったらできました。
英語キーボードではシャープを簡単に入力できないから ナンバーと表記してシャープと読むということらしいぞ
Windows FormsでTreeViewとListViewを使ったプログラムランチャーを (ツリーでグループを作り、リストに項目を並べる) 考えてるんですが、グループをクリックしたら、そのグループに属する 項目をリストに表示、というのが、どうやったらいいのか意外に思いつきません。 ファイルシステム相手なら、FullPathとDirectory.GetFilesでいいんですが どこかにサンプルとか考え方紹介してるところはないですか?
TreeViewItem.Tag にでもぶち込んどけば
TreeNodeを派生さてList<T>とかを返すプロパティつける
57 :
デフォルトの名無しさん :2005/11/12(土) 01:31:32
>>50 状況によって
C# > C++
なんてことありえるか?
正直C++で表現できないプログラムはない
C++で書こうがチューリングマシンと同レベルのことしか出来ませんよ
C++だといろいろ面倒だってことでしょ。 C++のがポータビリティがあって当たり前
60 :
デフォルトの名無しさん :2005/11/12(土) 02:20:09
C++だといろいろ面倒??? 意味不明 あなたが使えないだけでは?
言語の優劣について語ろうというのなら 「理解が容易である」というのも評価基準になるだろう。 そもそものプログラミング言語の原点はそこなんだから。
63 :
デフォルトの名無しさん :2005/11/12(土) 08:44:17
Microsoft MVP for Visual C# なんてのはメールの署名に入れている人はアフォ1確でよねw
>>57 状況によって
C++ > アセンブラ
なんてことありえるか?
正直アセンブラで表現できないプログラムはない
>>64 状況によって
アセンブラ > 機械語
なんてこt(ry
66 :
デフォルトの名無しさん :2005/11/12(土) 09:08:19
アセンブラで出来なくて、機械語で出来ることってあるの?
まあいいや、
>>64 はうまいな
>>66 未だに01で打たないといけない分野もあるんだよ♥
状況によって キーボード > トグルスイッチ なんて(略)
69 :
デフォルトの名無しさん :2005/11/12(土) 12:22:52
JAVA最強
70 :
デフォルトの名無しさん :2005/11/12(土) 13:57:02
JavaのFindBugs(静的コード分析ツール)に対応する、C#用のツールって どういったものがあるのでしょうか(商用/非商用問わず)。
71 :
70 :2005/11/12(土) 14:18:04
72 :
51 :2005/11/12(土) 14:33:54
c#つかってwindows のDNSサーバの操作ってできますか? ホストの追加とかその他もろもろ。。
# # ナンバー ♯ シャープ
75 :
デフォルトの名無しさん :2005/11/12(土) 15:20:26
コンテキストメニューやらメニューが複数あるアプリケーションでコマンドの管理ってどうやってる? UserControl1にもメニューとコンテキストメニューがあって UserControl2にもメニューとコンテキストメニューがあり、一部共通、みたいな どこかのクラスで管理しておいて、UserControlができるときにコードで割り当てた方がよいのかな
>>66 アセンブラはアセンブラの実装以上のことはできない
たとえば昔のアセンブラだとMMXが使えない
どう失敗してるのかも分からないのに答えられるわけ無いだろ ソースがあるんだから例外トラップぐらいしろと
79 :
デフォルトの名無しさん :2005/11/12(土) 19:14:11
基本的な質問なんだけど、 Debug版のexeとRelease版のexeってどう違うの? サイズとか動作速度とかが違うの?
>>79 最適化は、Debug 版はデフォルトでオフ、Release 版はデフォルトで ON になってる。
あと Debug 版にはデバッグ情報が入ってる。実行速度には影響しないけど、これ公開すると痛い人は痛い。
痛いとか以前にライセンス違反ですから
82 :
79 :2005/11/12(土) 19:35:29
レストンクス 配布は基本的にReleaseってことか
hImageSmall = SHGetFileInfo(value, 0, ref shfi, (uint)Marshal.SizeOf(shfi), SHGFI_ICON | SHGFI_SMALLICON); bool ret; ret=CloseHandle(hImageSmall); ret=CloseHandle(shfi.hIcon); で取得したハンドルを開放するにはどうしたらいいんでしょう?CloseHandleで開放しようとしてもfalseで帰ってきてしまい、GDIやUserを食いつぶしてしまいます・・・(´・ω・`)
84 :
デフォルトの名無しさん :2005/11/12(土) 20:45:04
DesignerSerializerを指定しないときの DesignerSerializerって何が使われるんでしょうか? (デフォルトって意味で)
>>83 ちゃんとMSDN読めよ。
> If SHGetFileInfo returns an icon handle in the hIcon member of
> the SHFILEINFO structure pointed to by psfi, you are responsible for
> freeing it with DestroyIcon when you no longer need it.
読み込んだ8bitBMPファイルのカラーパレットとピクセルデータを 取得したいんですがざっくりとでもいいんでやり方教えてください
87 :
86 :2005/11/13(日) 03:25:21
BitmapDataというやつでピクセルのインデックス情報は取得できるのですが、 カラーパレットをどう取得していいのか分かりません。
88 :
48 :2005/11/13(日) 03:31:54
WebProg板というのがあったのでそちらで質問します。失礼しました。
89 :
86 :2005/11/13(日) 05:15:10
Bitmapの方にPaletteってのがあるのに気づきました。。失礼しました。
90 :
デフォルトの名無しさん :2005/11/13(日) 05:27:11
sn
class a{ public static event A B } ってやると、 a.Bでアクセスできるけど、(new a()).Bではできないのね。 半日悩んだ… C++のstaticもこんな仕様だっけ?
そんな汚らわしい表記無くて結構
C++でも無理だろ、そんな表記
>>91 インスタンスからstaticメソッド呼べるのを見るとJavaを思い出すよ……
C# 3.0 では extension method で同じようなことになってしまうわけだが
つかえねぇ。まじでつかえねぇ。 多重継承使えないので内部データ的にツリー構造で管理されるべきWindowがあるんだけど、そのWindowの親を知りたいときに多重継承できれば class Window:WindowBase,TreeNode{}とやってWindow自体が親のポインタ知れるのに、 できないからしょうがなくWindowに親のポインタセットするとかへんなことしなきゃ何ね。 すごい汚い(´・ω・`)ショボーン
>>95 拡張メソッドは自分自身を引数に渡すんだから文脈が違う。
パブリック親ポインタプロパティはデフォだね。
プロテクティドとパブリックの間のアクセス修飾子がほしいな。確かに。
internalなり内部クラスなりがあるじゃないか
は?
102 :
デフォルトの名無しさん :2005/11/13(日) 19:46:53
>>96 なぜC++つかわないの?
C#なんてマジ使えないっていうか、ほとんど使われていませんが?
みんな使ってるというのは開発環境選択の根拠としては弱いよ
>>102 ご飯のない民衆にケーキを食べればいいのにといってるようなもんだな。
開発環境が、アトリビュートみて、リフレクションしてメソッドを補ってくれるのは便利。 今後、こういう開発が主流になるのかな。
VC++ってVB使ってる奴と同じ扱いになるんだろな
>>107 Windowsアプリケーション開発においてはな。
109 :
デフォルトの名無しさん :2005/11/13(日) 22:40:46
VC++6は今までの開発環境の中では最強だよ VB,VC#なんてVC++6と比べたら鼻くそ
>>109 C++使えるならC#なんて造作もなく(それこそ流し読み程度で)覚えられる代物なのに
お前は本当にC++使えるのか?
変なのが迷い込んで来たな・・ そういうもれもvc7.1使いだが vc7.1>>超えられない壁>>vc6ですよ
vc8>>超えられない壁vc7.1>>超えられない壁>>vc6
Lisp>>>>>Java>>C# >vc8>>超えられない壁vc7.1>>超えられない壁>>vc6
vc6>>>>越えられない壁>>>>>Lisp
低レベルのタイトな部分はVC++でDLL作って C#でGUI作ってウマーじゃないの? 俺空気読めてない?
そこまでするなら全部C++でいいんだよ
あっちだって.NETでいいなら大差ないんだから
>>110 考え方や文化が別物
>>115 いや、こいつらは低レベルっていうとファビョる奴らだからw
>>115 それをやるにはC#のGUIがもっとさくさく動いてくれないときついんだけど。
GUI以外はそれほど気になるほど遅くないんだけど。
結局VB6+VCっていうパターンになるんだな
なんねーよw
ATL+.Netならオケ MFCは終了。
GEnericsになれるとVCのテンプレートのエラーメッセージの不可解さには泣けてくる。
>>122 Genericsもリフレクション使って開発環境がクラスに展開してるのかな?
アセンブリにGenerics情報つけといて、起動時にリフレクションしてるのかな?
どっちだろ。
そう考えると、アトリビュートのシリアライザブルなんかも、起動時にメソッド
足してるんだろうか?
型パラメータによって最適化された型を実行時に作成
インターネット上に存在する音楽や画像などのデータを保存するには どのようにしたらいいのですか?
馬鹿は WebClient でも使ってろ
馬鹿じゃないけどWebClient使ってる
俺も俺も
じゃあ俺はFirefoxで保存する。
俺はwsock使って直接やってる、これ最強
132 :
デフォルトの名無しさん :2005/11/14(月) 22:21:55
C#っていうか.NET Frameworkで、プロパティシートってありませんか? OK, キャンセル、適用ボタンとタブコントロールでできているダイアログです。 自作すると適用ボタンの有効化が面倒なのです(全コントロールに変更イベント ハンドラを追加しないといけないから)
>>132 プロパティグリッドならあるが。
というか一回自作すればあとはそれを使いまわせる気がする。
134 :
デフォルトの名無しさん :2005/11/14(月) 22:48:10
RichTextBoxを普通にフォームに貼り付けて使ってます。 フォームのOpacityを0%にして、完全に透明にしつつ、文字の表示だけ不透明にすることって出来ますか? フォームもRichtextBoxも透明な状態で、デスクトップ画像を背景に、文字だけが浮かんで見えるようにしたいんです。
Form.Region で RichTextBox だけ表示されるようにしてから Form.TransparencyColor に RichTextBox の背景色を指定するとか
>>118 GDI+が遅いんじゃないのか?
コントロールの描画コード書いてて思うんだが、DrawImageが物凄いボトルネックになる。
BitBltにしたら、Graphics系→GDI互換ハンドルの変換オーバヘッドで余計に遅くなった orz
もうちょっと速いDrawImageみたいなメソッドはないだろうか…。
DrawImageはパラメータの指定の仕方で劇速から劇重まで変化するよなー
パラメータっていうか、オーバーロードな。 矩形選択が遅いのは使いづらい。
どの指定の仕方が遅いとか早いとかの一覧ってどこかにないんですかねー
確かに30個もあるとやる気がうせるな
リストクラスのようなもの作ってるんだが、行の移動やスクロールでCPU100%近くいく・・・orz 確かに色々余計なことやってるんだけど、遅すぎ。
どこまで効率が悪いリストなんだ
・static class → VB の標準モジュールと同じ ・LINQ → PL/SQL と同じ あってるかな
C#でMSDEとかつか運場合、何で接続するのが早いの?
とかってなんだ とかって
MSDEとかアクセスとかSQLサーバーのことと思われ
148 :
141 :2005/11/16(水) 03:13:38
んースクロールだと次のような感じにやってるんだけど何が間違い? ダブルバッファー使用 15行表示していた場合で一行移動するときの残りの14行分をバッファーのビットマップからテンプのビットマップに転送、 それを元のビットマップにずらして転送、画面に転送 ずらしたぶんを内部データから描画。 計3回ビットマップ転送してるのが遅いのか?
あるオブジェクトのクローンを作るメソッドは何でしょうか? Hoge hoge1 = new Hoge(); Hoge hoge2 = hoge1.Copy(); でhoge2を消したり中身を弄ってもhoge1には影響しないようにしたいのですが
仮想リストビュー使ってるか?
151 :
141 :2005/11/16(水) 03:23:02
そのぐらいググレよ・・
>>149 System.ObjectにはprotectedメソッドとしてMemberwiseCloneメソッドがある。
一般的には、ICloneableを実装してそれで処理する。
154 :
141 :2005/11/16(水) 14:58:25
失礼しました。見てきました。今は全部独自実装してるので仮想リストビューは使っていません。 List<>で管理されるデータを更新に必要な部分だけ参照するようにして表示などを行っています。 ただその表示においてスケーリングなどをサポートするために裏に色々な仕組みを入れているのでかなり遅くなってるとは思います。
>>148 取り敢えず、どの処理がネックになってるのかを探すのが先だと思う。
その上で、
・画面からバッファに対してスクロール後の位置に転送。
・バッファに対して、未描画部分を描画。
・バッファから画面に転送。
の方がマシな気がする。
つーか、Win32で言う所のScrollWindowEx()らしきものは無いのかな?
…無さそうね。(涙)
156 :
155 :2005/11/16(水) 16:03:27
157 :
141 :2005/11/16(水) 17:05:08
>>155 ですね。2005express入れたらパフォーマンス関係のツールが消えたのがネックですが。
現在画面のサイズと同サイズのビットマップを作って画面状態を保持しています。
画面からバッファにコピーというのも可能なんですか?そうすると一手間省けますけど、いまいちデータソースとして信用ならない気もしますが。
ScrollableCotrolとかは、現在独自にUI周りをControlなどを使わないで実装してるので使えないです・・・
158 :
155 :2005/11/16(水) 17:37:09
DllImportは積極的に活用すべき そうすればmonoを排除できる
排除することに何の利点が?
気分が晴れる
162 :
デフォルトの名無しさん :2005/11/17(木) 01:39:17
1つのソリューションに17程度のプロジェクトがあるソリューションがあるのですが、 IDEは重いし、エディタも使いづらいのでコマンドラインからメイクしたいんですが、 どうすればいいのでしょうか?
MSBuild.exe にソリューションファイルを渡す
2005の対応は知らんけど、nantも結構便利だよ。
>>162 VS2003なら
devenv solution.sln /build Release
だっけかな
166 :
デフォルトの名無しさん :2005/11/17(木) 21:06:20
メモリ容量よりも大きなファイルの暗号化に対応するため、 ファイルをメモリに10MBずつ読み込んで暗号化処理して、 それをHDに書き込んでから次の10MBを読み込むようにしたいのですが、 どのようにすればその機能を実現できますか?
気合で
1.ファイルをメモリに10MB読み込む 2.暗号化処理 3.HDに書き込む 4.1に戻る
つか.NETなら暗号化にCryptoStream使うのが自然だし、 それなら読み込み・書き込み・Flushを繰り返していけば良いじゃん
170 :
デフォルトの名無しさん :2005/11/17(木) 22:21:51
System.Diagnostics.Debug.WriteLine("スタート!"); で出力ウィンドウに出力されない なにか設定が必要ですか???
>>170 Debugビルドじゃないと表示されないけど、大丈夫?
>>170 Output をリダイレクトする設定にしてないんじゃね?
173 :
デフォルトの名無しさん :2005/11/17(木) 22:39:58
>>172 Output をリダイレクトする設定とは
どこを確認すればいいですか?
設定ダイアログを全部見直せ
175 :
デフォルトの名無しさん :2005/11/17(木) 23:11:48
解決しました
C#は画面周りをGDI使うようにすれば少しは早くなるんか?誰か試した人居る?
>>176 Windows Forms 2.0で
GDI+→GDIになった
その方が速いからだろ? 一応一括で切り替えられる DrawingはGDI+のままだぞ
ということはあまりきにしないでつかっててもGDIの速度を得られてるっていうこと?
DataTableに一行ずつ行を追加していくと 追加した順番にDataTableに格納されるのでしょうか? あいうえお かきくけこ さしすせそ つまり,DataTable型の変数tableにあ行から順に追加した場合 table[2][1]でアクセスすれば「し」が取得できることは保障されるのでしょうか?
保証はされない 実装依存
184 :
デフォルトの名無しさん :2005/11/18(金) 16:33:39
初心者、質問お願いします。 「普通、変数は プライベートに設定して、パブリックのプロパティーや関数で変数を使う」と読んだのですが、 プロパティーや関数で外のクラスから変数を知ったり、変えたり出来るなら、変数はパブリックにしても問題ないと思うのですが、なぜ変数はプライベートにするのですか?
しばらく使ってたらわかる
getXXX、setXXX方式だとセッタ読んでるとこだけ検索とかできるけどプロパティだと見つけづらくない? VS2005だとgetの方にカーソル合わせて呼び出してるとこ一覧とか出せるのかな?
>>184 例えば、縦・横・面積を持つクラスがある場合、クラスに変数として
int height, width, area ;
とか宣言して、プロパティに
int Height { get { return height ; } set { height = value ; area = width * height ; }}
とか書くと、privateにする意味がわかると思う。
このように変数の値を変更することによって、クラスの状態が変わる場合に、
変数はprivateで宣言し直接操作できないようにし、プロパティへのアクセスで
値の変更に伴う処理を行うことで便利。
変数の値の変更に処理が伴わないのであれば、publicでint Height とか宣言してても
かまわないし効率はいいと思うが、オブジェクト指向厨とかがいちいち突っ込んでくる場合がある。
その場合は、「オブジェクト指向って何?」とかいってわからない不利をしたり、
説明されても、「難しくてわからん」といって、あまり相手をしないほうがコーディングは進む。
> 効率はいいと思うが JITコンパイルされる時にインライン展開されるので効率は変わらないはずでは。
>>184 双方向データバインディングとか使うとありがたみがわかるかも
public string Name {
get {
return name;
}
set {
name = value;
if (NameChanged != null) {
NameChanged(this, EventArgs.Empty);
}
}
}
191 :
デフォルトの名無しさん :2005/11/18(金) 18:00:53
>>189 「双方向データバインディング」ググったけど検索結果0でしたが、SET で if を使えばありがたみがわかるということですね。
ありがと
>>186 「シンボルの検索」(ALT+F12)でプロパティ名を入れてみそ。
193 :
デフォルトの名無しさん :2005/11/18(金) 18:07:44
>>187 set { height = value ; area = width * height ; }}
Height のプロパティーで area もセットできるとは知りませんでした。 いや〜、勉強になります。
194 :
デフォルトの名無しさん :2005/11/18(金) 20:57:30
PanelなどのダブルバファリングをOnにするのは相変わらず継承しないとだめなんですかね? ダブルバファリングをOnにするためだけに継承するのにちょっと抵抗あるんですけど そんなもんですか? 2.0でDoubleBufferedっていうプロパティがあって期待したのに・・
195 :
デフォルトの名無しさん :2005/11/18(金) 21:22:59
アプリケーションのいろいろな設定を行うためにダイアログを利用すると思いますが ダイアログで設定した内容をメイン側と、どういう風にやり取りをするのでしょうか? 設定内容とデータ構造はどのようにしますか?
>>195 まずFormに設定内容のためのpublicなプロパティを持たせるだろ
インスタンスのプロパティに初期値を突っ込んでからShowDialogする
FormのLoadでコントロールにプロパティの内容を表示したりバインドしたりする
プロパティへの代入時にやっといてもいい
ShowDialogの戻りがCancelだったらなにもしない
OKだったらインスタンスをDisposeする前にプロパティから入力値を取り出す
データ構造は、ファイル名だけくらいならstringでいいし、フォント設定なら
Fontだし、DBのレコード編集ならDataRowそのまま渡してもいいだろうし
ほかのマスターでコンボを作らなきゃいかんならそのDataTableを渡せばいいし
雑多な値が複数あるなら構造体やクラスを作るとか。
System.Windows.FormsのなんちゃらDialogクラスが参考になるかと。
197 :
デフォルトの名無しさん :2005/11/18(金) 22:51:33
インデクサ市ね ・・・C#最強厨が、インデクサ、インデクサってウルサイ ただの演算子のオーバーロードじゃないのか? なんで、あんなに拘るのだ・・・あいつは
インデクサって、VBの既定のプロパティが引数取るものオンリーになったものってことだよね?
引数を取らないデフォルトプロパティってどんなだ?
>>197 [] 演算子のオーバーロードに見えるけど、
実際はインデックス付きのプロパティ。
むしろメソッドとプロパティの中間。
メソパティ
ソレダ!
プロパティも結局はメソッドだし
>>204 そんなもんこのスレの住人なら誰でも知ってる。
今してる話はインデクサの性質についてであって内部的な話じゃない。
引数付きプロパティがないからインデクサをつけただけなんじゃね
class X { public X this [X x] { get { return x; } } } x = x[x[x[x[x[x[x[x[x]]]]]]]]]]]]]];
インデクサはいらない機能なんじゃないかなと思ってきた コレクション関係のクラスではあってもいいけど
209 :
デフォルトの名無しさん :2005/11/19(土) 01:57:57
クリスタルレポートを使用した帳票をPDF形式にして WEBアプリを作成しています。 ただ、ディプロイメントを作成して、 開発環境の入っていないところにインストールしてみたところ、 下記のような例外が発生して、 帳票の表示ができませんでした。 ErrorID : LoadingReportFailed, スタックトレース : CrystalDecisions.CrystalReports.Engine.LoadSaveReportException: レポートのロードに失敗しました。 at .I(String , EngineExceptionErrorID ) at .E(String , Int32 ) at CrystalDecisions.CrystalReports.Engine.ReportDocument.Load(String reportName, OpenReportMethod openMethod, Int16 parentJob) at CrystalDecisions.CrystalReports.Engine.ReportClass.Load(String reportName, OpenReportMethod openMethod, Int16 parentJob) at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(Object value) at EfpCustomer.FrmReportVies.Page_Load(Object sender, EventArgs e) ディプロイメントは、 WEBディプロイメントではく、 Windowsディプロイメントとして作成して、 vbsにてIISに仮想ディレクトリとして登録するようにしてあります。 WEBディプロイメントにて作成して、IISのWEBサーバのディレクトリに インストールした際には、帳票の表示もできるのですが、 Windowsディプロイメントとして作成して、仮想ディレクトリとして追加すると 上記のようなエラーになってしまいます。 ディレクトリのアクセス権限の問題かと思い、 IISのワーカプロセスアカウントや、インターネットゲストアカウント、 ASPNETアカウントをアクセス権限に追加してもだめでした。 なにかご存知でしたらお願いいたします。
Exceptionの一覧はどこで見れるか教えてください。
211 :
デフォルトの名無しさん :2005/11/19(土) 12:25:04
MenuItem item = new MenuItem(menuName[i]); item.Index = Convert.ToInt32(menuIndex[i]); item.Click += new EventHandler(this.AddMenuItem_Click); this.mainMenu.Items.Add(item); これをフォームロード時に行いたいのですが、 なぜかインデックスが適用されません どうしてこうなるのですか? ちなみにmenuNameとmenuIndexは文字列型で ファイル読み込みによって取得します
Addしてからじゃないと無理じゃないかな
>>210 .NET Reflector (VS2005 でもできたような) で、
System.Exception の派生クラスを見ればOK。
214 :
211 :2005/11/19(土) 13:07:12
2.0でなんかImeModeプロパティってATOKとかで動作してますか? マイナーなJapanistなんて使ってると上手く動かない まあしょうがないけど
>>216 ADOのレコードセットがそれ使ってますね。
ADO.Rs.Fields.Item(0) を ADO.Rs(0) とかけるのがそれ。
2.0SDKをインストールすれば、1.1のSDKってもう要らないの?
質問です。 Windowsアプリケーションを作成しているのですが、 各フォームで使い回すインスタンスをどのように共有していいかわかりません。 ASP.NETでの、HttpSessionState#Addのようなことを行いたいのですが。。。
220 :
デフォルトの名無しさん :2005/11/19(土) 21:48:37
めしどこか頼む
static
signleton
>>218 1.1で開発することがないなら要らない。
224 :
デフォルトの名無しさん :2005/11/20(日) 02:32:51
開発なんてたいそうなことは必要ありません。 ただお遊び程度のものが作れれば十分です。
1.1の実行環境で動作するものを2.0のSDKで作ることはできないの?
そりゃ、SDKのバージョンが違うんだから基本的には作れないだろ。
>>225 基本的にはどころか、まったくできません。
なんで?wwww
だってDirectXなら新しい奴で古いバージョンの開発できるじゃん
csc.exeも各種dllも実行環境の方に存在するから、別にSDKが無くても実行環境さえあれば作れるよ。
232 :
デフォルトの名無しさん :2005/11/20(日) 03:39:11
DirectXなんて糞は舐めたことないので分からん
んじゃ黙ってろよクズが
はい
C#ジェネリクスとテンプレート両方実装してくれりゃいいのに・・・ クラス制約のせいでできないことが多いぞゴラァ
たとえば?
237 :
デフォルトの名無しさん :2005/11/20(日) 14:57:24
>>235 ジェネリクスとテンプレートを理解できていないんですねw
238 :
デフォルトの名無しさん :2005/11/20(日) 15:01:44
っていうか、同じじゃん 言い方が違うだけでしょ インスタンスとオブジェクトみたいなもん
>>238 ぜんぜん違う。
ところでマルチスレッドのデッドロックもしくはそれに近い状態を検知することはできないだろうか?
今DiagosticsのなかのProcessThreadで状態を見てるんだけれどどこでどこが待ってるのかがわかりません。
そのスレッドのコールスタックなどを引っ張ってこれれば何とかなると思うんですが、どうでしょう?
240 :
デフォルトの名無しさん :2005/11/20(日) 16:15:58
242 :
デフォルトの名無しさん :2005/11/20(日) 17:08:05
渋木宏明 ↑こいつ、マジうぜー Microsoft MVP for Visual C# ってなんだよ。w
僻み乙
>>241 デバッグ時だったらコールスタックとか持ってこれるだろうが。
こいつこそ.NET -> 何も触れないと脊髄反射してる池沼
246 :
デフォルトの名無しさん :2005/11/20(日) 21:02:52
ある画像BMPの一部、例えば(0,0),(50,50)を透明な青で透かしたいのですが、 どういった画像処理のテクニックを使えばいいのでしょうか?
248 :
デフォルトの名無しさん :2005/11/20(日) 21:14:27
>>247 WindowsXPでフォルダ内のファイルをマウスでドラックアンドドロップで選択しようとすると
薄い青色で矩形がでますよね。しかもファイル名はもちろん見えます
このような、感じです。
素直にαブレンディングしたいと言いなさい。
250 :
デフォルトの名無しさん :2005/11/20(日) 22:30:08
だったら素直に教えろや
Color.FromArgb → Graphics.DrawRectangle
わろすわろす
C#で他のアプリを操作するアプリを開発しています。 主にSendMessageを使って行っていて テキストボックスやラベルに関してはデータの取得/設定が出来るのですが ListViewコントロールから文字列を取得することに躓いております。 LVITEM構造体に対してLVM_GETITEMを行えばよいのだと思いますが、 lParamに入れたLVITEM構造体が、うまくターゲットのアプリに届かないようです。 Spy++で確認すると、値がセットした値と全然違っています。 同じように、他のアプリケーションからAPIを用いて 他プロセスのリストビューから値を取得する方法が書かれたページor方法がありますでしょうか。 よろしくお願いします。
254 :
253 :2005/11/20(日) 22:38:23
[DllImport("user32.dll")] public static extern IntPtr SendMessage (IntPtr hWnd , int msg , IntPtr wp, ref LVITEM lv); public struct LVITEM { public int mask; public int iItem; public int iSubItem; public int state; public int stateMask; public byte[] pszText; public int cchTextMax; public int iImage; public int lParam; public int iIndent; } Win32API.LVITEM pitem = new Win32API.LVITEM(); pitem.mask = 1; pitem.iItem = 0; pitem.iSubItem = 2; pitem.state = 0; pitem.stateMask = 0; pitem.pszText = new byte[1024]; pitem.cchTextMax = 1024; pitem.iImage = 0; pitem.lParam = 0; pitem.iIndent = 0; Win32API.SendMessage(list, Win32API.LVM_GETITEM, IntPtr.Zero, ref pitem);
随分と特殊な用例を探してるんだな。
データバインディングの仕組みをちゃんと解説してるサイトないですかね。 public Rectangle Rect { get{} set{} } private void Load(object sender, EventArgs args) { this.DataBindings.Add("DesktopBounds", this, "Rect"); } このコードで起動時にウィンドウサイズがRectになるんだけど、 リサイズしてもRectに値が反映されなくて謎。 特定のプロパティだとデータバインディングが機能しないとかあるの?
257 :
253 :2005/11/20(日) 22:42:06
labelから文字列取得とテキストボックスに文字列設定or取得は出来たのだけど ListViewへうまくメッセージが伝わらないのです。。 lParamのLVITEM構造体、構造体だからダメくさい感じなのだけど。 同じことやってる人。。。いなさそうだなあ。
>>257 とりあえず構造体レイアウト属性を。話はそれからだと思う。
俺は前、MSNメッセンジャーに曲名を送信するプログラムをC#で作ったことがあったんだが。[StructLayout(LayoutKind.Sequential)] 構造体を送るなら、 [StructLayout(LayoutKind.Sequential)] public struct LVITEM だろ
260 :
253 :2005/11/20(日) 22:48:02
>>258 ああ、ごめんなさい、消して試していたのだけど、以下でもダメでした。。
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct LVITEM
{
public int mask;
public int iItem;
public int iSubItem;
public int state;
public int stateMask;
public byte[] pszText;
public int cchTextMax;
public int iImage;
public int lParam;
public int iIndent;
}
編集ミスで変になった& かぶった [StructLayout(LayoutKind.Sequential)] これを構造体宣言の前につけるべし
262 :
デフォルトの名無しさん :2005/11/20(日) 22:48:28
あいかわらず、レベル低いな
この場合フィールドにマーシャリングが入る余地がないから別にStructLayoutは要らないよ。 structならデフォルトでLayoutKind.Sequentialだし。 で、別プロセスのメモリ空間を見るにはそれなりに手順が必要。 VirtualAllocEx&WriteProcessMemory&ReadProcessMemory(NT系)、 またはCreateFileMapping&MapViewOfFile(9x系)辺りを使うことになる。
264 :
253 :2005/11/20(日) 22:57:27
>>263 なるほど、共有メモリ使うしかないかあ。
実はラベルから値を取得するとき
SendMessageでWM_GETTEXTを使ってlParamにbyte[]をつっこんだだけで
文字列取得出来てしまったのですよね。
VirtualAllocEx使わなくても出来るかなあと思ったのだけどやっぱり甘いかー。
266 :
デフォルトの名無しさん :2005/11/20(日) 23:19:06
bomb
>>264 古いコントロールは互換性維持のためそういうことができる。
基本的には対象のプロセスのメモリを確保してそのメモリのアドレスを渡さないといけない。
268 :
253 :2005/11/20(日) 23:27:38
269 :
デフォルトの名無しさん :2005/11/20(日) 23:43:07
>>256 内部でプロパティ名changedってイベントを
Refelectionで探してデータ同期をとる
currencyManager取得して強制Updateしても駄目?
初心者なんすけんど もちっと、敷居低いと子 紹介してけんろ
>>183 レス遅れて申し訳ありません
有難うございます
実装依存ですか・・・
つまり自前で行の順番を格納する列を作って置くということでしょうか?
調べてみましたらDataTableのSelectメソッドが引数なしの場合に
>メソッドが主キーの順に (主キーがない場合は追加された順に) 現在の行を返します。
と有ったのでこれを使用したいと思います
だけど,主キーが無い場合は追加された順ということなので
行削除しない限り,結局追加した順番に入ってるんじゃないかと邪推してしまう私
>>256 というか、同期されるのはValidatingイベントの後。
フォーカスが外れないと駄目だよ。
DoEventだね。VBなら。
saveFileDialogでファイルを保存する際 保存したいファイル名がtest.txtの場合 保存先フォルダに test.xml test2.mp3 というファイルが存在すると teと入力したときにポップアップ(?)のように test.xmlとtest2.mp3が候補のように表示されますが この表示をしないようにするにはどうすればよいのでしょうか?
SaveFileDialog使う限り無理。
>>276 そうですか orz
アリガトウございました
278 :
デフォルトの名無しさん :2005/11/21(月) 18:48:59
private readonly DateTime DATETIME_MEIJI = new DateTime(1868, 9, 8); これをクラスフィールドにして、メソッド内でthis.DATETIME_MEIJI と書くのは VS2005βだと問題ないのですが、VS2003の場合だとエラーになります。 記述的にはVS2003の場合でも問題が無いように思うのですが、何故でしょうか?
279 :
278 :2005/11/21(月) 18:53:37
ちなみにエラーは以下のとおりです。 >キーワード this はスタティック プロパティ、スタティック メソッド、またはスタティック フィールド初期化子で無効です。
>>278 普通に通るぞ。
staticでもつけてんじゃないの?
281 :
278 :2005/11/21(月) 19:31:53
>>280 今新しいアプリケーションのプロジェクト作って
試してみましたらできました。
エラーが起きるのはライブラリのプロジェクト
なのですが、アプリケーションとライブラリとでは
違うのでしょうか。ライブラリだとstaticにしないとダメ
でしょうか?
いや何の関係もないし。 まあそもそも値の意味的にstaticの方が好ましそうだけど。
関係ねーよ。 「その使ってるメソッドとやらのほうにstatic」つけてるんじゃないか っていってる エラーメッセージ読めよそもそも
284 :
278 :2005/11/21(月) 21:03:56
ありがとうございます。 確かに使用しているメソッドにはstaticがついています。 以下のようです。 private readonly DateTime DATETIME_MEIJI = new DateTime(1868, 9, 8); public static string GetGengou() 2005ですと、問題なくthis.DATETIME_MEIJIで使用できるのですが、 そのソースをそのまま2003にコピペしても使用できません。 2003と2005の違いでしょうか。。。
部分的なソースをコピペするんじゃなくて クラス全体のソースをコピペしてみろよ
>284 そもそもstaticメソッドからはthisにアクセスできない。
287 :
デフォルトの名無しさん :2005/11/21(月) 23:49:05
Formに3つのPictureBoxと1つのListBoxを配置しているのですが、 これらのコントロールへの操作やUpdateの処理をすべてFormに 書いてしまい、Formだけで4000行程度になっています。 あまりにもダサイのでご助言ねがいます。 C#でDocument/Viewはどうすればいいのでしょうか?
それだけじゃ、LogicとViewでクラスを分けろ。としか PictureBox3とListBox1つ程度で4k行くなんて何やってるんでしょう
289 :
デフォルトの名無しさん :2005/11/22(火) 00:00:31
具体的なことは勘弁ください。 基本的には画像のマッチングや分析を行っています。 ViewクラスにPictureBoxとListBoxのインスタンスを持たせて ViewのインスタンスをFormに持たせる感じですかね?
分けるのはコントロールじゃなくてマッチングや分析のロジックだろ
画像のマッチングや分析を別クラスでやればいいじゃん
そう。 データの処理は別のクラスにし、 できれば Windows Forms との依存性をなくす。 画面は結果を表示するだけにする。 そうすればいろいろあとあとよさげ
293 :
デフォルトの名無しさん :2005/11/22(火) 00:34:41
コントロール5個ぐらいに依存があって Aを更新するとAの値によってB,C,Dが更新されるとか やたらコントロールの値を参照する必要がある場合 どう分ければいいでしょうか Gridの行数分1行ごとに処理して関連するコントロールに値設定とか 参照する項目多いとうまく分離しきれない
294 :
デフォルトの名無しさん :2005/11/22(火) 00:38:09
DataBindingすればよくね?
イベント使うのもいくね?
296 :
デフォルトの名無しさん :2005/11/22(火) 01:00:12
たとえばあるイベントが起きたときの処理が3行で記述できても 外だしにすべき?
すべき
すみません質問です TextBoxに同一の内容の行が有った場合、一方を削除したいのですが 以下だと完全に削除出来ず(二行同じ内容の行が残る)うまくいかないのです 御指導お願い致します string tmp = TargetTextBox.Text; string[] lines = tmp.Split(new char[] { '\n' }); for (uint i = 0; i < lines.Length - 1; i++){ for (uint j = i + 1; j < lines.Length; j++){ if (lines[i].Equals(lines[j])) lines[j] = ""; } } StringBuilder sb = new StringBuilder(); for (uint i = 0; i < lines.Length; i++){ if (lines[i].Length > 0){ sb.Append(lines[i]); sb.Append("\n"); } } TargetTextBox.Text = sb.ToString();
>>298 ロジック的にかなり無駄があるわけだが
tmp.Split(new char[] { '\n' });
=> tmp.Split(new char[] { '\r', '\n'});
sb.Append("\n");
=> sb.Append("\r\n");
>>299 > tmp.Split(new char[] { '\n' });
> => tmp.Split(new char[] { '\r', '\n'});
=> TargetTextBox.Lines
とかな
なにはともあれgeneric
2.0に移行している人はまだ半分もいないんじゃないかと
303 :
デフォルトの名無しさん :2005/11/22(火) 02:26:19
二言目にはgeneric なんてアフォですか? 小さなサンプルプログラムしか作ったことがない人がいいそうなことですねw 数万行、数十万行程度の中規模以上のプロジェクトなんかではよほどの 知識がないとtempleteは工数アップにしかならん。
スマートポインタもコンテナの類も使わなかったのか 大変そうだな
305 :
デフォルトの名無しさん :2005/11/22(火) 02:40:44
スマートポインタなんて業務でつかうひといるのか? バグだらけで使い物にならん
数十万行の大規模プロジェクトにテンプレートはいらんのじゃ。ウッキー
憐れなスレだな(笑)
大規模ってのはそれだけソースに触れる人間も多くなるからな。 そういうプロジェクトはユーザー数の多いCで書くのが一番。 もしくはVB6。
VBは30過ぎのおっさんが使ってろよ
言われなくても使われてます
で、なんでGenericで工数アップなの? めちゃ工数削減だと思うんだけど。 XmlSerialize楽だし
C++/CLI刷れにも書いてきたんですが、メインにC#つかてる人の意見も利きたくてやってきました。 C++/CLIとC#の速度差ってどんなものでしょ?大雑把で(・∀・)イイ!!です。 いまC#で一つ作ってるんだけど、もっさりしすぎ。ある程度使い分ければ速くなるのかどうか・・・ 特に気にしてるのはコレクション周りと画面周りですが。
315 :
278 :2005/11/22(火) 09:14:15
C++/CLIで.netのクラスを使うのなら速度変わらんだろ .netのクラスを使うことがないのならC++/CLIのメリットもなかろう
317 :
314 :2005/11/22(火) 09:58:28
最終的に同じコードにコンパイルされるんだから 速度差がある分けない。 毎回 Dispose する分逆に遅くなったりしてな
C++/CLIってメリットあんのか?
>>319 P/Invokeで明示定義がそもそもいらん、C++で書いたコードはそのまま使える、
マーシャリングがちょっと賢い…etc
ラッパーかくんなら最強でそ。Managed DirectXもMC++じゃなかったか?
321 :
デフォルトの名無しさん :2005/11/22(火) 16:27:40
あるEXEが任意のフォルダにあるDLLをレイトバインドでロードするんですが DLL側で自分がどのフォルダにあるか取得する方法はありますか? Environment.CurrentDirectoryだと EXEのパスが帰ってきたorz
>>321 Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
323 :
323 :2005/11/22(火) 16:39:20
うおおおできた! サンクス!
323 :323:2005/11/22(火) 16:39:20 うおおおできた! サンクス!
325 :
デフォルトの名無しさん :2005/11/22(火) 21:56:12
ZIPファイルをアップロード指定させて、実際のアップロードは、ZIPファイルの中身としたい。 ダウンロードは、対象ファイルをZIPファイルに圧縮させてからダウンロードを行いたい。 こういうことって、どうやっったらいいですか?
ASP.NETなのかどうなのかぐらい書けと。
327 :
デフォルトの名無しさん :2005/11/22(火) 22:06:01
すいません。C#です。
はいはいワロスワロス
頑張ってサーバから作ってください
>325 J#のクラスにZIPを処理するのがあったと思うよ。
331 :
デフォルトの名無しさん :2005/11/23(水) 00:01:50
クラス内にpublicにクラスを書く必要性ってなにがあるの?
気分と、あとはログ読み返せ
>>331 privateなメンバにアクセスさせたい時。
334 :
デフォルトの名無しさん :2005/11/23(水) 01:02:08
だったら、publicなメンバにすればいいじゃねーの
関係ないクラスからも見えちゃうじゃん
336 :
デフォルトの名無しさん :2005/11/23(水) 01:17:44
C#って、yahooとかでうまく検索できないね なぜか2ページ目にいくと、c言語の検索になる
337 :
デフォルトの名無しさん :2005/11/23(水) 01:27:29
っていうか、#や.NETって単語やめてほしいよね Webで検索する際面倒だよね
すいません。 表示されるMessageBoxを常に手前に表示させることはできるのでしょうか?
>>339 System.Windows.Forms.MessageBox を使う場合には無理じゃないかな
Windows API の MessageBox を直に使うのなら MB_TOPMOST
>>341 早速のご回答ありがとうございます。
やはりそうですか・・・・。
System.Windows.Formsのメンバをしらみつぶしに探しても
それらしきものは見当たりませんでした。
ありがとうございました。
343 :
デフォルトの名無しさん :2005/11/23(水) 02:51:12
>>338 なってんじゃんw
quoteしなきゃなんねんだろ?
>>343 あ?"C#に関するドキュメントが上手く検索されない"と解釈したんだが。しかし、どうやら違ったようだな
345 :
デフォルトの名無しさん :2005/11/23(水) 06:24:25
C#関連の物を検索するときは "System.Windows.Forms" とか付ければ
347 :
デフォルトの名無しさん :2005/11/23(水) 13:17:30
C#でmemset相当の機能って何? foreach(byte b in buf){ b = 0; }
byte配列ならClearでいけるだろう
ありがとう。Array.Clearか。 Bufferにも付けてほしいもんだな。
350 :
デフォルトの名無しさん :2005/11/23(水) 17:53:34
ADO.NetのDataSetのDataTable、AとBの 結合したデータを取得したいときは、どうするんですか?
そういうSQLをデータベースに投げる
352 :
デフォルトの名無しさん :2005/11/23(水) 18:58:05
DataTableのAまたはBの値が更新されたときは 一度Updateしたから、SQLを投げなきゃだめですね。 頻繁にデータが更新されるときは、面倒ですね。orz
353 :
デフォルトの名無しさん :2005/11/23(水) 19:03:18
351です。 誤:Updateしたから 正:Updateしてから です。 何度もDataSetをUpdateしなければならないって DataSetは非接続って売りの意味がないってことですかねぇ。
使い方が変なだけだろ。
356 :
350 :2005/11/23(水) 19:40:43
どうもありがち^^
357 :
デフォルトの名無しさん :2005/11/23(水) 20:35:43
PointF[]からPointに変換したいのですが、なんかいい方法ないですか? 今は ループ回して point = new Point((int)pointf.X , (int)pointf.Y); ってやってます。
Point構造体のstaticメソッドに
C#でMainが始まるまでに実行されるルーチンを書くことってできますか? C++とかだとグローバルインスタンス定義することでそのコンストラクタとかに記述可能だったんですが。
>>359 静的コンストラクタを使えば可能
class Class1
{
static Class1()
{
Console.WriteLine("Class1");
}
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("Class1.Main");
}
}
>>360 別のクラスだとMainより先に実行されるかどうか保障されないんでは。
ドキュメントエクスプローラーの使い方がわからんです・・・ リフレクションで派生クラスを列挙する仕組みないかと思って "reflection enumerate derived"を検索ワ−ドに入れたんですが、enumerateしか乗ってないページとか山ほど引っかかる・・・orz
363 :
デフォルトの名無しさん :2005/11/24(木) 17:04:30
コンストラクタの書き方で public TheClass(int left, int right) { } public TheClass(int left) { TheClass(left, 10); } 異なる引数のコンストラクタで、2つめのコンストラクタから 1つめのコンストラクタを呼び出したいのですが、上記のような 書き方だとエラーになります。 どのように書けばいいですか
public TheClass(int left) : this(left, 10) { }
365 :
デフォルトの名無しさん :2005/11/24(木) 17:32:36
新しいウィンドウでブラウザを起動するにはどうしたら良いですか?
Process.Start("
http://www.yahoo.co.jp.:80 ");
これだと既に開いているブラウザウィンドウを使って指定ページを表示してしまうので、
なんとか新しいウィンドウでページを開くようにしたいのですが・・・
C#でプロセスマネージャ(タスクマネージャのプロセス)ぽいのをつくりたいんだけど、 C#で他のプロセスを意図的に終了させたりすることできまっす? ちなみに、終了させたいのは、非ウィンドウアプリなので そういったものを終了させる場合うまい方法あったら教えて欲しいです。
>>365 それIE側の設定によるんだよね…詳細設定の
「ショートカットを起動するためにウィンドウを再利用する」
ってのにチェックが入ってるかどうか。
うーん。こんなんどう?
Type t = Type.GetTypeFromProgID("InternetExplorer.Application");
object ie = Activator.CreateInstance(t);
t.InvokeMember("Navigate", BindingFlags.InvokeMethod, null, ie,
new object[]{ "
http://www.yahoo.co.jp:80 " });
t.InvokeMember("Visible", BindingFlags.SetProperty, null, ie, new object[] { true });
でもこれでいいのかなぁ…COMはよーわからん。
368 :
デフォルトの名無しさん :2005/11/24(木) 20:02:20
>>366 列挙は
EnumProcesses か System.Diagnostics.Process.GetProcesses
終了は
TerminateProcess か System.Diagnostics.Process.Kill
プログラムにnetstatコマンドで表示されるような情報を取得させたいんですが C#で特定のポートに接続しているIPを調べる方法ってありますか?
C#でってことなら、iphlpapi.dllでもいいのかな
371 :
369 :2005/11/24(木) 23:32:40
>>370 iphlpapi.dllでググッたら解決しました
ありがとうございました
372 :
365 :2005/11/24(木) 23:39:39
>>367 レスありがとうです
参考にさせて頂きます
373 :
デフォルトの名無しさん :2005/11/25(金) 00:47:17
C#でつくったアプリってなんでメモリ食いまくりなの? ちょっとしたものでも10Mなんてすぐ超えちゃうし・・・
>>373 普通のアプリの2〜3倍は食うのは確かだがそこまで気にならないよ。
アプリ起動するとリリースモードで動かしてもWorkingSetで20Mぐらいいくな
最近知ったが
Process process = Process.GetCurrentProcess();
process.MaxWorkingSet = process.MaxWorkingSet;
process.MinWorkingSet = process.MinWorkingSet;
ってやると2M位まで減るよ。
ttp://d.hatena.ne.jp/Kazzz/20051025/p1 ここね。その後とんでもないことになるが
377 :
376 :2005/11/25(金) 02:06:17
これはWindowsの仕様としか言いようがないんじゃないかな。 FireFoxも同じ問題で頭抱えてるみたいだし。 実際それだけメモリが使用されているわけではない。
「とんでもないこと」を詳しく
スワップが発生しまくります。
380 :
デフォルトの名無しさん :2005/11/25(金) 03:01:45
コマンドラインのParserやCsvのReaderはC#2.0でも標準装備されていないんでしょうか?
監視スレッドなるものを作っているんだけど 1秒ごとに監視っていうにしたいんよ。 C++みたいにSleepってC#ではみあたらないんだけど、処理をしばらくとめてる関数ってあるー? てか、While( )でなんか設定できるのかな。。。1秒にいっかいループ実行ってかんじで while(true) { //監視処理 Sleep(1000); <---こんなかんじなことがしたいん }
>>383 System.Threading.Thread.Sleep()
>>384 あ、それでいいのね。
ありがとうです!
タイマ使えば良くね?
まあ普通はタイマだろうね
>>380 CSVってデータソースをCSVにすればADO.NETでアクセスできない?(やったことないけど)
389 :
384 :2005/11/25(金) 11:43:20
むむむ、タイマのがいいのですか。 あと、呼び出し側からスレッドを終了させるのって可能でしょうか。 みたところ、Suspendしかないので、、中断と終了ってちゃいますよね? いきなり終了されたらメモリリークとかしちゃうとおもうから、スレッドの終了は自殺以外ありえないのかな?
>>389 Abort()
イベントとかつかったらいいんじゃね。
AbortだがAbortは非推奨
タイマーならEnableをせっていすればええやん
>389 AutoResetEventで終了してくれって知らせて、自殺してもらう。
>>389 タイマがいいともかぎらん。
プロセスの最終的なリカバリにタイムアウトなんかを使う場合は、
Threadクラスで起こしたスレッドでループさせた方がいいと思う。
>>382 ,393
どもです。
メンドイなぁ
CsvをStreamで読めてライセンス的に改変おkとかないかなぁ
CommandLineはMicrosoftのサンプルのどこかにサポートクラスとしてソースが入ってたような
気がしたんだけど、どこだったかな・・
397 :
デフォルトの名無しさん :2005/11/26(土) 00:33:33
PrintPreviewDialog を ShowDialog() で開いたときに 本体以外にも数秒だけ小さいウィンドウが表示されますが、 アレを中央に表示するにはどうしたら良いですか? 本体は中央に表示されるのにアレだけがなぜか左上に表示されてしまいます
398 :
デフォルトの名無しさん :2005/11/26(土) 01:56:14
ColorDialogをShowDialogするとダサイダイアログが表示されます. VS2003のプロパティで表示されるようなカコイイダイアログはどうすれば いいの?
ColorDialogはOSたんの機能を使ってるだけだからなあ
400 :
デフォルトの名無しさん :2005/11/26(土) 08:10:04
Microsoft MVP for Visual C# だってw
>>401 ありがとうございます。
LogParser,JHLib落としました。
ちょっとしたCSVのためにCOMで使うのは厳しそうですが、いろいろ遊べそう
JHLibかなり使えそうですねsimply freeですし
ところで改変というと、何か問題とかありましたか?
403 :
401 :2005/11/26(土) 10:46:22
>>402 >ところで改変というと、何か問題とかありましたか?
いや、機能的に問題は無いと思います。
少なくても、今まで使ってて問題は出てないです。
改変というか、ネームスペースをシステムに合わせて変えたりといったその程度です。
404 :
デフォルトの名無しさん :2005/11/26(土) 12:58:18
オブジェクト指向でMVCというのは一般的ですか?
別に
407 :
デフォルトの名無しさん :2005/11/26(土) 13:43:01
>>406 そうなんですか。
そうすると、C#で一般的なものとは何になるんですか?
>>407 ViewとModel(Data)を分ける考え方はC#でも普通にするし、広い意味でのMVCは使ってますよ。
WebFormやWinFormを使うとControllerをほとんど意識しないからMVCとは呼ばないだけ。
というより、今はMVCといったらJSPのモデル2MVCかその派生物をさすことが多いので、
.NETではMVCという言葉を使わないことが一般的。
409 :
デフォルトの名無しさん :2005/11/26(土) 14:59:55
>>408 ありがとうございます。
.NETではFormクラス内でViewとControlerが
一体化しているということですね(違うかな・・)
System.Windows.Forms.TreeView で、あるノードだけ文字を強調したくて nd.NodeFont = new Font("MS UI Gothic", ndFontSize, FontStyle.Bold); としたら、そのノードのラベル文字列の右端が欠けて表示されなくなってしまいました。 TreeNode.Bounds は read only だし、TreeView.Refresh() しても一向考慮される気配なし。 どうしたらいいの?
> メモ ノードのフォントが TreeView コントロールの Font プロパティで > 設定されている値よりも大きい場合、ツリー ノード ラベルのテキストはクリップされます。 だそうだから、TreeViewのフォントをFontStyle.Boldにして、 TreeNode.NodeFontを軒並みFontStyle.Regularにすればいいんじゃない?
>411 ホントだ、出来ました!! 個別にスタイルにあったクリッピング領域を設定できないなら、全体の設定でスタイルを指定しておいて、改めて個別の設定で不要なフラグを落としておく…逆転の発想力が素晴らしいです。 ありがとうございます。
DataSetのExpressionにおいて、別のRowの値や メンバ変数を式の変数として利用したいのですがどのように実現できますか?
414 :
デフォルトの名無しさん :2005/11/26(土) 19:22:59
>>409 ModelとViewの考え方は常に頭においておいたほうがイイ
VC#やVBはポトペタ環境が欠点。
VC6みたいに初心者を排除してくれる環境がよかった。
415 :
初心者 :2005/11/26(土) 19:41:07
漏れも初心者だけどexpressが出るまでポトペタバージンだった。 いままでエディタでコーディング つーか初心者ほど手書きの方がいい希ガス
ある程度組めるなら、ポトペタはウザくてGUI構築以外では使わんと思う。 というかポトペタはそのための機能だ。
>>416 実際そうだよな。
俺もVisualStudio買うかどうかは
SDKで試してから決めたし。
ごめん空気読めてないけど ぽとぺたってなに?
420 :
デフォルトの名無しさん :2005/11/26(土) 23:44:11
PageSetupDialog の余白設定が乱れるバグへの良い対処法ってないですか? 宇宙仮面のサイトに載っている対処法を使っているのですが、 それだと僅かに乱れてしまうので気になっております 例えば 10 に設定した余白が次に開いた時には 9.9 になってしまいます
なんで2.0のSDKドキュメントにはSystem.Mediaとか載ってないの? WinFxのほう見ろってこと?
一応載っているようだが? メンバ一覧ぐらいしか情報はないけど。
424 :
デフォルトの名無しさん :2005/11/27(日) 02:02:39
長文失礼 ポトペタを作ってる側から言わせてもらえば プロパティいじってコード書かないでいいようにしとけば バグも生まれんし、コンポーネント指向で再利用性ありだし ポトペタを作るところまでいけば、VisualStudioのすばらしさ をもっとわかってもらえると思うが JavaもJSFでポトペタになるし MVCはもちろん大事だが .NETでのCはイベントモデルなわけで イベント捕らえてM部分は実装してねって コンポーネント作ってる エディタ、デザイナ、CodeDomあたりまで押さえると また変わった見え方してくると思うんだが
的外れな長文乙
426 :
デフォルトの名無しさん :2005/11/27(日) 02:44:13
コンテキストメニューにショートカットキー設定するのっておかしいかな?
別におかしくはないのでは?
428 :
デフォルトの名無しさん :2005/11/27(日) 03:01:08
レストンクス あまり見掛けないので気になったんだ
429 :
デフォルトの名無しさん :2005/11/27(日) 03:18:08
CollectionBaseクラスってIListインターフェイスを実装してるのに なんでAddメソッドとかが公開されてないんですか? つーかどうすればインターフェイスのメンバを公開しないようにできるんですか?
インターフェイスの明示的実装 Addとか公開したら継承クラスでいじりにくくなるからかな
431 :
デフォルトの名無しさん :2005/11/27(日) 03:25:22
>>430 おおっ、できました、ありがとうございます。
432 :
デフォルトの名無しさん :2005/11/27(日) 03:41:31
On〜〜〜メソッドで型の検証を行うのは IListオブジェクトとしてAddメソッド等を呼び出された時のためだったんですね。
433 :
デフォルトの名無しさん :2005/11/27(日) 04:31:39
イベントについて教えてください。 たとえば、イベントControl.PaintはControl.OnPaintが発生させますよね ではControl.OnPaint は誰が呼び出すのでしょう? おそらく、FrameworkがWM_PAINTを捕まえて呼び出すんでしょうけど、 どこにそういったソースがあるのでしょう? Reflectorをつかって、探しているんですがみつかりません。
メッセージを処理するのはWndProcメソッド。
ポトペタすばらし Component継承するだけでプロパティ設定楽になるんでいい感じ
仕組みがわかってから使う分には.NETのコンポーネントは良い。
ずっとVS使わないで開発してきたんだが、 やっぱ統合環境あったほうが楽だよね・・・。 2005は買おうと思ってるんだが。
IDEあっての.NETだと俺は思う
そうは思わないが、IDEの価値は十分に高いと思う
440 :
デフォルトの名無しさん :2005/11/27(日) 18:13:55
そうか? エディタ使いづらい。 秀丸とコマンドラインで十分だろ? すくなくとも、10万前後払う価値はない
> 秀丸とコマンドラインで十分だろ? 優秀な人なんですね(^^;
優秀な人は使うツールの選択も優秀。
>>440 の秀丸はとんでもなくカスタマイズされてるに違いない
インテリセンスとかコードスニペットとか楽すぎ。もうVS2005から離れられない・・
秀丸とコマンドラインで十分です
秀丸でプログラミングってw
445 :
デフォルトの名無しさん :2005/11/27(日) 19:44:11
プログラミング以外で秀丸をなにつかうの?
秀丸で2ch
道具を馬鹿にする香具師はたいしたプログラム書けないのが多い
448 :
デフォルトの名無しさん :2005/11/27(日) 19:54:11
盛り上がっているところ恐縮ですが、質問です。 ファイルを開くダイアログにプレビュー機能をつけたいのですが どうすればいいのですか?
つければいいじゃん
OpenFileDialogを使う限りは無理。 頑張って自作。 コモンダイアログの拡張はめんどくさい。
451 :
デフォルトの名無しさん :2005/11/27(日) 21:06:05
BinarySearchに value の次に大きい要素のインデックスのビットごとの補数です とあります。 どういう意味ですか?
ビットごとの補数で調べれ
453 :
デフォルトの名無しさん :2005/11/27(日) 21:29:40
矢田
454 :
デフォルトの名無しさん :2005/11/28(月) 01:54:52
参照の参照を渡すには?
455 :
デフォルトの名無しさん :2005/11/28(月) 02:13:30
ref
Split('/') Uri.Segments
Path.GetFileNameなんかもあり string.LastIndex/Substringとか
初心者なんだけど、 [^/]+$ って正規表現を一番に思いついちゃった...orz
だうと
>>426 ↓マイクロソフトのガイドラインの@nifty訳
>しかしながら、空間の効率および読みやすさを増強するように、
>近道メニューにショートカットキーを含まないようにしてください。
だそうで、これに従えばおかしいというか一般的ではないってことかと。
EmEditorなんかは付ける派だっけ?
462 :
デフォルトの名無しさん :2005/11/28(月) 14:27:45
クラス内で宣言された、 かなり大きめなジャグ配列を今後使用することがないため、破棄したいと考えています。 クラスなどであれば、Dispose()が使えるのですが、 ジャグ配列の場合はどのようにしてリソース開放してあげれば良いのでしょうか? 500MB以上を扱う配列なもので、不要になったら破棄しておきたいのですが・・・ System.GC.Collect(); を実行する方法しかないのかと迷っています。
明示的にやるのならそれしかないよ。別にする必要もないけど。 しかし500MBねぇ。
464 :
462 :2005/11/28(月) 15:01:15
>>463 やっぱり、その方法しかないのですね。
数百枚の画像を同時に解析し、かつ速度も重要視するプログラムなため、
一枚ずつファイルから読み込んで・・・という訳にもいかず、
一気にどがーっと読み込んで、どがーっと解析するという力業なのです。
(1GBのメモリでは、すぐに食いつぶされてしまってデバッグどころではないというのが痛すぎ・・・)
GCやるかどうかは、実際に速度など比較して決めたいと思います。
ありがとうございました。
同時じゃないと駄目なのか? 非同期で読み込みながら解析していくって手もあるぞ。
466 :
462 :2005/11/28(月) 15:15:41
>>465 確かに、
画像読込 → 画像解析
という処理だけでだったら、非同期読込、同時に解析が望ましいですね。
実際のところ、ファイル読込時の速度はどうでもよく、画像解析部の速度が重要なのです。
(自分が非同期スレッドをうまく使いこなせていないというところもあってw)
というわけで、画像解析部の速度評価ができるように、
全てメモリ格納後に解析する手法を取っています。
速度評価する際には、2GBを搭載したハイスペックマシンでやりますので、大丈夫でしょう・・・たぶん。
「あるもの全部使え!!」というスタンスなのに、GC.Collect()しようとしている自分に今、すごく矛盾を感じました・・・^^;
2chに連投するブログラムを作ったのですが、不思議なことが起こりました。 Windowsフォームを使ったフロントエンドでいろいろ設定して、実際に書き込みを行うプログラムを起動する仕組みにしてるんですが ・書き込みを行うプログラムをシングルスレッドにして、プログラムを多数起動する ・書き込みを行うプログラムをマルチスレッドにして、プログラムを1つ起動する 作る前は後者のほうが2chへの書き込み速度が速いと思ってたのですが 実際には前者のほうが書き込み速度が速いのです。 こういうものなんでしょうか? ちなみに、連投する目的は、いわゆる「最速1000」です。
同期を取ろうとしている部分があるんじゃないか? と、ちょー適当に予想
ンリューションって何?
470 :
デフォルトの名無しさん :2005/11/28(月) 19:51:01
>>464 VC++6+MFCでやっとけ
そういった処理はC#では無理
471 :
456 :2005/11/28(月) 20:37:11
>>457-459 いろいろやり方あるんですね。GetFileNameが簡単そうだったので
これでやってできました。ありがとうございます。
>>467 プログラミングに関係無いところで突っ込むが、
普通にアク禁されるかと。
473 :
467 :2005/11/28(月) 21:38:30
複数のFormを表示するアプリケーションで 現在インスタンス化されて表示されているFormを全て取得するには どのようにすればよいのでしょうか?
MDIにする。
>>475 Thx
MDI以外では無理なのでしょうか?
Singletonなフォームの管理クラスでも作ればどうだ
というか、Form間の通信とかどうしてるんだ?
480 :
デフォルトの名無しさん :2005/11/29(火) 00:33:44
C#って本当に業務で使われているのかな? 私の部署ではVC一本ですね
クライアントアプリしか作ってないところではそうかもな
>>480 使われてないならこのスレの書き込みはなんなんだ?
483 :
デフォルトの名無しさん :2005/11/29(火) 01:11:43
まぁ、C#は昔のVBみたいな存在じゃね? VC++できて一人前、VC使えない香具師がVB みたいな 今でもVC++で商品としてのアプリを書いたことがない香具師は C++プログラマとしては使えないな
> 商品としてのアプリを書いたこと 部分的にコード書くなら超初心者にでもできるわけだが、 アプリを書く、ってのは具体的に何を言ってる? 業務用アプリ全体を一人で書く奴はいないし、フリーウェア の話をしてんのか?
パッケージ製品だろ
1スレに1度は出るな
>>480 の話。
2スレに1度ぐらいの割合で出てくるメモリの話とあわせていい加減聞き飽きたな。
メモリの話も1スレに1度ぐらい出てるような希ガス
そうか釣りだったのか!!!??
489 :
デフォルトの名無しさん :2005/11/29(火) 01:41:32
>>484 そんなことはない。
具体的な商品名は明かせないが、パソコンショップで数千円程度で販売している
アプリの大半はプログラム自体は1人、2人程度で書くのが普通だよ。
490 :
デフォルトの名無しさん :2005/11/29(火) 01:49:45
質問 あるクラスHogeに public Hoge(int i,int j) : this(i,j){} ってどういう意味?
レッツ・スタックオーバーフロー って意味
地雷の予感しかしない。 >●C#を教えてください 時給7千円● (中略) >●概要 >・2時間くらいC#について教えて下さい。 >・1時間につき5000円支払います(即日払い)。交通費も支給。 (中略) >●落札について >・10円で入札下さい。
どうせ宿題やってくれとかだろ
> パソコンショップで数千円程度 パソコンショップをVectorというなら解るが・・・ その手の商品が最近は小売店でも売ってるってことね
> 時給7千円 > 1時間につき5000円支払います お か し い だ ろ
>評価: 非常に良い落札者です。 評価者:******* >★お手軽!★メイド服★宴会・パーティー用衣装★黒色★ (終了日時:2005年 10月 23日 23時 17分) >コメント : 迅速な応対で、気持ちの良いお取引が出来ました。ありがとうございまし >た。またの機会がございましたら、よろしくお願い申し上げます。 (評価日時 :2005年 10月 25日 17時 52分) (ノ∀`)アチャー
業務用アプリ全体を一人で書いてましたがなにか?
メイド服着て模造刀振り回されたら怖すぎ。
>●落札について >・10円で入札下さい。 セコイ・・・つか、規約違反だろw >また、こちらが組んだ >プログラムのどこに問題があるか指摘して下さい。 君自身が問題
501 :
デフォルトの名無しさん :2005/11/29(火) 20:26:34
RichTextBox を使って簡単なテキストエディタを作ったのですが、 英文を入力した時になぜかフォントが Arial になってしまいます。 普段は等幅の MS ゴシックの 12pt を利用しております。 バグというほどのものではないですが、一々フォントを直すのが面倒なので どうにかならないかと思っております。 解決策を知りませんか?
503 :
デフォルトの名無しさん :2005/11/29(火) 20:38:37
なるほどバグでしたか。 ありがとうございした。
Outlookでテキスト形式のメールを書くときでも同じ状況になるよな
RichTextBoxはお勉強用なので
506 :
デフォルトの名無しさん :2005/11/29(火) 22:33:13
くんなww
508 :
デフォルトの名無しさん :2005/11/29(火) 22:46:27
実行中に不透明度(Opacity)を変更すると描画が異常に重くなるのは何故? 例えば、メニュークリックイベントで this.Opacity = 0.50; とかやるとフォームの移動の時とかにチカチカなるんだけど・・・
なぜもなにも。そんなもんとしか。 描画の手間が何倍にもなるんだから。
510 :
デフォルトの名無しさん :2005/11/29(火) 22:55:08
上の方の人と同じくリッチテキストボックスコントロールについて質問なんですが、 こいつのコンテキストメニューに文字列検索機能を追加したいんですが、 どうやれば追加できますか? もしかして追加でコモンダイアログとかがあるんですか? ダイアログの外見はCTRL+Fの検索と同じような感じにしたいんで
検索ダイアログはコモンダイアログとしてWindowsが提供してるけど、.NETのライブラリには入ってない。 「コモンダイアログ 検索」で調べれば検索ダイアログの使い方が見つかるだろうから、 そいつを.NETに移植することになる。 //CodeProjectとか漁れば見つかりそうな気もする。 検索そのものはRichTextBoxならFindメソッドがあるだろ
512 :
デフォルトの名無しさん :2005/11/29(火) 23:24:07
C#というか.NETというかWindowsの問題かもしれませんが、スレッドのプライオリティってちゃんと働いてます? たしかNTの実装はひとつでも上位のプライオリティを持つ稼動スレッドがあったら下位のスレッドは永遠に待たされるってはずだと思うんですが、どうも下位のスレッドが動いているときにUIの処理にもたつきが出ます。 まだ、IOなどで処理が絡んでると子もあるかもしれないんですが、なんかスレッドの動作も影響してるような・・・
514 :
デフォルトの名無しさん :2005/11/30(水) 01:04:16
正直まだ.NETのライブラリの動作に安定をもとめちゃだめ
>>513 >ひとつでも上位のプライオリティを持つ稼動スレッドがあったら下位のスレッドは永遠に待たされるってはずだと
んな馬鹿な。
Windowsでそのへんつつくのはどうかと思う。 ちゃんとしたリアルタイムOS使ったら?
今のWindowsって、確か疑似マルチスレッドOSなんじゃないのかな。 タスクマネージャ→プロセス→優先度の設定なんて項目あるじゃん。 ってことは、少なくともユーザプロセスの、スレッド管理はプロセス管理の下部構造 であって、あるプロセスのタイムスライスをその同居スレッドが食い合う構造なんじゃないのかな。 つまり、あるワーカースレッドの優先度を上げると、プライマリスレッドの使えるタイムスライスが 減る。ただし、タイムスライスの割り当てアルゴリズムがある程度臨機応変に動いているから スレッドを増やすと処理速度が上がる。
519 :
513 :2005/11/30(水) 01:41:07
>>515 いや本当。Unixは下位のスレッドがあった場合にも、ある割合でそちらに処理が実行されるが、NTは上位のスレッドのタスクがある限り下位のスレッドには遷移しないはず。
通常はCPUを独占するスレッドがあまりない&あってもその他のスレッドが同じプライオリティを持ってるので処理が割り当てられるため普通のスレッド処理と期待する動作がおこなわれてるってはず。
卒研でEWSやらSunやらIndigoやらWinやら使ってシミュレータ書いてた漏れの モナニー解釈だけどね。
>>519 > いや本当。
> 下位のスレッドには遷移しないはず。
もうちょっと根拠だそうよ
>>519 win2kでは最大4分待ちって聞いたことある。
NTも必ずタイムスライスが回ってくるけど、数十分に1回とかだと聞いたことがある。
レジストリで変えられるとか言うはなしだったけど。
やっぱり商用UNIXじゃないと。
>>519 UNIXにマルチスレッドの定義はなかったと思うけど…
Pスレッドのことか?
プライオリティの低いスレッドが割り込めないのは単純割り込み方式
だけど、さすがにそんな教科書実装してないと思うよ。
スケジューリングやってるはず。 でなきゃ割り込みでいいじゃんになる。
525 :
513 :2005/11/30(水) 01:52:02
>>525 とりあえずぐぐった先を読んだ限りでは、
クォンタム期間は独占されるがそうでなければプライオリティが低いのも実行可能としか読めないが。
P低が実行>P高がスケジューリング>P高がレディ、P低のクォンタムを中断>P高実行>
P高のクォンタム終了>P低の中断したクォンタム再開
スケジューリング時に全てのスレッドにタイムスライスが割り当てられるわけでしょ? で、スケジュール通りに動くけど、プライオリティの高いスレッドが実行可能状態に入ると そっちが優先されると。 プライオリティの高いスレッドが、”他のスレッド実行中に実行可能状態に入る”のは、 該他のスレッドが明示的に状態遷移させるか、ハードウェアからの割り込みぐらいだろうから、 ずっと該他のスレッドがタイムスライスを食われたままで、与えられないってことには ならないんでないの?
それより、Win2kから、onPaintイベントの大半が、カーネル側の担当になったでしょ。 あのイベントって誰がどのタイミングで処理してるんだろうね? プライマリスレッドはやってないだろうし。
529 :
513 :2005/11/30(水) 02:21:51
今見直したらAdvancedWindows 1stEditon P65にも優先度の高いスレッドがひとつでもある場合には下位のスレッドに処理は割り当てられないと書いてあった。
>>526 例だとプライオリティ18のスレッドが一つだけでクォンタムを使い切ったとしてもプライオリティ18のレディキューの最後=最初に移動されるだけでまた実行されるとしか書いてなくないですか?
>>527 普通に今のスレッドのプライオリティをあげれば普通のスレッドより高いプライオリティになる。
>>529 ありえへん解釈や。
スケジューリングの意味がまったくなくなってる。
531 :
513 :2005/11/30(水) 02:29:47
>>530 なんで?AdvancedWindowsの記述ともマッチするよね?
文理解釈はおいといて、次の処理を、その優先度の高いスレッドのルーチンにいれてみそ。 System.Windows.Forms.Application.DoEvents()
533 :
513 :2005/11/30(水) 02:37:34
>>532 いや、今下位のスレッドがバックグラウンドでずっとループ処理のようなものをしてるんだけれど、GUIに影響ないはずなのになんか応答が悪いのでスケジューリングに勘違いあったかなと。
>>533 だ・か・ら、
プロセスのタイムスライスが食われてるんじゃないのか?
プロセスわけるか、サービスとして作成すれば解決するだろう。
535 :
513 :2005/11/30(水) 02:44:04
>>534 常に仕事しているのはプライオリティ下位のスレッド。タイムスライスが食われないはずなのにもたつくから理由がわからないでいる。
いわれてるのは普通に忙しいスレッドがある場合の話では?
536 :
デフォルトの名無しさん :2005/11/30(水) 02:47:59
テキストボックスまたはリッチテキストボックスで以下の2つの機能を 実現したいんですが、どうすれば実現できますか? 1.Ctrlキーを押しながらの数箇所選択 2.ドラッグ&ドロップで文字列移動
さぁ。 漏れは「常に」処理があれば、それだけで重いし、処理を分離する根拠になると思うけど。 ひょっとするとスケジューラはバックグランド処理だとみて、そのプロセスのターンアラウンド 下げるかもね。 その方がオーバーヘッド減りそうだし。 わかってると思うけど、プロセスの優先度はリアルタイム以上にあげないように。
538 :
デフォルトの名無しさん :2005/11/30(水) 02:58:42
>>536 System.Windows.Forms.Control
から派生する。
539 :
513 :2005/11/30(水) 02:59:20
>>537 だからプライオリティ低ければ、CPU100%食う処理でもすくなくてもNTでは通常の処理に影響しない(スレッド遷移のオーバーヘッドを除く)ということだとおもうんですけど?
"重い"といってる意味がわからないんですけど?SETIも同じような実装してますよね?あれも常に100%食ってるけれど通常のアプリは普通に動く。
論点がずれてると思うんですけれど。自分は今下位のプライオリティのスレッドの処理が上位のスレッドに影響するのかの話(規定の動作だとしないはず)の話をしてるんですが。
別チラシで頼むよ
>>539 クレーム付いたので最終レス。
少なくとも疑似マルチスレッドOSなら影響する。以上。
542 :
513 :2005/11/30(水) 03:32:44
終了します。失礼しました。
一プロセス内で数スレッド作って切り替えの様子みてると スパーク系ソラリスは頻繁に切り替わったけど NTはあまりスレッド切り替えしないね。
544 :
デフォルトの名無しさん :2005/11/30(水) 05:40:29
ヲタハケーン
シングルCPUのマシンで実行した場合と マルチCPU(含マルチコア)のマシンで実行した場合で違うよ
DataSetにDataTable1とDataTable2が追加されていて Relationが張ってるときに、 DataTable1.Select()のソート順にDataTable2のフィールドを 指定することはできますか? それともコードでDataTable1にソートしたいColumnを追加 してデータをコピーしないといけないのでしょうか? よろしくお願いします。
質問。 &と&&って何がちがうんですか? 処理の結果はかわらないと思うだけど。 後 | と || も。
前の式で判断の結果が明らかなときに後の式を判断するかどうか。 static bool IsTrue() { Console.WriteLine("True."); return true; } static void Main() { if (IsTrue() | IsTrue()) Console.WriteLine("bitwise-or"); if (IsTrue() || IsTrue()) Console.WriteLine("or"); }
あふぉがあふぉにれすするすれ
ビット演算子と論理演算子じゃないの?
553 :
デフォルトの名無しさん :2005/11/30(水) 14:04:06
機能を一つ追加した程度でもバージョンアップしても良いの? こないだ自分用のツール作ったんだけどさ、 毎日のように新しい機能とか思いつくんだよ だからさ、毎日のようにマイナーバージョンが増えていくんだ 数日に一回ぐらいにするべきかな?
自分用なら好きにしろよ
>>553 バージョン管理をする目的は何?
それが明確になれば答えは出るんじゃない?
557 :
553 :2005/11/30(水) 14:39:49
>>554 今は自分用だが我ながら出来が良いのでいずれ誰かにあげるかもしれん
>>555 ん?ってことは機能が違うならマイナーアップして良いってこと?
>>557 何を気にしているのかわからんが、バージョン番号の付け方に決まりなど無い。
よって
>>554
>>553 ならバージョン管理でも導入して、適当なところでtag付けておけ
そうすりゃ自分用と配布用にある程度分けられるだろ
561 :
501 :2005/11/30(水) 16:39:11
RichTextBox について再び同じような内容で質問です。
>>502 氏のリンク先に書かれたソースコードを適用したところ、
一時的には強制フォント変更の問題が解決したように思えたのですが、
別ダイアログを使って文字列検索を行うため HideSelection を false にしたところ、
なぜか再び Arial 地獄が復活しました。
理由は完全に不明です(ググってみても分かりません)。
この問題について何か情報は無いですか?
ちなみに、「検索ダイアログ.ShowDialog(this)」の直前で false にして
直後に true に戻す作戦は試しましたが駄目でした。
この文字列検索機能を諦めるべきでしょうか?
完全な解決ではないですが、 OpenJane の検索のように一件検索するごとに
ダイアログを閉じる方法もあります。
しかし、せっかく IE の検索ダイアログ並みの検索ダイアログを作成したので、
可能であれば使いたいと考えているのですが……
ハンドルが作り直されたからだろ HideSelectionの変更のためにはウィンドウスタイルを変更せにゃならんはず メッセージ送りなおせば?
563 :
501&561 :2005/11/30(水) 16:58:51
どの部分でメッセージを送れば良いですか? まだまだ初心者なもので、API とかメッセージとかよく分からないです。 ところで、プロパティのオーバライドってできましたっけ? できるようであれば、そこの get や set のところでメッセージ送信して、 それから return super.HideSelection とかやれば良さそうな気がするのですが…… (メッセージ送信の方法はコンストラクタでやっているのと同じで良いんですよね?)
564 :
501&561&563 :2005/11/30(水) 17:12:06
訳が分からなくなってきたので、 一件ごとの検索で妥協することにしました。
ハンドルが変わるたびに送りなおす必要があるのなら、 HandleCreatedイベントでやらせとけばいいんじゃね
566 :
デフォルトの名無しさん :2005/11/30(水) 17:25:14
>>565 ありがとうございます!
さっそく
this.HandleCreated += (ry
でやってみました!
そしたら成功しました!
大感謝であります!
VBからC#に乗り換えたんだけど、ドキュメント読みながら ふむふむこうやるんだ!なぁーんだ簡単!うわすげぇ!ウハハハハwww と楽しみながらやっております。以上
568 :
567 :2005/11/30(水) 18:15:13
特に感動したのは、VBのモジュールは知ってたがクラスが何の役に立つのか さっぱりわからなかったので、C#使った瞬間こういうことなんだ!!!と興奮した。 最初は “静的” という言葉がナンなのかわからなくて困ってたけど。 あとVBではできなかったマルチスレッドに感動しました。 もうドゥーイベンツでごまかすのは おさらば だと思うと涙が出そうです。
569 :
デフォルトの名無しさん :2005/11/30(水) 19:28:32
VBでもマルチスレッドできるよ? VB6じゃできんけど。
C#で避けゲーみたいなの作ってるんだが 難しいな・・・ なにをどうすればいいかさっぱりだ
571 :
デフォルトの名無しさん :2005/11/30(水) 20:14:08
PrintPreviewDialogでさ、「プレビューを生成しています。」って小画面表示されるよね? あれをセンターに表示したいんだけど、どうしたらできる?
572 :
デフォルトの名無しさん :2005/11/30(水) 21:39:37
継承によって機能拡張はできるけど、その逆ってできないの? つまりクラスなどの機能縮小ね コントロールとか無駄な部分が多くてリソースが勿体無い
そういう設計自体が好まれて無いよ。
>>572 というか常識的に考えてさ、Controlクラスが場合によってControlとして
振舞ってくれなかったら悪夢だろ。Streamクラスみたいにそういうのを
想定しているならまだしも。
ちなみに継承は「拡張」じゃない。「特化」や「限定」だ。
拡張でもいいんじゃないか? java だと extends だし。
機能面から見ると拡張でもよさそうだね。 機能縮小というか隠すだけなら包含と委譲でいけるが、ほんとに削り落とすとなるとなさそうだな。
>>572 俺としては、Windows Formsを無視したオリジナルな
軽量ウィンドウライブラリを構築することをお勧めする。
Win32のちょっとしたラッパでいい。
出来上がったら俺が使ってやる。
578 :
デフォルトの名無しさん :2005/11/30(水) 22:24:25
MFCでもつかっとけ
プロパティが30個ほどある、設定を保持しておくためだけのクラスがあります。 プロパティは読み書き可能なんですが、そのインスタンスから、 同じプロパティで、すべてのプロパティが読み取り専用なクラスを作りたいんですが、 どんなやり方がありますかね? 設定を一度設定ファイルから読み込んだらもう変更したくないんですが
>>579 > 設定を一度設定ファイルから読み込んだらもう変更したくないんですが
読み書き可能なクラスを作る必要があるのか?
>>579 逆転の発想なら、get のみのアクセサを持つクラスを継承して set/get 両方を持つクラスを作る。
正攻法なら、読み取り専用のクラスの set アクセサを使ったら例外飛ばすようにする。
>>580 うう、すみません説明不足でした。
XmlSerializerは、プロパティ(またはフィールド)が読み書き可能じゃないと使えないようなんです。
できればBinaryFormatterやSoapFormatterは使いたくないんですが、
あと独自の設定ファイルも使いたくないんですが(大量のプロパティを延々設定していくメソッドを作るのはなんか変)
あきらめるしかないでしょうか
>>581 ありがとうございます
上を試して見ます
ねぇXMLってあんまり使われてないん? ここでいうのも何なんだがどのXMLすれもほとんど更新されてへん。使い始めたばかりでいろいろと聞きたいことあるんだけど・・・
聞かれりゃ答える XMLスレはすぐ落ちるので見に行かなくなったが
自分のパソコンの中をxmlで検索してみれば?
俺のなかではRSSとかAtomとかオモスレー
588 :
584 :2005/12/01(木) 00:10:55
>>585 お言葉に甘えて。
クラスにあたるようなものをXMLSchemaで定義して、それにあわしてちょっと複雑な設定ファイルを作りたいんだけど、
その場合、クラスのようなものをcomplexTypeで定義、その中でメンバに当たるようなものをattributeもしくはelementで表現。
elementとかは基本的にはsequenceで列挙、その中で候補が複数あるものにはchoiceを使い、
値には正規表現でバリバリにチェックという感じで委員でしょうか?
XMLは重杉でオンラインでは使えん。 VS2005でも3〜4倍程度の高速化だし、使えるかどうか微妙。
オンラインとはどんなことを想定して言ってるの? Webサービスは全部Xmlメッセージだと思われ? VS2005で3〜4倍高速化したとはほんと? 普通にうれしいんですが
>>588 答えるとは言ったがそれはスレ違いじゃね?
.NETの標準的なクラスのXML Schemaが知りたいならxsd.exeを使えば雰囲気はつかめると思う
593 :
デフォルトの名無しさん :2005/12/01(木) 18:01:33
リッチテキストボックスにファイルなどを貼り付けるにはどうしたらいいですか? 昔VB6か何かで同コントロール使ったときには簡単にできた気がするのですが、 C#でのやり方は知らないので、知っていたら教えてください
594 :
593 :2005/12/01(木) 18:06:26
かなり説明不足でした 要するにコピペしたときにアイコンが表示されるものとされないものがあるので、 これをすべて表示できるようにするにはどうしたらいいのかってことです
.Net2.0とSharpDevelop2使ってます。 System.Windows.Forms.ListViewでサブアイテムに画像を表示させたくて調べた結果オーナードローしか手がないようで挑戦しました。 派生クラスをつくって、 this.DrawSubItem += new System.Windows.Forms.DrawListViewSubItemEventHandler(this.ListViewDrawSubItem); this.DrawColumnHeader += new DrawListViewColumnHeaderEventHandler(this.ListViewDrawColumnHeader); を追加して、e.DrawBackground()で背景を描いてから、ListViewDrawSubItemの中では画像を表示したいカラム以外ならe.DrawText()、画像のカラムならm_imglist.Draw(e.Graphics,...)、こんな感じで描画は成功しました。 でも問題が1つ。 項目をクリックして選択行を変えただけで、表示されてる全ての行の全てのカラムにいちいち再描画イベントが飛んできてしまうので、チカチカして重いんです。 オーナードローを使わないで普通に使ったときのListViewの動作は、選択行を変えたときは選択が消える行と選択される行だけが表示更新されているのでチカチカしませんし軽いです。 同じ動作にしたいんですが、再描画を行う必要があるのかないのかイベントプロシージャ内で判別する方法がわかりません。 なにかいい方法ないでしょうか。
ん〜、試した限り元選択行と新選択行しか再描画してないようだけど。.NET2.0正式版。
うう…そちらの環境では元選択行と新選択行しか再描画しませんか。 ListViewを継承したクラスでOwnerDraw=trueにして、5個カラムをつくり、画面上に4行見えている状態で選択行と違う行を1回だけクリックしたときの挙動をListViewDrawSubItemの先頭にデバッグ出力を入れて試してみました。 見事に表示行全てしかも2回も呼ばれるようです。(涙 --- 2005/12/01 22:23:08 column=0item=0 2005/12/01 22:23:08 column=1item=0 2005/12/01 22:23:08 column=2item=0 2005/12/01 22:23:08 column=3item=0 2005/12/01 22:23:08 column=4item=0 (略) 2005/12/01 22:23:09 column=2item=2 2005/12/01 22:23:09 column=3item=2 2005/12/01 22:23:09 column=4item=2 2005/12/01 22:23:09 column=0item=0 2005/12/01 22:23:09 column=1item=0 2005/12/01 22:23:09 column=2item=0 2005/12/01 22:23:09 column=3item=0 2005/12/01 22:23:09 column=4item=0 (略) 2005/12/01 22:23:09 column=0item=3 2005/12/01 22:23:09 column=1item=3 2005/12/01 22:23:09 column=2item=3 2005/12/01 22:23:09 column=3item=3 2005/12/01 22:23:09 column=4item=3
.Net2.0SDK正式版(日本語のSDKはまだのはずなので英語版)+SharpDevelop2(corsavyの最新版)です。
599 :
デフォルトの名無しさん :2005/12/01(木) 23:28:35
.NET Frameworkのソースを読んでいるのですが System.Windows.Forms.TabControl.OnDrawItem(DrawItemEventArgs) を呼んでいる個所が見つけれません。 ご存知のかたいませんか?
WndProcの周辺でないの?
601 :
デフォルトの名無しさん :2005/12/02(金) 00:34:53
System.Windows.Forms.TabControl.WndProc(Message&) System.Windows.Forms.TabControl.WmReflectDrawItem(Message&) System.Windows.Forms.TabControl.OnDrawItem(DrawItemEventArgs)
>>597 WndProcで、base.WndProcを呼ぶ前に
作成していた場合RegionをDispose&HrgnをDeleteObject
CreateRectRgn関数&GetUpdateRgn関数で更新リージョン取得
Region.FromHrgnでRegion作成
OnDrawSubItem or DrawSubItemで
e.Bounds.Locationが上で作ったRegionのIsVisibleでない場合処理中止
これでどう?
ぜんぜん関係ないけど ArrayListよりList<>の方が キャストなしでも10%くらい速いんだね。
604 :
デフォルトの名無しさん :2005/12/02(金) 00:56:02
値型ならボックス、アンボックスが起こらない分はやいだろうね 参照型でも速い?
Windowsフォームの特定の範囲だけ印刷する事は出来るのでしょうか?
606 :
デフォルトの名無しさん :2005/12/02(金) 01:12:18
>>601 そこまでは誰でもわかります。
TabControl.DrawItem イベント のヘルプに
「OwnerDrawFixed に設定されている場合に、タブが描画されたときに発生します。」
とあるのですが、これがどこに記述してるのかが知りたいのです。
すいません、ものすごく基本的な質問かもしれませんが… DLLファイルってあるじゃないですか。 これって多くがC++で制作されているのかな? そうするとC#上でC++で制作されたDLLファイルを扱うことが出来ないの?
日本語が崩壊してるな。 普通のC++が出力するDLLとC#など.NET向きのコンパイラが出力するDLLは別物。
すいません、端子RESのプログラムは何で再生すればいいのでしょうか お願いします、教えてください。
解読: すいません、拡張子resのファイルは何で編集すればいいのでしょうか お願いします、教えてください。 でOK?
612 :
デフォルトの名無しさん :2005/12/02(金) 01:43:09
エディタ
613 :
デフォルトの名無しさん :2005/12/02(金) 01:46:23
>>606 >そこまでは誰でもわかります。
誰でもわかるならもうちょっと考えろよ
オーナードローだからWM_DRAWITEMが怪しいとは思えないのかね
WM_DRAWITEM が飛んできたときに
WndProcでWmReflectDrawItemが呼ばれる
>これがどこに記述してるのかが知りたいのです。
よってWndProc
最初っからしりたいこと書いてよ
小出しにされてもわからへんがな
615 :
デフォルトの名無しさん :2005/12/02(金) 01:51:40
>>611 ええっと、拡張子がresのプログラム?を落としたんですが再生の仕方がわからないんです。
僕も分かりません><
618 :
デフォルトの名無しさん :2005/12/02(金) 01:57:33
>>613 WmReflectDrawItemが呼ばれる条件にはOwnerDrawFixed に設定されているのと記述はありません.
Msgが0x202Bなら無条件でWmReflectDrawItemが呼ばれます.
つか0x202Bがなんなのかが分からないんです。
……メッセージのこと知らないのか? Windowsを勉強してこいとしか言いようが無いが
620 :
デフォルトの名無しさん :2005/12/02(金) 02:04:50
0x202Bは WM_REFLECT + WM_DRAWITEM
621 :
デフォルトの名無しさん :2005/12/02(金) 02:05:20
じゃあ0x202Bはどんなメッセージ? WM_DRAWITEM ではありませんよw
惜しい、30秒
PSDKからhファイルだけ抜いてどっかにおいといて デスクトップ検索。これお勧め
624 :
607 :2005/12/02(金) 02:15:13
>普通のC++が出力するDLLとC#など.NET向きのコンパイラが出力するDLLは別物。 そうなんですか。 ネットで公開されているファイルなどを利用出来るのなら便利だと思ったのですが。
625 :
デフォルトの名無しさん :2005/12/02(金) 02:16:01
誰でもわかるのに メッセージ一つ調べられんのかよ 最初っから TabControl.DrawItem イベント のヘルプに 「OwnerDrawFixed に設定されている場合に、タブが描画されたときに発生します。」 とあるのですが メッセージが0x202Bのときに発生するようですが 0x202Bって何ですかって聞け
626 :
デフォルトの名無しさん :2005/12/02(金) 02:18:02
じゃあ、メッセージ0x202Bを投げてる人は誰ですか? Windowsですか?
627 :
デフォルトの名無しさん :2005/12/02(金) 02:23:44
REFLECT_NOTIFICATIONS WM_REFLECT (WM_USER+0x1c00) あたりを調べろ もう十分付き合ってやっただろw
628 :
デフォルトの名無しさん :2005/12/02(金) 02:25:56
てか613がずばり答えいってんジャン 釣りか?
629 :
595 :2005/12/02(金) 13:15:29
595です。解決できますた。 やっぱり、イベントハンドラ内で描画すべきかどうか判断する必要があって、それをしないで描画していたので何度も表示更新されてました。 e.Status または e.ItemStatus がそれです。 ところが、単一選択を指定している場合、 HideSelection が true/false に関わらず Selected の bit は常にどの行でも立っているという謎の仕様のようです。 これであのあと、一晩ハマリました。Focused なら選択行だけが真になっているのでソチラを採用しました。 あと、コントロールの Focused が false のときにも選択行をハイライトしたかったので、コントロールの SelectedItemChenged もトラップして選択行が変わるたびに自分で行番号を憶えるようにして全て解決できました。 同じとこでハマル人のために、ご参考までに〜〜
ハッシュテーブルに入れたオブジェクトは ハッシュテーブルから削除すればGCの対象になるのでしょうか? それとも何かしらのオブジェクトの破棄をしないとメモリリークの原因となってしまうのでしょうか?
windowクラス名を固定することはできないんでしょうか?
keyの相手は2つある場合のデータ保存方法、取得方法を教えて下さい。 key data1 data2 1 a b 2 c d というように key=1を指定したらaとbを取得でき key=2を指定したらcとdを取得するということをしたいです。 ハッシュを使うとdata1だけなら取得できることは調べて 分かったのですが、data1とdata2の2つを取得する方法がわかりません。
つSortedDictionary<int,Pair<Data1Type,Data2Type>> Pairはそれらしいの自分で実装のこと
データ構造が不明だが、data1とdata2を持つクラスを作ってHashtableに格納するとか? それともNamedValueCollectionみたいなのを求めてるのか?
hash.Add(1, new object[]{a,b}); hash.add(2, new object[]{c,d}); object[] arr = (object[])hash[1];
HashTableを2つ使えば解決w。つーかC#関係なくね?
>>638 そんな蛸な設計してる部下いたら作り直させる。
いいんだよ 動きさえすれば
Listより、Hashtableを使ったほうがよい(速い)場合の要素数って15くらい?
標準のHybridDictionaryでは要素数10でListとHashtableを切り替えるな
Dictionary<T> って Add した順序が保存されている気がするけど ひょっとして ListDictionary と同じ実装なわけ?
Thx じゃ、Hashtableを2つ使えばよさげって場合はなかなかなさそうですな
645 :
デフォルトの名無しさん :2005/12/03(土) 02:35:40
リッチテキストでのD&D機能が成功しない…… ちょこっとテキストを楽に移動させたいだけなんだけどなー なのになんでこんなに苦労せにゃいかんのだ
>>624 だから利用出来るってば。
>>609 参照
[DllImport("hoge.dll")]
extern static int Hoge();
みたいな感じ。
CrystalReportを使って帳票を作っています レポートビューワで表示したときに複数の帳票を一つのビューワで出したいと思っているのですが、メインレポートのタブの横に新しいタブを追加する方法がよくわかりません。 新しいタブを追加し、別のレポートを出力する方法を教えてください
648 :
595 :2005/12/03(土) 20:14:37
クラス classA の配列を返すメソッドを書きたいんですが、どうやって classA の配列を返したらいいかがわかりません。 そのメソッドの中では、与えられた条件を元に、1つずつ classA のインスタンスを new しています。 つくられるインスタンスの数は、条件によってまちまちで、予め予測できません。 classA[]ary; classA obj = new classA(); array.Add(obj); のように次々追加して、 return ary; のように返すことができるかと思って調べたんですが、できないようです。どうやったら配列をつくって返すことができるでしょうか。
List ary ary.add(new A); A[] a=new A[ary.Count] ary.CopyTo(a); で
>>649 というか何言語だそれは
ArrayList/List<classA>使えば良いよ
配列にするにはToArray
重たくならんか?
652 :
595 :2005/12/03(土) 21:21:12
>>650 ArrayListを使ってToArray()でobject型の配列として返すことができるのを確かめました。
あとは classA[] として返す方法ですが List<classA> の方がその説明だと思いますので調べてみます。
>>649 Listを使ったらできるということですよね。調べてみます。
ありがとうございますー!!
ArrayList.ToArrayのオーバーロード見れ
654 :
デフォルトの名無しさん :2005/12/03(土) 22:08:15
C#のイディオム集。みたいなのどこかにありませんか?
MSDN
656 :
595 :2005/12/04(日) 00:02:38
>>653 > ArrayList.ToArrayのオーバーロード見れ
うは…見落としてました!!(泣)
(classA[])list.ToArray(typeof(classA)); で動作しました。
蛇足ですがちょっとひっかかったところを…ListArray に1つも要素を追加せずに
return (classA[])list.ToArray(typeof(classA));
された戻り値を classA[]l=foo(); のように受け取った場合、 l は null とはならないようです。
要素0件かのチェックは l.Length プロパティでうまくいきました。
なんでICollectionにToArrayがないんじゃ。
>>657 string[] strs = (string[])new ArrayList(collection).ToArray(typeof(string[]));
typeof(string)な。 ていうか素直にCopyToしとけ。
ここは extension method の出番だな
複数のスレッドから同じ変数を読み込む場合は、それぞれ別の変数を 読み込むより効率が悪いのでしょうか?
volatile をつければ効率は落ちるだろうが 効率よりも確実な同期を気にすべきだろ
yieldをつかったイテレータ実装動いてるんだがなんとなくしっくり来ない・・・
664 :
デフォルトの名無しさん :2005/12/04(日) 11:36:29
RebarDotNet.dllというのを使ってツールバーを作ろうと思うのですが、 Bandにボタンとかコンボボックスとかを複数設置するには どうしたら出来るでしょうか?
コンパイルした奴を逆コンパイルして見れ
665 -> 663
>>662 ありがとうございます。勉強になりました。
>>664 つーかPanelおいてその上に配置したら?
Typeで型情報を管理してるのよく見るけど 毎回GetType()で済ませたら何かまずいの?
意味がわからん
672 :
デフォルトの名無しさん :2005/12/04(日) 14:22:04
勉強がたらん
Typeに基づいてキャストしたいんだけど、それらしいのが見つかりません・・・ こんな感じにしたいんだけどできるんでしょうか? Dog dog; Bird bird; Type birdType=bird.GetType(); //check the type of target animal is same type or not. Bird tmpBird=birdType.Cast(dog); 例が蛸なのはおいといてください・・・
Typeを使うってことは普通、動的にしか型が分からないってこと。 キャストってのは静的に型が分かってないとできないこと。 例えばその例なら > Bird tmpBird=birdType.Cast(dog); で結局Birdにキャストするんだから、(Bird)docと書いても変わらないわけで。 as演算でもやってれば。
if( dog.CanFly ) Bird tmpBird =(Bird)dog;
飛べるのが鳥だけと思うなよ
鳥とペンギンの関係と「飛ぶ」という振る舞いについては良くある話だな。
こうだな! try { if( dog is Bird ) { Bird tmpBird =(Bird)dog; tmpBird.Fly(); } } catch(NotSupportedException e) { }
誤爆?
質問です。 unmanaged API に渡すために、バイト配列へのポインタをDWORDとして取得したいのですが どのようにすればよいのでしょうか。
ポインタはDWORDじゃないが。 基本的に普通に配列として渡せばマーシャラが勝手にやってくれるけど? Win32なら問題も無かろうし。 あと関数が配列の要素を変更する場合Out属性もつける必要がある。
682 :
680 :2005/12/04(日) 17:21:51
>>681 レスどうもです。
UInt32を引数としてとるデリゲートを通して呼び出しているので、
配列をそのまま渡すわけにはいかないんです。
情報を後から出すなと そのデリゲートも書き換えればいいが、そういうわけにもいかない場合は ・unsafeでfixedしてポインタからIntPtr生成 ・GCHandle&GCHandleType.Pinnedで固定してAddrOfPinnedObject でそのIntPtrをToInt32 ……まて、デリゲートってことはコールバックか。 場合によっちゃ固定で難しいこともあるぞ。
684 :
680 :2005/12/04(日) 17:27:52
・・失礼しました。
デリゲートのほうをUInt32→byte[]にしたらうまくいきました。
すれ汚しすみません。
>>681 >>683 多謝
キャストよりasを使えよ
ものすごい馬鹿な質問なんですが、 System.Web; って標準でインストールされているんでしょうか? using System.Web; してもそんな名前空間は存在しないって怒られるんですが・・
プロジェクトの参照設定に入ってる?
usingと参照設定は別物だぞ usingは単に名前空間をコード内で省略して書けるってだけ
689 :
686 :2005/12/04(日) 21:10:56
>>687 688
サンクスです。
プロジェクトー>参照の追加
でうまくいきました
DrawImageの遅さに嫌気さしてgdi32を直接コールするプログラム書いてます デバイスコンテキスト作成するたびにGDIリソースってのを消費するらしいですがコレって何でしょうか・・・ DC作りすぎるとやっぱりマズイのかな・・・ リソースを消費を抑えるテクニック等のアドバイスお願いします。。。
691 :
デフォルトの名無しさん :2005/12/04(日) 23:58:09
嘘つけ、DrawImageよりおまいのWIN32生コールのほうがはやいことは 絶対無い
作ったものを削除すればいい どうでもいいがGDIとBitmapクラスも大概相性悪いよな
693 :
690 :2005/12/05(月) 00:20:36
>>691 32ビットの640*480ビットマップを連続転送させるプログラムでテストしたところDrawImage:BitBltで2倍近いパフォーマンスが出ましたけど・・・
テストの仕方が不味かったですかね・・・orz
>>692 デバイスコンテキストは描画時のみ作成して、描画後は解放するのが流儀なのでしょうか?
現在のプログラムでは20個弱程度のDCを常時保持している状態です。
大きいビットマップを作成して複数のビットマップをチップとして扱うことでリソース消費を抑えられたらなーとか考えてました・・・
>>693 一回C言語でWin32APIを使った描画を勉強してみるといい。
C#に限った話じゃないんだが、お舞らログ出力ってどうしてる? できればコンフィグなどで出力するログをスイッチしたいんだけど、実行時に毎回通るところにif(ほにゃらら〜 って書くのがなんかやなんだが。
つ[ Strategyパターン ]
C丼とはC♯のことですか?
>>696 Strategyなんかにしたらif(ほにゃらら よりも遅くなるだろうがゴラァ
ConditionalAttribute
syslog
log4netなり Logging Application Blockなり使えば?
703 :
デフォルトの名無しさん :2005/12/05(月) 17:49:30
using StackAsterisk.NetDefineSet.HeaderDefine; に失敗します。どういう事ですか。これは。
StackAsterisk.NetDefineSet.HeaderDefineに該当するページが見つかりませんでした。 検索のヒント キーワードに誤字・脱字がないか確かめてください。 違うキーワードを使ってみてください。 より一般的な言葉を使ってみてください。 -------------------------------------------------------------------------------- c2005 Google
705 :
デフォルトの名無しさん :2005/12/05(月) 18:21:09
そのサイトの同じ作者のほかのソースから持って来い
とは言えまるで応用力もなさそうだから
>>703 にできるかどうかは知らないけど
707 :
デフォルトの名無しさん :2005/12/05(月) 18:53:04
類似したソースは見つかりませんでした
708 :
デフォルトの名無しさん :2005/12/05(月) 19:16:04
もういいです
C#のソースを配布したいのですが、.csファイルの他にどのファイルを公開すればよいのでしょうか? プロジェクトのフォルダの中身を全て公開すればよさそうなんですが、 .suoファイルなどの中に個人情報が含まれていないか心配です。
*.suo, obj, bin\Debug, *.pdb あたりを消せばいいと思う
.suoと.userは要らない。 .csprojは参照dllを追加してるとdllのパスに ローカルの相対パスかネットワークドライブなら絶対パスが入るので注意。 あとVSSを使ってるなら.csprojと.slnにその情報が残ったと思う。
ここまでの話を総合すると、.csだけでいいってことだ。
714 :
デフォルトの名無しさん :2005/12/06(火) 00:39:24
本当に感謝の気持ちがあるならURL貼れ
プロジェクトファイルやソリューションファイルがないとビルドする時に困る
csc.exeにも慣れとけ
もう MSBuild から離れられない
718 :
467 :2005/12/06(火) 08:33:48
原因が分かりました。 2chへの接続はHttpWebRequest/HttpWebResponseを使ってたのですが どうも1つのプロセスからは1つのサーバーにセッションを2つしか作れないようです。 ・書き込みを行うプログラムをシングルスレッドにして、プログラムを多数起動する だとセッションが大量に生成されるので、速かったようです。 これは自分でTcpClientを使って書かなきゃいけない予感。
>718 コネクション数の制限ってhttpの仕様。
>>719 HTTPの仕様っつーか、クライアント側とサーバ側のそのぞれの設定だろ?
>>718 maxConnectionとApp.configあたりでぐぐったら?
サーバの負荷とか考えたことあるのか
719 名前: デフォルトの名無しさん [sage] 投稿日: 2005/12/06(火) 09:36:03 >718 コネクション数の制限ってhttpの仕様。 722 名前: デフォルトの名無しさん [sage] 投稿日: 2005/12/06(火) 12:21:06 サーバの負荷とか考えたことあるのか
>>718 このあたりのおまじないもやって置くとよいかもしれない。
System.Net.ServicePointManager.DefaultConnectionLimit = 10;
System.Net.ServicePointManager.MaxServicePointIdleTime = 10;
System.Net.ServicePointManager.Expect100Continue = false;
なんでこんな制限というか設定値があるかというと、RPCの際に
なるべくHTTP 1.1 を使って接続を使いまわすため。
PerformanceCounterで値とろうとしてるんだけどNextValueだけで160-180msecかかってる・・・orz 遅すぎ。パフォーマンスカウンターはどうやってるんだ? テストコード PerformanceCounter p = new PerformanceCounter( "Thread", "% Processor Time", Process.GetCurrentProcess().ProcessName + ".vshost/0", true); while (true) { Debug.WriteLine("begin-" + Environment.TickCount.ToString()); float val = p.NextValue(); Debug.WriteLine("end-" + Environment.TickCount.ToString()); }
こんなフォームを作りたいんですけど (1)タイトルバーはアイコンなし、×ボタンだけ (2)サイズ可変 (3)右下にサイズ変更グリップ 最近のコモンダイアログって、(1)〜(3)全部備えているじゃないですか。 真似したいんですがうまくいかないんです。 FormBorderStyle.Sizableだと(1)が出来ないので、FixedDialogに SetWindowLongして(1)と(2)は出来たのですが、(3)が 分かりません。どうしたらいいでしょう?
FormBorderStyle.SizableToolWindowでいいんじゃねぇの
729 :
467 :2005/12/06(火) 16:43:34
HTTP1.1の件は知っておりますが、そういう制限はアプリの製作者で実装するもので、
クラスライブラリ側で制限がかかってたとは思いもしませんでした。
>>720 >>721 >>724 ありがとうございます。おかげでTcpClientを使わなくてもよさそうです。
vb6から乗り換えを考えてるのですがC#のメリット、デメリットはなんですか?
言語のメリットねぇ。 Cライクのすっきりした文法とか。
vbの文法をキモく感じないなら、まあ乗り換えなくてもいいんじゃないかなあ。
733 :
デフォルトの名無しさん :2005/12/06(火) 17:14:09
>>730 .NET1.1 では、 VB.NET では不可能で、C#では可能なことがいくつかあった。
.NET2.0 では、 VBがかなり機能追加されたはず。
>>727 .net 2.0ならFormBorderStyle.Sizableで全部できた希ガス
ShowIcon = false
MinimizeBox = false;
MuximizeBox = false;
こんな感じで
C#でBASICのインタプリタもどきを作ろうとしてるんだけど、 C#で普通にWindowsアプリを作ると、初期化した後はウィンドウにイベントが来るまで何も出来ないと思うんだけど、 テキストファイルに書いてあるコードを休みなく順次実行するにはどうしたらいいんだろう? マルチスレッドにするか、timerに1msごとにイベントを発生させてそれごとに1行ずつ進めていくぐらいしか思いつかないんだけど。
736 :
725 :2005/12/06(火) 18:19:45
すいません。こんなに遅いのが自分の環境だけなのか誰か試してもらえませんか? 後自分が何か勘違いしてるようであれば指摘してもらえると助かります。
Process.GetCurrentProcess().ProcessName + "/0" これなら?
>>725 同じコードをもう一度実行するとどうなりますか?
739 :
725 :2005/12/06(火) 19:04:49
先頭に using System;
>>735 ・全部一気にに実行する(プログラムが終わるまでメッセージ受け付けない)
・マルチスレッド
743 :
740 :2005/12/06(火) 20:25:43
すみません。先頭に using System; を付けてみたのですが、
error CS5001: プログラム 'hhh.exe' のエントリ ポイントが定義されていません。
とエラーが出ます。やはり
>>740 にあるプログラムはnamespaceなど、
多くのものが省略された解答であるとみるべきでしょうか?
>>743 Main の前に static 付けれ
staticも抜けてるな 下の方のサンプルにはちゃんと書いてるのに
おぉ、うまくいきました。
using System;
class Sample
{
static void Main()
{
Console.Write("Hello! World!");
}
}
これが一番簡単な形なんですね! やっと一歩踏み出せました。
>>744 ありがとうございます
>>725 begin-559578
end-559609
begin-559609
end-559625
begin-559625
end-559625
begin-559625
end-559625
begin-559625
end-559640
……
初回がちょっと遅いけど、それ以降は1回のループあたり5msくらいか。
749 :
725 :2005/12/06(火) 22:48:46
>>748 まじっすか・・・orz
3G相当アスロンなのに・・・
750 :
デフォルトの名無しさん :2005/12/06(火) 23:31:33
ある文字列が適切な正規表現であるか判別するには コンストラクタでArgumentExceptionをキャッチするしかないんですか? IsValidみたいなのないの?
751 :
デフォルトの名無しさん :2005/12/06(火) 23:56:48
Hashtableについて教えてくれ key : ushort value : ArrayList Hashtable hs = new Hashtable(); hs[0] = new ArrayList(); foreach(ArraList ar in hs.Keys){} でビルドできるが、ArraList ar でエラーがでます。 なにか問題でも?
keyはushortなんだろ? Valuesか、Keysいらないんじゃないの?
753 :
デフォルトの名無しさん :2005/12/07(水) 00:02:43
>>752 レス多謝です。
気づきました。ありがとう
754 :
デフォルトの名無しさん :2005/12/07(水) 00:14:43
VC#2005βをダウンロードして使ってるんだけど、 保存したり、プロパティ変更したりすると、PCが 勝手に再起動するんですが・・・ どうもPCと相性が悪い
うちもファイルIOが発生する処理? ビルド・リビルドとかするといきなり再起動する場合が・・
>>754 それってまずハードを疑うなぁ。電源容量足りてる&安定してる?
757 :
デフォルトの名無しさん :2005/12/07(水) 09:27:07
dotfuscator なんて読むの? ドットファスケータ???
>>757 元の単語 obfuscator がオブファスケータ(難読化する。先頭にアクセント。)で、
それと同じ感じでドットファルケータでいいと思う。
>>680 で質問させてもらった者ですが、もう一度質問させてください。
アンマネージド API を呼び出す場合に、
データの先頭アドレスを表すポインタ(IntPtr) を、 構造体の参照を引数としてとる関数に
データのコピーを伴わずに直接渡す方法はありませんか?
今度の場合は関数の宣言を変えることはあまりしたくありません。
構造体に一度格納してから渡す方法もあると思いますが、処理速度を考えるとこれもあまりしたくありません。
書き忘れていましたが、環境は .NET Framework 2.0 beta2 です。
ref Hogeの代わりにIntPtrを引数に取るオーバーロード書けば良いだろ
761 :
759 :2005/12/07(水) 23:24:21
>>760 今はとりあえずそうしているのですが、このような引数が複数あった場合、
2^n 通りのオーバーロードを書かなくてはならないことになります。
それが関数の宣言を変えたくないと言った意味です。
そのため将来を考え、もっとスマートな方法はないかと思い質問しました。
確かに現状ではあまり問題はないのですが。
両方で表現しなきゃならないのが3つより多いなんてあるのか……? つかそんなコードC#で書くな。
763 :
デフォルトの名無しさん :2005/12/07(水) 23:43:58
C++みたくメソッドの実装はクラスの外に書けないんですか? 2000行もあるようなクラスだとエクスプローラがなきゃ読む気しねーw
2000行もあるクラスを書くなってのが基本姿勢じゃないか C# 2.0はpartialキーワードでクラスを複数のソースに分けられる
>>763 わざわざ糞コードを書きにくい仕様にしてあるのにお前ときたら……
766 :
759 :2005/12/08(木) 00:01:51
>>762 そうですね・・・
正直2通りでも気持ち悪いくらいですが、他に代替手段がないのなら仕方ないですね
>>763 IDEのアウトランを使えばヘッダファイルに近い表示にできるかと。
Ctrl-M O => 定義のみ表示
Ctrl-M L => 元に戻す
>>728 SizableToolWindowですとタイトルバーが細いので・・・
しまた
>>734 読んでない
2.0はShowIconてのがあるんですか。まだ1.1なんで(´・ω・`)ショボーンです。
769 :
デフォルトの名無しさん :2005/12/08(木) 10:27:56
ログにXmlファイルを使っていて、 それをDataSetにロードして更新しているのですが 更新を随時ファイルに反映するためにはXmlファイルをWriteXmlで再び全て書き込むしかないですか? AcceptChangesでXmlファイルが変更されるようにできないですか?
C#のプロジェクトファイルから、Class図を生成する VS.NETの機能か、それに順ずるソフト教えてください。
>>768 formのIcon= null;にすればいいじゃん
デフォルトでnullだぜ デフォルトアイコンが表示されるがな
>>771 ありがとうございます。
ひととおり見てみます。
775 :
デフォルトの名無しさん :2005/12/08(木) 19:07:17
プロパティのsetに、ArgumentExceptionやその派生例外を投げるコードを書くのって変?
776 :
デフォルトの名無しさん :2005/12/08(木) 19:10:29
場違いだったらごめんなさい。 「Visual Studio .NET 2003」Windowsアプリを始めて作ります。 言語は、C#で作ってます。 サーバー上のMySQLからデータを取得して表示させたりしたいのですが、 そもそもDBへの接続の仕方が解りません。 一応、MySQLのODBCはインストールしてあります。 どなたかアドバイス頂けないでしょうか。 ちなみに私は、Windowsアプリの開発は始めてであり、 今まで、PHP+MySQLでの開発をメインに行ってました。 PHP+MySQL開発歴は、3年ぐらいになります。 Windowsアプリ開発歴は、1ヶ月も満たないです。 Googleに聞いてもSQL Serverの事例ばっかで なかなか参考になるページがありませんでした。 MySQL接続に関して、参考になるページがご存知でしたら そちらも合わせて宜しくお願い致します。
>>775 確かにちょっと気持ち悪さもあるが、妥当だろう。
むしろそのためのプロパティ。
C#で書かれたテキストエディタコンポーネントがあれば教えて下さい。 C#で書いているアプリケーションで、キーワード強調とインテリセンス機能をもったテキストエディタを用意する必要が出てきて、カスタマイズの必要もあるのでコンポーネントのソースを探してるんですが見つかりません。 DelphiならSynEditやTEditなど山ほど検索できたので、C#にコンバートできるか調べましたが唯一できそうなのがDeluxという商用ソフトのみで6万円以上するので諦めました。 逆方向ならBorlandが無償配布してるんですが…。 インテリセンスやキーワードハイライトは自分でなんとか実装します。 エディタコンポーネントとして最低限の機能のソースでもどこかにないでしょうか?? ゼロからテキストエディタコンポーネントをC#で書く方法、特にキャレットを出して日本語を入力したりカーソルを動かしてテキストを選択したり検索したりさせる方法や、そもそもコントロールをゼロから自作する方法がさっぱりわからないので…。
780 :
デフォルトの名無しさん :2005/12/08(木) 20:56:26
テキストエディタコンポーネントなんてみたときねーなw
>>778 SharpDevelopという.netのIDEがあってそれにインテリセンスも
キーワード強調も実装されている。ただし、オープンソースで
ライセンスは知らない。
782 :
デフォルトの名無しさん :2005/12/08(木) 21:31:35
>>778 そのくらいなら自分で実装してもたいした事ないだろ?
783 :
778 :2005/12/08(木) 21:45:32
>>781 ありがとうございます。SharpDevelopのソース見てみます。
コントロールをつくったことがなくC#でコントロール自作の方法を解説されているサイトもみつからずでしたので、
SharpDevelopほど大規模なIDEからそれだけを頼りに読み取れるか自信がなくてためらっていました。
やるしかなさそうですね。あたってくだけてきますー(汗
>>783 SourceForge(JP)でみたことあるが今メンテしてるな・・・
785 :
デフォルトの名無しさん :2005/12/08(木) 23:35:12
C#.NETでクラスライブラリ(DLL)を作成したものをVB6で使用する 方法はありますか。 開発ツールは.NET2003です。
は?
787 :
778 :2005/12/08(木) 23:55:30
>>784 おぉ…!!メンテ後思いしたりしたときには、名前教えていただけたら…。(^o^;
ちなみに SharpDevelop のエディタを参考に根性でゼロからコンポーネントをつくりはじめています。
現在キャレットを点滅させることができるようになりました。
結構難しかったです…。
(独自コンポ作成のポイント)
・独自コンポーネントは、System.Windows.Forms.UserControl から派生させる。
・キャレットは、コントロールがフォーカスを貰ったときに生成して、フォーカスを失ったら破棄する。
・コントロールがフォーカスを貰う・失うイベントは GotFocus,LostFocus イベントハンドラを使う。
・ただし、GotFocus,LostFocus は、コントロールのイベント一覧に表示されない(隠蔽されている)ので、手作業で追加するしかない。(ここでハマリました…。(;;)
コントロールの上に貼り付けたPanelのLeave,Enterイベントでキャレット処理を入れてもFocus来ないんですよね、なぜか。
788 :
778 :2005/12/08(木) 23:57:00
あ…大事なことを忘れてました。 ・キャレットはC#というか.Net自身では処理できない。WIN32APIを呼ぶしかない。 ここでもはまってました。(^^;
789 :
デフォルトの名無しさん :2005/12/08(木) 23:57:27
>>779 >>776 の質問者です。
ありがとうございます。
早速インストールしてみました。
左側のツールボックスに「MySQL Direct」なる項目が出てきました。
さらに質問があるのですが、「mySqlConnection」と言うのをFormに追加して
追加した「mySqlConnection」をダブルクリックすると、
「mySqlConnection Editor: mySqlConnection」と言う子ウィンドウが立ち上がり、
そこには接続の為のユーザー名、パスワード、ホスト名などを入れる項目が
あり、ホスト名の所に自クライアント以外のIPアドレス(192.168.0.100)を記述したのですが、
「Test Connection」で、なぜか「Access denied for user: '
[email protected] ' (Using password: YES)」
となってしまいます。。
192.168.0.10はPCのアドレスです。
192.168.0.100以外にホスト名や他ネットワークのIPを試しに入れてみたいのですが、
それでも上記のエラーが出てしまいます。考える原因として何が考えられますでしょうか?
(ローカル環境でしか使えないのでしょうか…)
宜しくお願い致します。
KeyDownイベントで初めて押された時のみを捕獲するにはどうすればいいですか? WM_KEYDOWNであれば lParam を見ればリピートカウントがわかったんですが、 KeyEventArgsにはそのようなプロパティはないようです。
OpenFileDialogのHookProcに手を全く入れられないのをどうにか なりませんかね。
KeyDownじゃ判断できない。 ProcessCmdKeyとかWndProcとかでWM_KEYDOWN捕まえるしかないね。
どうにもならない
>>778 インテリセンスやキーワードハイライトは自分で実装するんなら
TextBox拡張するだけじゃないのか?
TextBoxじゃ強調表示できないだろ。
796 :
デフォルトの名無しさん :2005/12/09(金) 01:41:54
ちょっとお聞きしますけど、ここにおられるC#プログラマさんたちはどういうスタンスでC#をお使いになっておられますか? C#でプログラミングを始めたという方は少ないと思うんです。 おそらくはC++かJavaのどちらかからの移行あるいはそれとの併用という形で利用されている方が多いだろうと思います。 それでどうしてC#を使うのかということを聞いてみたいんですけど。 例えばJavaよりよさそうだからとか、C#で出来ないところだけ、C++でやるとか。 ちなみに自分はJavaをやっております。 C#は市販の説明書を読んで、評価版をいじったみた程度なんですが、.NETさえ普及すればJavaよりいいなという感じでした。 今のところ、JavaのC#に対する優位性というのはMS社勢ゆえの将来性とC++との連携だと思うんです。 しかし自分はJavaでプログラミングを始めた人ですから、C++は勉強したことがないです。 C#を最大限にいかすにはやはりC++の知識もいるでしょうから、今のところは遊び以上では手が出ないというところです。
3行に要約しろよ
798 :
デフォルトの名無しさん :2005/12/09(金) 01:49:28
わかりました。では… あなたのC#に対するスタンスを教えて下さい。 例)Javaから移行・C++と併用…
799 :
デフォルトの名無しさん :2005/12/09(金) 01:50:49
友達に相談したらC#を奨められたので、初めてのプログラミングはC#だ まあHTMLでJavaScriptを弄ってたんで全くの初めてって訳ではないが
>>798 用途:趣味
状態:C++と併用
理由:Windows特有の内容はC♯の方がやりやすいことが色々と多いから。
C++/CLIがそれなりになったらまた考える。
801 :
778 :2005/12/09(金) 02:23:17
>>794 あーなるほど…。要件をもう少しきちんと書くと、
・キーワード強調表示、
・インテリセンス、
・強調表示でもおかしくならない無限回数Undo/Redo、
・タブや改行コードは画像で表示、
RichTextBox とか TextBox のコンポ拡張で、文書サイズが数MB
あっても速度的問題もなく上記がひととおりクリアできるんなら、
その方が確かに楽なんですが、Code Project 等で見つかった事例
だとハイライト処理が重かったり、改行コード等を画像で表示
する方法が見つからなかったりで、全部の要件を拡張で満たす
のはどうも無理っぽい気がして、スクラッチしかないかなぁと。(^^;
TextBox の拡張でなんとかできるもんなんでしょうか?
802 :
デフォルトの名無しさん :2005/12/09(金) 02:25:13
TextboxbaseでOnPaintで強調表示でどうにかならんの?
803 :
790 :2005/12/09(金) 02:38:07
>>792 そうなんですか。必要のない情報ではないと思うんですけどねえ・・・orz
どうもありがとうございました。
C#ではキーボードの(ローな)I/Oイベントは拾えないんだね。 Win32使わないとコンソールのスクラッチはできなさそうだ。 無理しても、IMEの動きが捕まえられないんじゃないかな。
805 :
デフォルトの名無しさん :2005/12/09(金) 12:20:44
東京エ業大学は学生の質は全国最低レベルなのに教師の厳しさは全国最高レベルです
フリーター、ひきこもり、ホームレス、犯罪者、精神病患者、の輩出率は非常に高いらしい
↓↓↓証拠↓↓↓
84 名前: エリート街道さん [sage] 投稿日: 2005/10/22(土) 22:37:10
http://www.sanspo.com/sokuho/1022sokuho008.html ニート状態の卒業生を救え−。中央大や法政大など大学・短大42校が
連携し、卒業生のうち、仕事に就かず職業訓練なども受けていないニートや、
フリーター生活者たちのための就職支援事業に乗り出した。ニート・フリーター
対策でこれほど多くの学校機関が連携する事業は珍しく、関係者は成果を
注目している。
(途中省略)
なお東京エ業大学はこの件に関して
「就職が出来ない学生および職を失った卒業生は東京エ業大学の恥である。
我々がすることは何も無い」
とのコメントを残している。
85 名前: エリート街道さん [sage] 投稿日: 2005/10/22(土) 22:39:16
>>84 すげー
流石東エ大
鬼だ(wwwww
恥だったらなんとかしろよ。
>>801 今sourceforge探してみたがなくなってた・・・
MinaEditorって言う奴だったんだが、
Googleにキャッシュだけ残っててWikiは死んでた。
808 :
デフォルトの名無しさん :2005/12/09(金) 15:14:33
初めてカキコします。無作法な点はお許し下さい。 本題ですがピクチャーボックスオブジェクト内にテキストを描画したいのです。 具体的に言いますと、グリッドを引いたピクチャーボックスオブジェクト内に 数字を1,2,3,4・・・31と1ヶ月分の数字をグリッド内に描画させ たいのですが、どなたかご教示願います。 当方はJavaはかじった事があるのですがC#は初めてなもので、勝手が分からん のです。
まずはCreateGraphicsでググるんだ。
>>808 何がやりたいのかよくわからんけど、
カレンダーの独自コントロールを作りたいならPanelあたりのクラスを拡張した方がいいんじゃないか?
>>801 あ、SharpDevelopでも1.xは日本語で強調表示するとバグでキャレットが
ズレるから気を付けてね。パッチを出している有志がいらっしゃるけど。
813 :
デフォルトの名無しさん :2005/12/09(金) 22:10:42
C# のプログラムから Java のプラグラムを起動するにはどうしたら良いですか? Process.Start() を使えば良いのでしょうか? 良い場合はどのように使えばよいのでしょうか? できれば javaw の方で起動したいのですが・・・
javaw のプロセスを開始させるのに Process.Start 以外の何を使えというんだ。
ListViewコントロールに文字列全体が表示されるように列の幅を調節してくれる機能はありますか?
816 :
デフォルトの名無しさん :2005/12/09(金) 23:37:31
Process.Start(@"C:\Java\jdk1.5.0_05\bin\javaw.exe", @"クラスファイルのパス"); これでやってみましたが、なぜか起動できませんでした。 main class が見つからないとかメッセージが出てそれでおしまい。 コマンドプロンプトからは正常に起動できるのに・・・
作業フォルダかな?
javaw は知らんが java はクラスファイル名じゃなくてクラス名を引数に取ったはずじゃ
819 :
デフォルトの名無しさん :2005/12/09(金) 23:56:46
Java の場合、クラスファイル名=クラス名なので問題ないはずなのですが・・・
>>819 いいや。ちがうね。『 class Sample 』 のファイル名は 『 Sample.class 』 だよ。
821 :
デフォルトの名無しさん :2005/12/10(土) 00:42:09
Process.Start の直前でクラスファイルのあるフォルダのパスを カレントディレクトリにすることで起動に成功しました。 つまり、 Environment.CurrentDirectory = @"クラスファイルのあるフォルダのパス"; Process.Start(@"省略\javaw.exe", "クラス名"); です。 ありがとうございました。
822 :
デフォルトの名無しさん :2005/12/10(土) 00:43:34
>>808 PictureBoxを継承してOnPaintオーバライドするとか
PictureBox pictBox.Paint += PaintText;
private void PaintText(object sender, PaintEventArgs e){
e.Graphics.DrawString("1",10,10);
}
みたいな感じで上書きできないかな
ラベルの高さを10未満にしたいのですがデザイナが許してくれません。
どのあたりをいじればよいのでしょうか?
デザイナ上でスマートタグの定義を追加したいのですが。参考となるサイトがあれば教えてください。
vs2005b2を使用しています。
823 :
デフォルトの名無しさん :2005/12/10(土) 00:47:16
オーバライドってなんですか?
それはさすがにググろうよ
SystemInformation.Networkで自分で見に行くことはできるのですが Networkが使用不可能になったというイベントって取得できますか?
ダブルバッファーでちょっとスクロールしたいんだが。サイズ100,100のウィンドウで5だけ下にスクロールすると思いねぇ。 ダブルバッファー用のbmp(1), その更にバッファー(2),Form(3)とあるとして、 1からずらして2に転送2から3,1に転送して計3回ビットマップ転送してるんですが、おそす。 もちっとナイスな方法内でしょうか・・・
ダブルバッファOnなパネルに描画してずらす
うっぁ。俺今までSDK使ってなかった…
>>828 ダブルなバッファーにはどこから描画するの?パネルから?
ダブルバッファって、一方を転送しつつ、他方を描画するから高速なんでねーの?
パネルから パネルを継承してOnPaint コンストラクタではDoubleBuffered = true;@2.0
833 :
778 :2005/12/10(土) 02:31:21
>>784 ,807
プロジェクト名dクス〜〜、もう消えてたんですね。(;;
道は遠いけど、自作進めてます。
IMEもUndo/Redoもまだ無理ですけど、ASCII文字ならとりあえずエディタとして
最低限動くようになりまちた。
>>811 キャレットずれますね。全角と半角の空白文字(スペース)が同じ行に
混在するとダメみたいです。#develop Wiki の日本語対応版上書きした
#dev本体のエディタで再現してるので今後に期待??
>>812 ありがとうございます。とりあえず見てみましたが .Net port は
今のところ発見できず。
探しながら開発続けていってみます。
壁は IME からの文字入力、 Undo/Redo、選択処理の実装、折り返し処理
あたりか??
>>826 .NET2.0のMicrosoft.VisualBasic.Devices.NetworkにNetworkAvailabilityChangedイベントがある。
そのまま使うのがいや/使えないなら、これをildasmで調べてみたら
動的なメニューの作成をしたいと思っています。 現在は、 MenuItem menuItem = menu.MenuItems.Add(""); menuItem.Tag = (object)"dummy_item"; menu.Popup += new EventHandler(FillDummyMenu); のようにダミー項目を追加し、FillDummyMenuで ダミー項目の位置にいろいろ追加するようにしているんですが、 そうするとメニューそのものが恒久的に変更されてしまうため 二回目以降にメニューを表示したときにうまく動作しません。 どなたか解決策をお教え願います。
スレッドをSuspendして そのままAbortすると うまく殺してくれないみたいなんです 自分のコードが悪いのか そういう仕様なのかがわかりません だれかご教示お願いします
メニューアイテムをクローンする
838 :
デフォルトの名無しさん :2005/12/10(土) 12:01:44
C# でコントロール配列を実現したい場合、 this.buttons[0] = this.button1; this.buttons[1] = this.button2; this.buttons[2] = this.button3; for(int i = 0; i < this.buttons.length; I++) { this.buttons[i].Tag = i; } (中略) private void buttons_Click(Object sender, EventArgs e) { }
839 :
デフォルトの名無しさん :2005/12/10(土) 12:04:47
間違えて途中で送ってしまいました。 private void buttons_Click(Object sender, EventArgs e) { switch(Convert.ToInt32(((Button)sender).Tag)) }
840 :
デフォルトの名無しさん :2005/12/10(土) 12:08:12
なぜか途中で送信されるのですが・・・ 専ブラの問題かな?・・・ switch(Convert.ToInt32(((Button)sender).Tag)) { case 0: //button1 の処理 break; case 1: //button2 の処理 break; case 2: //button3 の処理 break; default: break; } というふうにしているのですが、 結構面倒なので、他に効率的な方法はありませんか?
>>840 効率的かどうかはともかく、俺なら
Control[] buttons = new Control[] { // 略};
private void buttons_Click(Object sender, EventArgs e) {
int index = Array.IndexOf(buttons, sender, 0, buttons,Length);
switch(index)
{
case 0:
break;
case 1:
break;
case 2:
break;
default:
break;
}
みたいに書くかな・・・
senderにイベントを起こしたオブジェクトが入っている保証なんかどこにもないからお勧めは出来ないけどね
842 :
デフォルトの名無しさん :2005/12/10(土) 13:11:27
ありがとうございます。 参考にさせていただきます。
>>841 >senderにイベントを起こしたオブジェクトが入っている保証なんかどこにもない
そうなんですか?
そのことについて書かれたドキュメントとかあったら教えてもらえませんか?
841じゃないけど buttons_Click(null, null); で呼べばええのちがうか
845 :
デフォルトの名無しさん :2005/12/10(土) 17:08:52
PictureBoxのImageプロパティにセットした画像の再描画を 禁止したいのですが、何か方法ありますか? Image=nullにすると、今度は背景色で再描画され、やはり困ってます。
846 :
デフォルトの名無しさん :2005/12/10(土) 18:57:34
847 :
デフォルトの名無しさん :2005/12/10(土) 21:31:55
C♯の型にulongとかushortとかありますが、なんでbyteだけubyteじゃなくて sbyteなんですか?
慣習
ushortはunsigned shortの事で、符号なし。 sbyteはsigned byteの事で、符号あり。 byteは符号なし変数。
C/C++ではgotoに同一関数内での ブロックのスコープは存在しなかったように思うのですが、 class GotoTest { static void Main() { goto cs_err; { cs_err: System.Console.Write("error"); } } } このブロックの外からは見えないという規約、どこら辺が役に立っているの でしょうか? 詳しくわからない僕には、あまり意味のあるものと思えないです。
規約じゃなくて、仮想マシンで動作する上での制約のような希ガス
ついでに言うけど、スタックの深い方へ goto するのって、そんなに価値のあるものだとは思えない。
んげ、悪い。適当言ってた。 ……コードブロック、コンパイル後はスコープとか全然関係ないやん。 コードブロック内に goto 出来ないのは、VM じゃなくて C# 側の制約……っていうか規約な罠 orz
大体、そんなのが可能なのなら goto inner; for (int i = 0; i < 3; i++) { inner: Console.WriteLine(i); } さあどうする。
>>854 そうなのですか。レスありがとうございました!
>>855 なるほど! それはエラーにすべきですね。C++の方でもエラーになったです。気付かなかった。
わかりやすい例題サンクスです!
857 :
デフォルトの名無しさん :2005/12/11(日) 02:57:19
C#で、Webアプリケーションを開発しています。 ボタン押下後に、CSVファイルを作成し、そのファイルをダウンロードさせます。 しかし、Response.Close()後、どのボタンを押下してもサーバー処理を行いません。(submitされません。) Javaの場合はボタン押下時J、avaバッチを起動してダウンロードさせますが、C#の場合はどうすればよろしいでしょうか?
>>858 835がどんなのを意図してるのか分からん
そもそも何故ダミーを作るんだ? 直接新しいアイテムを作ってAddしちゃいかんのか?
>>859 そうでしたか、すみません。
簡単にいうと「お気に入り」とか「最近使ったファイル」みたいなのを
イメージしてもらえるとわかりやすいと思うんですが、
つまりメニューの外枠はアプリケーションの初期化時に作って、
メニューの内容を表示しなければいけない時に中身を追加する、
という感じにしたいと思っています。
外枠って何? それを作るとどうなるの? 作らないとどう問題があるの?
ダミーのメニュー項目を目印に置き換えるつもりが 一度置き換えると目印を見失ってしまって追加できないので困る、ってことだろうか。 もう少しわかりやすく。 でも俺はもう寝る。
>>862 そういうことです。
説明が下手ですみません。
具体例で説明すると、初期化時に
[ファイル]
[編集]
[お気に入り] // menu
[お気に入りに追加...] // menuItem
[-] // セパレータ
[dummy_item] // menuItem
っていう感じに作っておいて、
[お気に入り] の Popup イベントを捕獲して、そこで子アイテムの中から [dummy_item] を探し出し、
[dummy_item] を削除してからその位置にお気に入りのアイテムを追加していくという感じです。
ところがこれではご指摘のように [dummy_item] を削除する必要があるので、
2度目以降うまく動作しません。
>>863 なんでダミーがいるのかさっぱりわからんのだが。
セパレータ探してその後ろを毎回入れ替えたらすむんじゃないの?
つか、固定の部分もあわせて作り直したらいい気がする。
パフォーマンス重視のソフトを作ってて、いろいろ実験してるんですが あるメソッドの実行時間を測りたくて、次のような感じでやってます。 DateTime before = DateTime.Now; HogeMethod();//計測したいメソッド DateTime after = DateTime.Now; TimeSpan time = after - before; Console.WriteLine(time.TotalMilliseconds.ToString()); ところが、いろんなメソッドに何回かやってみても、全く同じ値になったり、 キリがいい数字になったりと、ちょっと変な気がします。 なにか間違っているのでしょうか? 以下、取得できた時間です [46.875ms] [62.5ms] [156.25ms] [203.125ms] [656.25ms] [671.875ms] [31.25ms] [15.625ms] [31.25ms] [78.125ms] [171.875ms] [375ms] [359.375ms] [109.375ms] [171.875ms] [93.75ms] [171.875ms]
分解能の限界。 高性能にやるならWin32APIのQueryPerformanceCounter使う。
867 :
デフォルトの名無しさん :2005/12/11(日) 15:36:20
ここって、webアプリ作ってる人間少ないのね
>>864 なるべく柔軟な作りにしたいと思ってるので、例えば
[お気に入り]
[お気に入りに追加...]
[-]
[お気に入りをすべて削除]
[-]
[以下をすべてタブで開く]
[dummy_item]
のような構造に対応するために、ダミーは必要です。
しかしどちらにしろ入れ替えは必要なので、根本的な問題ではないです。
と書いてるうちに自己解決しました。
MenuItem に Visible プロパティがあったので、
[お気に入り]
[お気に入りに追加...]
[-]
[お気に入りをすべて削除]
[-]
[以下をすべてタブで開く]
[dummy_item_begin]
[dummy_item_end]
としたうえでダミーの Visible を false にし、毎回その間の項目を入れ替えるということをしたら
うまくいきました。
お騒がせしてすみません。どうもありがとうございました。
ログを読む限りwebに関する質問に答えられる人が少ない気がする。 windowsアプリなら食いつきいいのに。
872 :
デフォルトの名無しさん :2005/12/11(日) 16:50:43
C#でフルスクリーンのゲームを作りたい場合はどうしたらいいですか?
>>868 それって柔軟?いびつに見えるんだけど。
ダミー以外の部分は固定なんでしょ?この固定部分を入れ替えられるようなつくりにすればいいんじゃないの?
お気に入り以下に追加するMenuItemの並びをテンプレートから作れるようにしたいんだよね?
テンプレート部分をMenuItemツリー構造に頼るのって変な感じ。
>>873 すいません、固定部分を入れ替えるっていうのがどういう意味かわからないです。
テンプレートというのは固定部分の意味ですよね。
>>835 では固定部分も動的に作っていますが、ダミーを使った方法なら
固定部分はリソースで定義して必要な部分だけ動的に作るということも可能だと思います。
将来的にはそうするつもりです。
はい。
なんでダミー項目を作ることに拘るんだろう。
877 :
873 :2005/12/11(日) 17:57:13
言葉足らず過ぎてすまん。
>>874 >テンプレートというのは固定部分の意味ですよね。
違う。固定部分と、可変部分の位置をセットでテンプレートと言ってるつもりだった。
>>863 の絵そのもの。これを適当な形で保持する。
で、それをMenuItemなんて実装側に依存した形にしたら、固定部分に動的な部分を
作らなきゃいけなくなったら困りそうじゃない?って思ったわけ。
もともとの
>>863 の絵を上の行から読んで対応するMenuItemを追加するような
つくりにしたほうがよさそうじゃない?
これなら固定部分は
>>863 の絵を書き換えるだけで入れ替えられるし。
また言葉が足りてない気もするが、わかんなかったら読み飛ばしておいておくれ。
879 :
デフォルトの名無しさん :2005/12/11(日) 19:56:20
>>872 悪いことは言わん
絶対止めとけ。
書けないことはないが、絶対にC++で書いときゃよかったって思うぞ
hashtableに複数のキーa,bを持たせたいと考えています。 文字列であればa+区切り文字+bのように連結してひとつのキーとして 扱えば楽だと思ったのですが、このような実装は好ましくないでしょうか? 同じことやったこと人いますか。
俺なら素直にハッシュテーブルにハッシュテーブル入れるぞ
>>880 その「キー」なるものを、他でもユニークなID(識別子)として
使いまわす気ならそれでも良いと思う。
単に疎でない二次元の連想配列が使いたいだけなら、
ハッシュのハッシュの方が良いと思うけど。
ハッシュのハッシュのほうが文字列以外にも対応できるしよさそうですね。 感謝です。
ディクショナリのZetaOSとかZetaOSのリストとかよく作るんだが、 毎回 if(!_dic.TryGetValue(key,out value){ List<Hoge> list=new List<Hoge>(); _dic.Add(key,list); } とかやってるんでヌルポです。微妙にメソッド違うんでGenerics化もできず。もっとエレガントな方法ないでしょうか?
なんか知らんが誤変換してる・・・orz 一行目:ディショナリのディクショナリとかディクショナリのリストとかよく作るんだが
どんな誤変換だそれは。
>>844 キー⇒リストっていうコレクションなら、
C++でいうところのMultiMap で代用できないだろうか。
C# でどう MultiMap を実装するかはまた別の話として。
MultiMapないんで C#では Dictionary<object, ICollection>使ってればいいんじゃないの?
>>870 Webアプリ作ろうとするとIIS使わざるを得ないからなぁ
ライセンスやら何やらで意外に敷居が高いと思う
個人的にはmono+apacheに期待してるけど、こっちは技術面で敷居が高い・・・
>>879 C#使おうがC++使おうがAPIだけでやるなら、どっちにしても後悔しそうな悪寒
おとなしくDirectX使った方が幸せになれるはず
891 :
デフォルトの名無しさん :2005/12/11(日) 22:53:13
すくなくともC#がC++より有利ではないことに疑問を挟む余地はない
つ 生産性
using System; using System.Security.Cryptography; class Class1 { const int dataLength = 400*1024*1024; [STAThread] static void Main(string[] args){ byte[] inputData = new byte[dataLength]; HashAlgorithm provider1 = new MD5CryptoServiceProvider(); Console.WriteLine("data is null? {0}", inputData == null); try{ provider1.ComputeHash(inputData);} catch(NullReferenceException ex){ Console.WriteLine(ex); } Console.WriteLine("メソッド終了1"); provider1.Clear(); HashAlgorithm provider2 = new FastHash.MD5FastHash(); Console.WriteLine("メソッド終了2"); } } こんな単純なプログラムなんですが、 なぜか provider1.ComputeHash(inputData); の内部でNullReferenceExceptionが投げられます。
894 :
893 :2005/12/11(日) 23:26:17
スタックトレース
at System.Security.Cryptography.MD5CryptoServiceProvider._HashData(IntPtr hHash, Byte[] rgbData, Int32 ibStart, Int32 cbSize)
at System.Security.Cryptography.MD5CryptoServiceProvider.HashCore(Byte[] rgb, Int32 ibStart, Int32 cbSize)
at System.Security.Cryptography.HashAlgorithm.ComputeHash(Byte[] buffer)
at FastHash.Test.Class2.Main(String[] args) in D:\●●●●\class2.cs:line 14
HashAlgorithm provider1 = new MD5CryptoServiceProvider(); を
HashAlgorithm provider1 = new SHA1CryptoServiceProvider(); にしてもなりますが、
HashAlgorithm provider1 = new SHA1Managed(); にしても発生しません。
dataLengthを800MBとかにすると、当然OutOfmemoryExceptionが発生します。
dataLengthを10MBとかにすると例外が発生しません。
そして一番不思議なのは、
HashAlgorithm provider2 = new FastHash.MD5FastHash(); をコメントアウトすると例外が発生しません。
FastHash.MD5FastHashクラスは、自分が作った、fasthash.dll(
http://hp.vector.co.jp/authors/VA033110/fasthashdll.htm )
を使用してMD5を計算するクラスです。
質問なんですが、一見全然関係ないように見える HashAlgorithm provider2 = new FastHash.MD5FastHash(); という文の有り無しで、なぜその前の byte[]配列がnullになってしまうんでしょうか?
とりあえず、 >dataLengthを800MBとかにすると、当然OutOfmemoryExceptionが発生します。 >dataLengthを10MBとかにすると例外が発生しません。 に気付け。『メモリが足りませんよ例外』 が出ているんだ。
って悪い。『当然』 の2文字が目に入ってなかったなアハハハハ。
ILのレベルで何か違いはあるのかな
ぬるれはP/Invokeに失敗した時全てに発生するよ バッファがnullだったから例外が起きたんじゃ無いと思う ***CryptoServiceProviderクラスはWindowsの暗号化機能に依存しているから、Windows内部で何らかの例外が起きたんだと fasthash.dllと競合するような部分があったんじゃ?
893がFastHash.MD5FastHashの中身を教えてくれないから適当に自分で実装してみたけど再現しない
で、800MBでぬるりが投げられた これはFastHashの記述の有無に無関係に発生
901 :
893 :2005/12/12(月) 00:20:20
>>897 ILレベルですか…何と何の違いを調べればいいですか?
>>898 なるほど
すると、fasthash.dllを利用する限りどうしようもないんですかねえ?
それとも fasthash.dllの利用の仕方次第でなんとかなるんですかね
>>899 すみません、
「なぜ呼び出されていないコードに存在で、別のコードに例外が発生するのか」を、とりあえず考えていたのと、
ちょっと長くなってしまうんで省略しました。
902 :
893 :2005/12/12(月) 00:21:46
>>900 そうですか…
自分の環境だと、 FastHashの記述無しだと先にOutOfMemoryExceptionが発生してしまうんで
分からなかったです
先にFastHash.MD5FastHashを呼んだりComputeHashさせたりしたらどうなるんだ?
>>901 >「なぜ呼び出されていないコードに存在で、別のコードに例外が発生するのか」
呼び出す前にもメモリ上に何かがロードされて、
それで状況が変わるんじゃない?
905 :
893 :2005/12/12(月) 00:41:55
情報を小出しにしてしまった感じで申し訳ありません。
ちょっと気になって、常駐アプリなどを切りまくって、メモリを開けたところ、
FastHash.MD5FastHashの記述なしでもdataLengthが700MBぐらいで、ComputeHashでNullReferenceExceptionが発生するようになりました。
FastHashは関係ないようですね・・・
new FastHash.MD5FastHash() の有無で、300MBぐらい差が出るんですが、 FastHash.MD5FastHashクラスを使わないで、
このコードで直接fasthash.dllの関数を呼び出すと、200MBの差は出ないようです。
ということは、自分が作ったFastHash.MD5FastHashクラスが原因で300MBの差が起きているようです。
>>903 先に new FastHash.MD5FastHash(); を呼んだところ、結果は同じでした。
>>904 そうなんですかねえ。ううむ。
FastHash.MD5FastHashクラスを収めたソースファイルです
http://kashiwazaki.dyndns.ws/files/ppfx00005.zip
906 :
デフォルトの名無しさん :2005/12/12(月) 00:45:24
800Mとか、巨大データなら分割してチビチビ計算させるのが普通ではないの?
907 :
893 :2005/12/12(月) 01:00:01
>>906 それはもちろんです。
.NETのライブラリのメソッドに、nullでない引数を渡してNullReferenceExceptionが発生するなんて初めての経験でして、
気になってしまったです。
>>907 .Net のライブラリの中にはWin32のAPIを簡単にラップしただけのモノが結構有ります。
ネイティブ側でWindowsの0xc0000005例外が投げられるとNullReferenceExceptionになります。
他の例としては例えばGDI+をラップしたGraphicsで多く発生します。
他のどんな例外がどんなExceptionにマッピングされてるのかは知りません。
どこかに資料あるのかな。
>>880 class Pair<T1,T2> {
T1 a;
T2 b;
public override GetHashCode() {
return a.GetHashCode() ^ b.GetHashCode();
}
}
Invalidate+Updateをすると負荷が高くなってしまうのですが、 回避する策は有るのでしょうか? private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { Graphics g = Graphics.FromHwnd(pictureBox1.Handle);//これは一時バッファ if (w!=0){ // g.DrawRectangle(new Pen(Color.Red, 1), new Rectangle(x, y, w, h));//これで代用できない? pictureBox1.Invalidate(new System.Drawing.Rectangle(x, y, w, h)); pictureBox1.Update(); } w = moving_image.Width;h = moving_image.Height; g.DrawImage(moving_image, x = e.X - w / 2, y = e.Y - h / 2, w, h); } //初期化コード(Form_Load) moving_image = (Bitmap)Bitmap.FromFile("image.png"); pictureBox1.Image = new Bitmap(pictureBox1.Width, pictureBox1.Height); Graphics g = Graphics.FromImage(pictureBox1.Image); g.FillRectangle(Brushes.Red, this.pictureBox1.ClientRectangle); //フィールド System.Drawing.Bitmap moving_image;int x, y, w, h;
InvalidateしたらUpdateする必要ないんじゃ?
タスクマネージャーとかで、プロセスを終了させられた時に、 終了させられた事を受け取る事ってできますか? ちなみに、通知をうけとりたいのは、コンソールアプリです。
コンソールアプリならTerminateProcess呼ぶだけだろうから無理じゃないかな
915 :
913 :2005/12/12(月) 15:35:54
>>914 むむむ、、、そうなんですか。。。
となると、見えないウィンドウとかつくって、処理しないとだめなんですかねぇ。。。;;
System.Threading 辺りにあるのを使えばできるかも
917 :
910 :2005/12/12(月) 17:58:30
>>911 ちらついてだめでした。
>>912 それは全体を描画するので倍以上負荷がかかってしまいました。
BitBlt使うのと比べてだいぶ遅くなってるんだけど、なんか根本的に間違えてるんかな...
>>917 >BitBlt使うのと比べてだいぶ遅くなってるんだけど、なんか根本的に間違えてるんかな...
そういうコトやるときにはPictureBoxは使わないのが吉。
自前コントロールか、ただのPanelで処理するのが良いよ。
それからコントロールに直に描画するときには Graphics.FromHwnd じゃなくて
XXX.CreateGraphics() ね。あとGraphicsの Dispose とかちゃんとやってる?
なんだかとても不安なコードだけど。
プロセスツリーで 親を殺したら、子供まで死ぬようにつくりたいんだけど、 C#でできるのかな? ProcessExplorerなるものがあるのでwindowsでできるとはおもうのだけど
普通にProcessクラスを使って起動すれば自動的に親子関係になるはずだが それともタスクマネージャのプロセスツリーの終了をシミュレートしたいってこと?
921 :
デフォルトの名無しさん :2005/12/12(月) 19:50:35
VS2003でリビルドすると一々クラスエクスプローラのツリーが 閉じてしまうのですが、そういう仕様? まじうぜー
922 :
910 :2005/12/12(月) 20:03:55
>>918 Panelにしたら劇的に速くなりました。
こちらでInvalidateを使うとちらつくので、PictureBoxはバッファリングがあったのかも...
ほんと助かりました。ありがとうございます。
private void panel1_MouseMove(object sender, MouseEventArgs e){
using (Graphics g = panel1.CreateGraphics()){
if (w != 0) {
g.DrawImage(this.erase_image, (new System.Drawing.Rectangle(x, y, w, h)));
}
w = moving_image.Width; h = moving_image.Height;
g.DrawImage(moving_image, x = e.X - w / 2, y = e.Y - h / 2, w, h); } }
private void panel1_Paint(object sender, PaintEventArgs e){
e.Graphics.DrawImage(mem_image,new Point(0,0));}
レベルの低い質問ですみません。 int[] iValue = { 1 , 2 , 4 , 8 }; int[] iValule = new int[] { 1 , 2 , 4 , 8 }; この二つって何か違うんでしょうか?
>>924 なるほど。これからは上を戸惑いなく使いたいと思います。
ありがとうございました。
3.0だと初期化式が他にもいろいろと簡略化されるお
3.0はいつでるんだ?
928 :
デフォルトの名無しさん :2005/12/13(火) 00:06:14
頼むから、Formにすべての処理を書かないでくれ・・・
>>928 クラス ライブラリを作れないVB.NET StandardやWeb Matrixが
存在することが元凶のような気もする。
Formに全部書いちゃう人はクラスライブラリの作成機能があっても モデルの分離はおこなわんだろ
931 :
デフォルトの名無しさん :2005/12/13(火) 01:01:36
そういうやつに限って、呼び出しのオーバーヘッドがどうこうなんていうんだよな
Formでポップアップウィンドウ作ろうとしてます。 ま、作るだけなら簡単だ何だけど、表示したときにフォーカスがそのウィンドウにいかないようにしたい。 ちなみにHelpProviderとかじゃだめです。 そのポップアップフォームにWebBrowserControl貼り付けたいので。 なんか良い方法ないかな。
>>932 APIのShowWindowで表示させる
934 :
デフォルトの名無しさん :2005/12/13(火) 01:40:30
C#で仮想OSを起動するようなアプリって書けます? VMwareみたいなのを作りたいです。
お前にゃ無理
936 :
デフォルトの名無しさん :2005/12/13(火) 01:54:59
それしかいえんのかhw
C#で株式売買するようなアプリって書けます? 富士通みたいなのを作りたいです。
COBOLがお勧めです
金融、株式といえばCOBOLだからね。
Javaでもいいんじゃね?
アンマネージリソースなんだが、ファイルとかソケット接続とかは明示的に開放できなきゃ不味いと思うんだが メモリはよほど大きな容量でない限り明示的な開放は不要と思うのは俺だけ? Disposeメソッドを実装しなくたって、デストラクタをきちんとしておけばいいと思う。 デストラクタをきちんと実装することで、アンマネージメモリがGCの対象になるし。
n?
943 :
919 :2005/12/13(火) 12:51:28
>>920 そうです。子供とか子孫までいっきにkill Treeしたいんですけど、、、
>>933 ちなみにForm.Show()とShowWindow()って、等価と見ていいんでしょうか。
>>943 .NETのライブラリには親プロセス/子プロセスを調べる手段は無いみたいだね。
とりあえずCreateToolhelp32Snapshot関数を使って親プロセスは調べられる。
ほかにも何か手段があるかもしれない。
947 :
943 :2005/12/13(火) 15:12:23
>>946 NtQuerySystemInformationなんてつかおうかな〜とおもったけど、
あぶないっすかねぇ。。
CreateToolhelp32Snapshotで試してみます!
948 :
デフォルトの名無しさん :2005/12/13(火) 16:21:57
InputStreamから文字列をMemoryStreamに読み込むときに 定石みたいなものはありますか? 良いサンプルとかが見つけられなくて・・
>>948 定石と言われても。MemoryStreamじゃなくてFileStreamかもしれないし。
byte[]を確保してRead/WriteをReadの返り値が0以上の間繰り返すだけだし。
バッファサイズはネットワークでは4KB-8KB辺りが経験的に一番いいぞ。
>>949 ありがとうございます。
その辺りで問題があるようだったので調べてる最中だったんだけど、
やり方してました。もっと違うやり方もあるのかどうかと思い・・
元の文章でJavaと混同してInputStreamって書いてしまったけど
何らか(FileStreamとか)のStreamからMemoryStreamに読み込むって意味です。
で、問題を突き詰めていったところ
書き込み部分じゃなくて、書き込んだ後、
MemoryStream.GetBuffer() の部分での問題みたい。
framework2.0で仕様が変わった部分で
http://msdn2.microsoft.com/en-us/library/system.io.memorystream.getbuffer.aspx に
書いてあるのだけど、MemoryStreamに256バイト以下の文字列が
書き込まれている場合はGetBufferの戻す長さが256バイトになるらしい
その場合、代わりにToArray()を使うよう書いてあるけど
それで副作用ないかどうかこれから調べます。
何かその辺りのことご存知でしたら教えてください。
というか元々MemoryStreamをbyte[]にするにはToArrayを使うべきなんだが。 別に副作用ないし。
静的コンストラクタの存在意義は何ですか? class Hoge { public static int test1 = 1; public static int test2 = 1; : : とやっていくのと、どこか違ったり便利であったりする部分はありますでしょうか?
>>952 時々あるのよ。メンバの初期化以外の動作を行わせたいことが。
C#の存在意義は何ですか?
>>952 初期化に if文使ったり、switch文使ったりできる。
Unix系のOSにはsendfile関数があるんだけど、Win31APIには似たようなの無いのかねえ
static readonly のフィールドに.App.configの値を入れたりとか。
>>956 TransmitFileのことか?C#にはあったっけ・・・?
あとの1はどこに落としてきた?
>>953 ,955,957
納得! ありがとうございました。
C++で int i; int& I = i; はC#ではどうかくの?
書けない
書かない
書かさない
unsafeと書かせてくれないのか?
967 :
デフォルトの名無しさん :2005/12/14(水) 02:57:26
2005でキャレット周りAPIラップしなくてよくなってたりしない?
969 :
デフォルトの名無しさん :2005/12/14(水) 08:19:03
C#でJavaでいうところのJakarta Commonsみたいなフリーの汎用ライブラリとかってありますか? それとも標準でそれくらいカバーしてるのかな?
>>969 ない。現状は俺様ライブラリが乱立だろうな。
俺様ドッキングウィンドウ&ツールバー&フルカスタマイズ可能あるけど、さらしたらいる?
>>958 まあまて。Windows3.1のことかもしれん。
974 :
944 :2005/12/14(水) 09:39:04
>>945 ごめん、全然どっちなんだか全然分かりません。最近の言葉の乱れのせいで。
どっち?
>>974 Show と ShowWindow の引数が全然違うのに
等価だと抜かすお前の頭は全然(ry
.Net2.0 の HScrollBar,VScrollBarの使い方なのですが。 m_hbar.SmallChange = 15; m_hbar.LargeChange = 15*2; m_hbar.Minimum = 0; m_hbar.Maximum = (15 * 100) + m_hbar.LargeChange; として ScrollEventHandler,ValueChanged のイベントハンドラを フックして変更されかたをみたんですが、スクロールバーのつまみを つまんで少しずつスクロールさせたときの値の変化がなぜか1刻みです。 SmallChange = 15 になっているかデバッグ表示させて確かめたのですが 確かに15になっているのに1ずつ値が増減します。 なんとかならないでしょうか。orz
MFC使うと幸せになれるよ
>>977 SmallChangeは
> ユーザーが方向キーの 1 つを押すと、またはスクロール バー ボタンの 1 つをクリックすると、
> Value プロパティは SmallChange プロパティに設定されている値に従って変更されます。
であってドラッグによる移動量は規定していない。
980 :
974 :2005/12/14(水) 14:45:03
>>975 ごめん、全然どっちなんだか全然分かりません。最近の言葉の乱れのせいで。
どっち?
>>971 自作したの?すごいなあ。できればうpお願いします。
982 :
977 :2005/12/14(水) 16:26:46
>>979 紹介ありがとうございます。
うへ…そうするとつまみを少しずつ動かしたときの移動量ってどこで設定できるんでしょうね?(汗
MFCならdeltaという設定があって確かそれで設定できたと思うのですが…。
>>971 そんな誰もつくれるようなものよく晒そうとできるなw
>>983 まともに実装されてるアプリ見たことないが?
986 :
984 :2005/12/14(水) 21:49:32
すまね。商用じゃなくて。つか売ってるライブラリ使わないで。
御託並べてないでさらせよ
いらね
くれ。かすだったら捨てる。
すんげぇほしい
面白そうだからクレ。
993 :
デフォルトの名無しさん :2005/12/15(木) 00:26:37
ほしぃ
いらね
(゚听)ヤラネ
ほすぃ
(゚听)イラネ
梅梅
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。