名前空間に対してドキュメントを記述したいんですけど、みなさんどうしてますか?
6 :
デフォルトの名無しさん :2006/11/03(金) 18:51:34
RFIDのリーダからタグIDを読み取ったら、一時領域に入れておき 次にタグIDを読んだら一時領域内に参照し、すでに呼んだタグIDか 初めて読むIDかを識別するプログラムをC#で作ろうとしています。 一時領域はIDを異なるIDを読むたびに大きくなっていくイメージです。 いままではC++で構造体をmallocとreallocで一時領域を確保していたのですが C#ではどうすればいいのでしょうか?
List<T>
System.Collections.Generics.Dictionary System.Collections.Hashtable
>>7 >>8 MSDNで調べました!ありがとうございました!
いい加減マーシャラ関係のリンクはテンプレにいらないと思うんだが
C#の勉強にに適した本とサイトを教えてくください
14 :
12 :2006/11/03(金) 23:55:28
あれ、いつからJIS規格対応になったんだこの言語
それに
>>13 のレビューもかいてないし不安だなあ
工エエェェ(´д`)ェェエエ工
17 :
デフォルトの名無しさん :2006/11/04(土) 01:47:32
C#,C++/CLを商用のWindowsアプリケーションとして使用してるいますか? Reflectorで簡単にソースを得ることが可能ですよね。 お客さんにソースが漏れるのは大問題です。 余談ですが、よくC#は生産性が高いなんて言われてますけど疑問です。 確かにちょっとしたものすぐ作れますが、商用となるとUIも重要な要素の一つなんで ほとんどのコントロールは使えないため、自前で用意する必要がある。 そうすると、VC6MFCとほとんど同じの感じがします。 どうですか?
19 :
デフォルトの名無しさん :2006/11/04(土) 04:08:03
7000円も出して覚える必要があるか? MSも.NETはC++/CLIで行くといってるのに・・・
C#の本ってそんなにたくさん出てないから片っ端から買ってみるのもいいかも。 自分に投資すると思って。
>>17 VC6と変わらないというならVC6で作ればいいんじゃないだろうか?
別に世間一般でC#>>>>>>>>>VC6という評価になっているわけではなく、
開発言語の1つとしてC#というものが有るわけだから
無理にC#を使う必要はないのでは?
>>17 ソースコードを保護する必要があるなら、Dotfuscator導入
VC6ってVistaで使える? 動作保証しないとは言ってるけど、実際に使うことも出来なくなるのか?
VC6が死亡したらC#の時代が…来ないだろうな…
C#でCOMコンポーネントを作っています。 インターフェイスIAを継承したインターフェイスIBを実装するコクラスを COMに公開したいと思い、【ソース】をビルド/regasmすると、 【タイプライブラリA】にようになってしまいます(OLE/COM Object Viewer)。 これではスクリプト環境からデフォルトインターフェイスでないIAのメンバに アクセスできないため、【タイプライブラリB】のようにしたいのですが、 どうすればいいでしょうか。お知恵を拝借したく。 【ソース】 public interface IA { } public interface IB : IA { } [ClassInterface(ClassInterfaceType.None)] public class C : IB { } 【タイプライブラリA】 interface IA : IDispatch { }; interface IB : IDispatch { }; coclass C { interface _Object; [default] interface IB; interface IA; }; 【タイプライブラリB】 interface IA : IDispatch { }; interface IB : IA { }; coclass C { interface _Object; [default] interface IB; };
>>21 結構出てるよ。
まあ大半が2003以前の本だけど。
そういや「プログラミングADO.NET」の2.0対応日本語版が早くでないかなーと 思ってるんだが、まだ出てませんよね?
>>28 もう出てるよ。今日本屋に行ったけど並んでた。
>>26 全てのインターフェイスが IDispatch/IUnknown から直接派生して公開されるのは仕様なので、
面倒だけど IA / IB 全てのメンバを宣言している新しいインターフェイス IC を定義して、
そいつをデフォルトインターフェイスにすればなんとかなるんじゃね?
31 :
デフォルトの名無しさん :2006/11/04(土) 22:43:58
回答する側はずいぶんいい加減でいいんですね
>>31 そもそも2chでまともなレスもらえるだけで素晴らしい事
>>31 俺なんかこんなレス返すぞ
Console.Write("or2=====3プッ");
34 :
26 :2006/11/04(土) 22:50:01
>>30 どうもありがとうございます。
これ仕様なんですか……厄介ですね
しかし、継承関係崩すと、マネージコードから利用しづらくなりますし、
インターフェイスを継承できないとなると今後の拡張で
アーリーバインディングでの互換性を確保できなくなりますよね。
インターフェイスの設計からもう一度悩みなおしてみます。
>>34 継承関係は別に崩れないだろう。増えはするけど。
が、バージョン管理ができなくなるのは確かだな。
となると ClassInterfaceType.None にする意味もなくなるなぁ……。
// 自動生成の _C インターフェイスは IDispatch だけだが IA/IB どっちも呼べる。
あとは IB で IA のメンバ全部隠蔽して再宣言するとか。
36 :
デフォルトの名無しさん :2006/11/04(土) 23:52:34
>>20 開発していく上でその本はかなり有意義だけど、勉強に適した本とはいえないんじゃない。
ほとんどC#の知識がなかったときにそいつ一冊で本格的なアプリケーション作ったことはあるけど。
でもなにをやっているのかさっぱりわからなかった。
僕は断然、独習C# AND C#Windowsプログラミング上下
独習C#で基本を勉強して本格的なことはC#プログラミングでやればいい。
37 :
デフォルトの名無しさん :2006/11/05(日) 02:43:35
マルチスレッドって簡単だなと思ってたら 安全に動かそうとすると極端に難しいなw
AutoResetEvent最強だよね
39 :
デフォルトの名無しさん :2006/11/05(日) 11:31:50
C#って64bitサポートしてるの?
.NET 2.0 には x64 と IA64 向けのもありますよ
>>20 おお、スプラッシュうウィンドウの表示時間制御が、
ビジーループで時間稼ぎから、
Timerでのイベントに変わった。
激酷からちょっと酷い程度にレベルアップしたな。
42 :
デフォルトの名無しさん :2006/11/05(日) 17:46:06
スプラッシュウィンドウの表示の為に ビジ-ループって本末転倒。
良書に出会うのはむずかしい。 ハーバート・シルトの本はちょっと時代遅れじゃないかな? 以前javaの本(タイトル忘れちゃった…)と独習C++買ったけど、 自分としてはいまいちだった。 特にjavaの本はOOPの本じゃないみたいだった。 翻訳も駄目だったし… 「所与の」ってなんだよw 別の著者の独習javaって本も誤植があってひどかった。
44 :
デフォルトの名無しさん :2006/11/06(月) 02:27:15
C#で正規表現を1,000,000回マッチさせるプログラムでperlの4倍の処理時間・・・ /(hoge)(foo)/; $a=$1;$b=$2; #hoge,foo部には適当な正規表現をです。 上記をC/C++/JAVAで書ける人、書いてもらえませんか? (C/C++はとりあえず使えますが、boostを使ったことがありません)
>>44 ngen使うか、初回の処理を計測から外すような措置はした?
46 :
デフォルトの名無しさん :2006/11/06(月) 07:00:05
>>44 Cが出来るですよねw?
PERLはオープンソースだから、NETのライブラリなんて使わずに、
PERLのソースを参考に自前でunsafeを使って実装すればいいのでは?
48 :
デフォルトの名無しさん :2006/11/06(月) 08:09:32
>>46 そんなことができるひとがする質問ではないだろ?
つか、そんなことやれる人なんて多くはいないのでは?
RegexOptions.Compiled はつけてるのかな
50 :
デフォルトの名無しさん :2006/11/06(月) 16:08:20
double型の変数aに格納されている値が、NaN(非数値)かどうかを判定するにはどうしたら良いのでしょうか?
>>50 Double の静的メンバに IsNaN
52 :
デフォルトの名無しさん :2006/11/06(月) 16:31:00
>>51 さん
isnan は、Cで使えるというのは調べたのですが、math.h のincludeが必要ですよね?
c#では、特別に using〜 とういうようなことは必要ないのでしょうか?
書き方は
if(isnan(a) == 1)
Console.WriteLine("NaNです。");
といった感じですか?初心者ですみません。
>>52 初心者なんて免罪符にならないから、ヘルプ読めよ。
>>44-46 ざっくりした計測で、
Perl=C#=Java(server VM)、C++が0.9、Javaのclient VMは1.8倍ぐらいの処理時間。
ngenとかの細かなチューニングは無し。ループ内で、キャプチャ文字列の長さを積算
するとかして、最適化で飛ばされないように努力はしてみた。
C++: VS2005, boost 1.33.1
C#: VS2005
Java: 1.5.0_09
Perl: Active Perl 5.8.8
うちのC#は、
>>44 の家のC#より高性能だ。
質問させて下さい。 C#を勉強しています。 とりあえず、シューティングゲームでも作ろうと思って、「C#でゲームを作ろう」みたいな本を買いに本屋に行ったのですが 全くそんな本がありませんでした。 ゲーム関連となると、VBか、Cの本しかありません・・・。 ゲームとかは、C#で作るものではないのでしょうか?
XNA Frameworkがもうすぐ正式リリースされて XBox360でも動くようになるからこれから少しは流行るはず 「C#でゲームを作ろう」みたいなのがどうしても無いとだめなら Javaで勉強すれば
他の本屋に売ってるだろ
今の時代、.NETでゲームとなるといきなりManaged DirectXなんかなあ。
61 :
57 :2006/11/06(月) 18:52:57
レスほんとにありがとうございます。 えーと、とんまなことを言うようなのですが、C#がイイ、と言われて、ちょくちょく勉強しちゃったのでいまさらjavaというのにいくのはちょっと大変そうなんです。 なんとかC#で頑張ってみたいんです。 しかし、本ってないのですね。 XBOXでれば流行るんですかね。そうなるといいなぁ。 本がないところを見ると、現状、C#はゲーム作りには不向きってことなんですね。 ちょっとへこんじゃいました。
>C#はゲーム作りには不向き ? ただ入門しにくいって事じゃないかな。 昔はアセンブラじゃないとシューテングは作りづらいといわれていたが… Wiiプログラマって世界にどのくらいいるんかな。
64 :
61 :2006/11/06(月) 19:40:44
>>63 うああ
わざわざすみません。
読んで勉強してみます!
下のページを見て、ウェブページを取得する、というのをやってるんですが、うまくいきません。
http://www.woodensoldier.info/computer/CSharp.htm#148 上の方(ネームスペース宣言のところ)に
using System.Net.WebRequest;
と記述し、
あとはそのまま ↓のようにしました。
private void button1_Click(object sender, System.EventArgs e)
{
WebRequest request = WebRequest.Create("
http://www.yahoo.co.jp ");
WebResponse response = request.GetResponse();
Stream ReceiveStream = response.GetResponseStream();
StreamReader readStream = new StreamReader(ReceiveStream, Encoding.UTF8);
Byte[] buffer = new Byte[response.ContentLength];
readStream.Read(buffer, 0, response.ContentLength);
response.Close();
}
しかし、↓のエラーが出てしまいます。
\Form1.cs(7): using namespace ディレクティブは名前空間に対してのみ使用できます。'System.Net.WebRequest' は名前空間ではなくクラスです。
何が間違っているのでしょうか?
エラーメッセージにそのまんま書いてあるのに・・・
>>65 using System.Net;の間違いだろ
>>65 >Form1.cs(7):
ってんだからForm1.csの7行目読むんだよ
69 :
65 :2006/11/06(月) 22:14:44
レスありがとうございます。
すいません、エラーメッセージ読んでも全くわかりません。
基本を全く分かってなくて、説明ページに書いてあるのをただそのままコピペしたような感じですので・・。
なにがどうおかしいのかすら全く分からない状況です・・・。
>>67 using System.Net; とやると、その行ではエラーが出ませんが、後半でエラーが出ます・・・。
>>69 君が見てる所のサンプルはあんまり質が良くないから
初心者スレのテンプレにあるサイトを探ってみなさい。
そこまで分からないなら そのまま動くサンプルが載ってるページを探すか入門書買う方がいいんじゃない
あうあ、元ページが間違ってましたか・・・。 それはショックです。 他のページ見てみます。 ありがとうございました。
こんなとこでByte[]バッファ使ってるの初めて見たw
76 :
デフォルトの名無しさん :2006/11/06(月) 22:35:08
>>75 だってStreamReader.Read()にbyte[]が引数のオーバーロードなんて無いもんw
うはっ、お世話になった所で超ショック
>>61 不向きっつーか現状開拓中。つまり歴史がない
アーリーアダプタががんばってる最中。
しかしXNA Frameworkはびっくりするほど.NETわかってる
やつが書いているようなので(一部のBCLよりよくわかってるw)
すごくわかりやすいのになりそう。そうなったら流行るかも。
遅レスです。
81 :
デフォルトの名無しさん :2006/11/07(火) 09:42:24
DataGridViewでチェックボックスのセルにコントロールがあるとき チェックボックスの値が上手く取得できないので困ってます チェックボックスがtrueのとき削除しようと思ってるんですが 何かいい方法はありますか?
83 :
デフォルトの名無しさん :2006/11/07(火) 13:11:15
84 :
デフォルトの名無しさん :2006/11/07(火) 14:55:03
DataGridViewのチェックボックスセルを クリックしてチェックボックスがオンになって周りが破線で囲まれたときに チェックボックスの値がtrueって取得できない 他の所をクリックして破線がとれたらtureって取得できる なんとか前の段階でtrueかどうか確認したいのよ
>>83 >Book1.xlsのsheet1のA1にC#のソースから"ABC"という文字列を
>SQL Updateコマンドで実行したい
言ってることが分かりません。
>>83 .NET2.0+Excel2003でこれだけで出来たが。
using (OleDbConnection con = new OleDbConnection(
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties=""Excel 8.0;HDR=NO;"""))
{
OleDbCommand cmd = new OleDbCommand(@"UPDATE [Sheet1$A1:A1] SET F1='ABC'", con);
con.Open();
cmd.ExecuteNonQuery();
}
87 :
デフォルトの名無しさん :2006/11/07(火) 18:41:57
>86 ありがとうございました。 まじ分からなくて、もうだめかと思ってました。 初歩的な疑問だったかと思います、ですいません。 本当にありがとうございました。
dataがコミットされてないからじゃないかな。 DataGridView.CurrentCellDirtyStateChanged ??
描画するときにパラメータで描画の透明度を変えることって可能? g.DrawRectangle(ほにゃらら・・・ g.FillRectangle(ほにゃらら・・・ ってあったときにたとえば g.Transparency=155; g.DrawRectangle(ほにゃらら・・・ g.FillRectangle(ほにゃらら・・・ ってすると描画全体が薄くなるようなことがしたいんですが・・・
アルファ値
>>90 それって色決めるときのアルファ値をいじるってこと?
それともグラフィックスのアルファ値見たいのがある?
Color.FromArgbを使ってアルファ値を付けたColorを作る
>>88 まさにCurrentCellDirtyStateChangedでした
解決しました
ありがとうございます
>>89 に書いてあるDrawRectangleとFillRectangleだけなら
>>92 でもできるだろ
DrawImageとなるとまた別だけど
どうしても全体を透明にしたいなら、まとめて別のImageに描画しといて
ColorMatrix付きでDrawImageとか
>>96 できるかできないかじゃなくて、本来の意図としては描画コードをいじることなく外部の属性変化で動作を変化させたいって事でしょ?
本気で言ってるとしたらなんかエンジニアとしての素養が欠けてると思う。
それなら、サブクラスつくってColorにアルファ値付加するようにすりゃいいんじゃね。
>>97 お勧めの方法を教えてください。
ぼろぼろクリキター
100 :
99 :2006/11/07(火) 23:55:55
最後の行はペーストミスです気にしないで。
COLORはα値を標準でもってるよ。
最近になってCodeDOM調べてみた オレオレ言語を.NETアセンブリにできるみたいね、面白そう 誰かいじってるやついる? ぼろぼろクリキター
>>97 なんでそんな剣幕なのか分からないけど
>>92 でいいんじゃね?
>>92 でパラメータでもなんでもアルファ渡して
そいつからColorつくってブラシでもペンでも描画コードで作ればいいんじゃ?
ngen しても起動速度に大差ないからネイティブコード出力は不要
>103 描画する矩形等が重なる場合、まずいんでない? 例えばアルファ値128で黒い矩形の上に白い矩形を重ねたらグレーの矩形になるが、 アルファ値なしで黒い矩形の上に白い矩形を重ねて、最後にイメージ全体をアルファ128で描画すると半透明な白が描画される。 ってことで >96にあるとおりColorMatrix付きDrawImageでいいと思う
現状、inliningが甘くてメソッド呼び出しとかpropertyとかもの凄くオーバーヘッドがでかい。 ネイティブコード出力よかまずそのへんを改善して欲しいのだが…
プロパティとかイテレータとか匿名メソッドとかすごい多用しちゃってますが・・・・
ご教授きぼんぬです 画像の一部分だけBitmapメンバに格納したいってときに Graphics.DrawImageで部分を切り出ししても全体がコピーされるんでクマー状態。 メソッドの使い方をまちがっているのか、それとも別の方法がいいのか。 どなたか参考になるアイディアをください
>>109 あ・・・これじゃわかりにくいですね。
いま事情で手元にソースがないので完璧には説明できません。スマソ。
よくわからんが、DrawImageでsourceのrect指定できたはずだが。
>>108 > プロパティとかイテレータとか匿名メソッドとかすごい多用しちゃってますが・・・・
iteratorもdelegateも無茶苦茶遅い。
しょーもないアプリなら実用になることはなるのだけど、速度が要求されるところだと
その遅さが致命的。
もっと最適化がんばって欲しい気はするが、いまのC#の言語デザインだとiteratorやdelegateを
inliningするのは難しいだろうなぁ。
ほんと、デザインセンスを疑うよ。素人じゃないんだから・・。
最適化厨はおとなしくC++使ってろよ
114 :
118 :2006/11/08(水) 17:50:20
とりあえずその辺を多用して今アプリ作成中ですが今のところそれほど致命的な速度の問題は生じてないですね。 もちろんC++でやればもっと早くなるとは思うけど。 生産性との兼ね合いですが今の開発ではC#で十分。
デリゲートって実質インタフェースと変わらんぞ インライン展開とかありえん
メニューアイテム上で右クリックを検出したいのですが(ブラウザのブックマークように)、 ToolStripMenuItemで実現は可能でしょうか? それとも全部自前で作るしかないんですかね?
118 :
デフォルトの名無しさん :2006/11/08(水) 18:07:42
C++ってそんなに生産性低いか? 確かにMFC使わないならそう思うが VC+++MFCならC#とほとんど変わらないだろ?
開発環境のサポートが気合入ってるから、C#とほとんど変わらないならC#の方が楽。
>>117 なんか悩んだ記憶があったので前に書いたコード漁ったらこうやってた。
srcBitmapの部分(x, y, width, height)をresultに切り出すとすると、
Bitmap result = new Bitmap(width, height);
using (Graphics g = Graphics.FromImage(result)) {
g.DrawImage(srcBitmap, -x, -y, width, height);
}
121 :
デフォルトの名無しさん :2006/11/08(水) 18:53:44
なんだ、このいいかげんなコードは? 商用ではないですよね? 商用なら大問題だぞ
122 :
デフォルトの名無しさん :2006/11/08(水) 18:54:40
なわけねーじゃん .NETが商用には耐えかねる
これは趣旨だけを今書いたけど、何が悪いかわからんから教えて。 C#そんなに使いまくってるわけじゃないので・・・
べつに問題ないと思うが クリッピングが適当だけど、そんなことでパフォーマンスに影響が出るほどアホじゃないだろ
>>118 MFCはちょっと…癌だね。
MFCで読み込む画像をダイアログで指定してフォームに表示するだけでも
覚えることは山ほどある。
TextBoxの入力内容をタイトルにするにも直感的じゃない手法を取らなくてはならない。
後、文字の取り扱いが良くない。
126 :
デフォルトの名無しさん :2006/11/08(水) 19:14:38
>>125 じゃあさ、読み込む画像をダイアログで指定する際にプレビュー機能が欲しいなんて
要求があったらどうする。
これを実装しようとするとC#でも面倒(容易だが)
また、無駄に動作がもっさりしてるし・・・
VC+++MFCの方がコンパクトで高速なものが書ける。
じゃあ、もっさりしたら困るとこだけネイティブで書けばいいじゃない。
もっさりしてて困らないことってあるのかしらん?
>>126 皆がオリジナルダイアログを作りたいわけではない。
多分、生産性の意味わかってないな。
実際の業務でもコンポネント作るのは技術レベル高い人にさせてるし。
他の大多数はそれを使うだけ。
俺としては直感的に使いやすい方がベター。
.NETってコントロールをポトペタできるから簡単そうに見えるけど 人に見せて恥ずかしくないUIを作ろうとするとほとんどのコントロールは 自前で用意することになるぞ。 VC++も同じだが、サンプルアプリでないかぎり標準コントロールを しようする機会ははない
>>128 そしたら全部アセンブラでクロック数かぞえながら書いとけw
そうせずにC++/MFCを使う理由と、C++/MFCを使わずにC#を使う理由は大体同じだと思うよ。
あれ? おさまったの? 安置c#論争やらないのw とりあえず巣に帰れ。
ついでに押して欲しいんだけど L"これは日本語テキストです" の Lってなに?
134 :
デフォルトの名無しさん :2006/11/08(水) 20:09:03
L様じゃない?
>>121 プログラミングできない人がこの板で何やってんだか・・・
>>116 右クリック検出だけなら簡単だけど、メニュー出そうとすると結構面倒
昔の記憶だと、ToolStripMenuItemじゃなくて親のDropDownの方を
継承したほうが楽だったような
OnMouseDownでMouseButton覚えといてOnItemClickedでボタンで分岐、
右だったらContextMenu(ContextMenuStripじゃなくて)を表示するのが簡単だったりする。
ContextMenuStripだとフォーカス奪うので閉じなくする処理とかが面倒。
139 :
デフォルトの名無しさん :2006/11/08(水) 21:49:38
SortedList sortedList = new SortedList(); sortedList.Add("PC", "パソコン"); sortedList.Add("MOBILE", "携帯電話"); sortedList.Add("CALC", "電卓"); 上記のようなコードで「SortedList」を用いてインデックス、キー、値の各々で検索出来る 配列を作成しています。このクラスではAddするとキーに従って自動的に並び替えが発 生するのですが、並び替えをさせない方法がわかりません。 IComparer or SortedListのコンストラクタで何かを設定(指定)すると出来そうな 感じがするのですが・・・Addの順序で配列を作成するにはどのようにすれば良いか ご存じの方、ご教授願います。
List<EnglishJapanesePair>みたいにするとか
>>139 えーとSortedList ってのは、中身が何らかの順序関係によって整列されたリストのこと。
(Sort ってのは英語で並べ替えというような意味)
ソートしなくていいなら、List<string> や ArrayList を使うべき。
>>139 ・インデックスで検索するためのList<Pair<string,string>>
・キーで検索するためのDictionary<string, string>
・値で検索するためのDictionary<string ,string>
を各々用意したらいかがか。
SortedListは内部にKeyListとValueListを持ってるだけだから、 同等の機能でいいなら、そこまで複雑なことしなくてもいいんじゃないかなあ。
144 :
デフォルトの名無しさん :2006/11/08(水) 22:25:49
>>140-
>>143 ありがとうございます。
複雑なことしなくてよいのは私もなんですけど…客先の要件なので…
要は状態遷移を行いたいのです。
1.Prev、Nextであればカレントインデックス値を加減算して処理する。
2.指定した状態へJumpであればキーで検索して処理する。
3.前の状態へJumpであれば値で検索して処理する。
と言う具合です。これを満たすためにはArrayList、HashTableの両方を
兼ね備えたSortedListが最適と判断したのです。
自動的に並び替えが無ければOKなんでけどねぇ〜orz
>>144 List<Pair<string,string>> でOK。
>>145 それだとキーでの検索と値での検索に線形オーダーかかるのでは。
どれも定数オーダーでやるには
>>142 の三つが必須じゃない?
定数オーダーになりっこねえだろ
定数オーダーが必要ならその通りだと思う。
>>130 ほとんどのコントロールを自前で用意って、ほんとにそう?
ほとんどのアプリでは標準コントロールを使用している。
.Netでできていて、標準コントロールを使用する機会がないような
人に見せて恥ずかしくないUIを持ったアプリを教えてくれるとありがたいんですが。
SortedDictionary なら対数オーダーまで落とせるけど Dictinary だと線形オーダーのままだよ
>>149 テキストエディタを作る場合を考えてください。
TextBoxコントロールを使って作れますか?
確かに、.netのGUI部分はやたらもっさりしてるのが気になるな 推測だがデリゲートが遅いせいじゃない?
>>150 いやいや、Dictionaryはハッシュテーブルだよ
だから定数オーダー。
なんでOrderedDictionary使わんの? v1ならしゃあないけど。
>>151 エディタなら検索ダイアログや置換ダイアログ、各種の設定用ダイアログ等での
文字列入力で盛大に使うんじゃない?
ポトペタで作れて生産性向上というのと、「ポトペタだけで」作れるというのは違う
ことだってのはわかるよね。
簡単に作れる部分を簡単に作れば、そこで浮いた工数を他の処理、
例えばテキストエディタならばエディット部分の作成に回すことができる。
あるいは工数の減った分を単純に利益としてもよいし、販売価格を下げてもよいし、
バージョンアップサイクルを短縮してもよい。
.Net にしたからといって何でも簡単にできるわけではなくって、
簡単にできることが多少増える→生産性が上がる、ということが重要。
漏れはUI以外は C++ or C++/CLI 使ってるけど。
C# ってtemplate無いし多重継承無いし using たくさん書かせられるから効率悪いんだもん。
いや、ジェネリックちゃうし。
159 :
デフォルトの名無しさん :2006/11/08(水) 23:11:55
>>154 OrderedDictionaryを用いる方向で実装していました。
ところが、値の存在チェックは出来るのですが、インデックス値を取得することが
出来なかった(取得する方法がわからない)からです。
1.インデックス値の操作でキー、値を取得する。
2.キーで検索して、インデックス値を取得する。
3.値で検索して、インデックス値を取得する。
この3つの要件を満たすのがSortedListだったのです。
160 :
デフォルトの名無しさん :2006/11/08(水) 23:16:57
>>145 ありがとうございます。早速試したところ…自宅のPCはXP-HOMEだった。orz
明日、出社して早速試してみます。
ほえ?
>>159 ああそうか…
OrderdDictionaryにあってもよさそうなのにな。
>>159 class Record { string key, value; int index; }
でも作って
・List<Record>
・Dictionary<string key, Record>
・Dictionary<string value, Record>
の3つを作れば?
・List<Pair<string key, string value>>
・Dictionary<string key, int index>
・Dictionary<string value, int index>
でもいいけど。
164 :
116 :2006/11/08(水) 23:54:18
>>138 ありがとうございます。やっぱりそう簡単ではないんですね。
さっそく色々やってみたいと思います。
>>155 > デリゲートはそんなに遅くないのでは?
全然言ってることが的外れ。
例えばdelegateでカリー化したり関数合成したりしてもinliningされないことが問題。
アンダースに次会ったときに突っ込んでみるよ。
脳内アンダースに同情
まあ、あれだ。 Scheme最高w
>>166 アンダース、年に数回、日本に来るよ。おまいさんも聞きたいことがあればサミットなり何なり参加しれ。
でもtypedefとネイティブコード生成の質問はタブーな。
毎回聞く馬鹿があとを絶えないのでアンダースはうんざりぎみ。
大胆予想 次世代windowsはマネージコードが標準で、 ネイティブコード実行が保護下のエミュレーションに。
なにそのWinFX
時代は変わるんだよ。 昔はゲームはDOSじゃないと遅くて動かなかった。 windowsでゲームというと馬鹿にされたもんだよ。 もしかしてマネージアプリのほうが高速になる時代が来るかもな
172 :
デフォルトの名無しさん :2006/11/09(木) 10:35:15
>>144 です。
List<Pair<>> list = null;
上記のように定義してどのように追加すればよいのでしょうか?
Addメソッドを用いるのは理解出来てます。書き方がわかりません。
ご存知の方、教えてください。
>>172 list.Add(new KeyValuePair<string, string>("key", "value"));
こういうこと?
>>120 を参考にして書き直してみたやつ。現状うまくいってない。
Image srcimgが吸出し元
int w= srcimg.Width/10;
int h = srcimg.Height/10;
Bitmap[,] result =new Bitmap[10,10];
for(int j=0;j<10;j++){
for(int i=0;i<10;i++){
result[i,j]= new Bitmap(w,h);
Graphics g = Graphics.FromImage(result[i,j]);
g.DrawImage(srcimg, -i*w, -j*h, w, h);
g.Dispose();
}
}
foreachのほうがいいのかな。。。
>>174 じゃあ、こうすれ。
g.DrawImage(srcimg,
new Rectangle(0, 0, w, h),
new Rectangle(i*w, j*h, w, h),
GraphicsUnit.Pixel);
int w = srcimg.Width / 10; int h = srcimg.Height / 10; Bitmap[,] result = new Bitmap[10, 10]; for( int j = 0; j < 10; j++ ) { for( int i = 0; i < 10; i++ ) { result[i, j] = srcimg.Clone( new Rectangle( i * w, j * h, w, h ), System.Drawing.Imaging.PixelFormat.DontCare ); } } じゃ駄目なのか
177 :
176 :2006/11/09(木) 15:49:09
あ、話し見えてなかったスマン
WebBrowserコンポーネントを継承した自前クラス内で HTTP POSTされる内容をキャッチしたいのだが、
うまい方法ないすかね。
先ずはonSubmitをフックしようとしたのだけど、
単純に マネージドコードのHtmlElement.AttachEventHandler("onsubmit", new EventHandler....)ではただイベントが飛んでくるだけで
formの内容がわからん。
さらに、
ttp://www.thescripts.com/forum/thread232640.html によるとHTMLFormElementの onsubmitのフックにはバグがあるようで使えない。
valueを見るじゃだめなの?
ごめん 内容読んでなかった。
181 :
デフォルトの名無しさん :2006/11/09(木) 17:40:53
余計に発生してしまったイベントをクリアするのはどうやるのでしょう? イベントメソッドをアンバインドしてもクリアはされませんでした。
109=110=117=174です。
>>175 を反映させたところ成功しますた。
アイディアを出してくれた人たちに百万の感謝を。
フラグで判断。
>>178 BeforeNavigate2 イベントに POST されるデータも入ってる。
Interop.SHDocVw.dll 参照して ActiveXInstance を SHDocVW.WebBrowser にキャストしてイベント使用するか
CreateSink でイベントシンク作るかしないと使えないが。
>>185 面倒だから素直にAxBrowser使ったら?
素直にBeforeNavigate2使えるし。
>>185 なるほど〜、SHDocVW.WebBrowserにキャストすればいいんですね。
ふつうに
SHDocVw.WebBrowser browser = (SHDocVw.WebBrowser)this.ActiveXInstance;
browser.BeforeNavigate2 += new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(browser_BeforeNavigate2);
とかやってでBeforeNavigate2イベントのフックおよびPOSTデータ取れました。
188 :
デフォルトの名無しさん :2006/11/09(木) 23:54:47
クラスやメソッドの説明のためのコメントで良いフォーマットありませんか?
ドキュメントコメントじゃあかんの?
>>188 コメントそのもののフォーマットを求めているならヘルプのそれを参考にすれば?
たとえばプロパティなら「〜を取得または設定します」みたいな。
お願いします。誰か多重継承を許容する言語作ってください。
>>191 多重継承を許容すると退化することになる。
新しいスキームが必要。
>>191 CLOS系のやつ
シバリがなくなるだけで退化にはならんと思う。
漏れは色んなパラダイムを許容する言語の方が好きだ。
すれ違いだけど… 多重継承で同じインターフェイス含んだクラス2つ継承したら、 動作はどうなるの?
言語によるんじゃね? C++なら部分オブジェクトを共有するか別々にするか制御できるよね。 スレ違いスマソ
バグ出にくくなって、コーディングが楽になるならなんでもいいよ。
選べりゃいいと思うんだけどね。 ひとつしか実装なかったらそれが呼ばれて明示的実装あればそっちが呼ばれる。 副作用よりも記述性のメリットが勝ると思うんだけど。 複数クラスに委譲コードこぴぺするほうがバグでるっちゅーねん。
開発陣が多くなると多分死ぬはめに…
プロパティのset呼び出しをデリゲートに渡したいんだけどどうしたらいいでしょう? float Width{set{_width=value;}} っていうプロパティがあるんですが、 floatを引数にもつデリゲートが他の変数に代入しようとしても _deleg=Width;はだめだし _deleg=set_Widthもだめ。
・・・メソッドでくるめば?
自由度が高くなっても
>>199 みたいなこと
言うやつが増えるだけじゃないのかな?
僕の考えたオリジナル仕様?
リフレクションでないと出来なかったかな?
.NET Framework 3.0の中身をのぞいてみよう! デジタルアドバンテージ 一色 政彦 2006/11/11 PS3並みのフライング?
>>205 何が?<フライング
.NET Framework 3.0、もう正式版出てるし、
β版とか CTP 版はずいぶん前からあるし。
ワロタ
@ITはいつもそうだけどな
いつものこと
フォームのキーダウンイベント発生しないけどなんでー private void Form1_KeyDown( object sender, KeyEventArgs e ) { switch ( e.KeyCode ) { case Keys.Left: rects[0].X -= 25; rects[1].X -= 25; rects[2].X -= 25; rects[3].X -= 25; break; case Keys.Right: rects[0].X += 25; rects[1].X += 25; rects[2].X += 25; rects[3].X += 25; break; } } } すいっちのとこにブレーク張ってるのにキーボードのキー入力しても イベントハンドラにdで来ないお これだから馬具だらけのC#はきらいだ!!!
ちなみに2005使ってる やっぱフリーのだから馬具ありなのかな、外地?
コントロールの方に飛んでるだけだろ
>>213 違いますよ^^;
ちゃんとフォームにフォーカス当ててる
>>214 みつからないんだが紹介してくれ、そっちで質問するから
そんなスレッドはないようですが・・・ できればurlをお願いいたします(ぺこりー
>>219 どーも。
ボタンを押したときのイベントで
>>217 の
Form.KeyPreview = true;
というのを追加したけどコンパイルエラーになる。
変数はForm1という名前だから
Form1.KeyPreview = true;
とやっても怒られる。
this.KeyPreview = true;
でコンパイルが通った!
でもやっぱりだめなんだな、これが。
やっぱり
>>211 のイベントにdで来ないお
試しにみんなもやってみてくれ、
もしバグだったら誰か舞糞に連絡ヨロ
>>220 プログラム言語の勉強を一からやることをお勧めする
\ \∩─ー、 ==== /\● 、_ `ヽ ====== / (0o) ● |つ ちょっ! ちょっと待つクマ! | (_入__ノ ミ 、 (_/ ノ /⌒l 釣り方間違ってるクマ!! /\___ノ゛_/ / ===== 〈 __ノ この吊り方は、やばすぎるクマー!! \ \_ \ === \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ
>>219 氏以外みんななんちゃってC#プログラマでわからないってことで
>>219 氏の教えてくれたスレに移動するからここでの質問は取り下げるお
お世話様ですた
>>221 いやあんなの一生プログラミングに触って欲しくないな
226 :
デフォルトの名無しさん :2006/11/11(土) 13:56:22
質問です。 C#+asp.net2.0でプログラムかいてます。で、あるページでGridViewを使ってるんですが動作がおかしいです。 画面にはGridViewと更新ボタンがあります。Gridviewにはデータバインドしてるのとテンプレートフィールドがあります。 テンプレートフィールドはチェックボックスになってて、チェックボックスをオンにした状態で更新ボタンを押すとその状態がDBに記憶され、 次同じページを開いたときはチェックボックスがオンになった状態でページが開かれます。 更新ボタンのイベントではまずDBにある全てのデータを消してからGridView全てのRowを見て Checkbox.checked=trueのものだけDBに保存する仕様になってます。 しかしここで問題が…。チェックボックスがオフの状態からオンの状態にして更新ボタンを押すとうまく反映されるのですが、ページを開いた状態のときにすでにオンになってるチェックボックスをオフにして更新を押すとDBに反映されません。 原因を調べたところチェックボックスをオフにしたはずなのに条件判定のところではチェックボックスがオンの状態になっているようでした。これはなぜでしょうか? わかる人いらっしゃったら教えてください。お願いします。
Page_LoadでデータバインドしてるとこでIsPostBackがfalseのときだけやるようにする。 とエスパーなりきって考えてみた。
228 :
226 :2006/11/11(土) 14:17:59
>>227 書き忘れてましたが更新ボタンを押した後は「更新されました」というページに遷移するようになってます。なのでpostbackは関係ないかもしれません…。
ページがロードされたときにDBに項目があるものに関してはチェックボックスをオンにするということをしてますが、
それでオンになった項目をオフにして更新ボタンを押しても、そのイベントハンドラ内ではチェックボックスがオンだと認識されているところに問題があるんだと思いますが、なぜかがわかりません…。
229 :
211 :2006/11/11(土) 14:25:56
KeyPreview教えたのもすれ誘導したのも 役立たず。
>Form.KeyPreview = true; >というのを追加したけどコンパイルエラーになる。 >変数はForm1という名前だから >Form1.KeyPreview = true; >とやっても怒られる。 >this.KeyPreview = true; >でコンパイルが通った! >Form.KeyPreview = true; >というのを追加したけどコンパイルエラーになる。 >変数はForm1という名前だから >Form1.KeyPreview = true; >とやっても怒られる。 >this.KeyPreview = true; >でコンパイルが通った! >Form.KeyPreview = true; >というのを追加したけどコンパイルエラーになる。 >変数はForm1という名前だから >Form1.KeyPreview = true; >とやっても怒られる。 >this.KeyPreview = true; >でコンパイルが通った! こんなレベルなのに文句を言う方がどうかしてるな。
スルー ↑ これくらいいい加減読めるようになろうぜwww
そうだね プロテインだね
>Checkbox.checked=trueのものだけDBに保存する仕様になってます。 この投稿の段階で怪しい。 あげ足取りごめんね!!
236 :
226 :2006/11/11(土) 15:46:08
>>234 一応更新ボタンのイベントハンドラにはまずDBの全ての内容をdeleteして、その後foreachで全てのrowを見てチェックボックスがオンならDBにタプルを追加するという方法を取ってます。これがいけないんでしょうか?
>>235 実際はrowからcheckboxオブジェクトを取ってそれのcheckedをチェックしてます。
だからLoadとかで常にDBから読んじゃってんじゃないの? って思うんだが。
TreeNodeのNodes[string key]ってどうやって使うんでしょうか。
239 :
226 :2006/11/11(土) 17:24:49
>>237 うお!本当だ!
初心者で申し訳ありませんでした。更新ボタンを押したときそのボタンのイベントハンドラのみが呼び出されると思っていたのですが、
その前にpage_loadが呼び出されてるんですね…。
僕の仕様だとpage_loadのところでGridViewの全てのRowをチェックしてそれがDBにあった場合チェックボックスをtrueにするので一度消したやつも再度チェックがオンになってしまっているようです。
isPostBackを使うことで解決しました。こんな初心者に助言していただいて本当にありがとうございました!
>>238 TreeNodeCollection.Item プロパティ (String) だね
いつの間にこんなものができたのやら。
keyはコレクションから取得する TreeNode のNameとなってるから
TreeNode作るときnameを設定しておけば良いだけじゃないのか?
Page_Init コントロールのプロパティを読み取るか、初期化します。 Page_Load コントロールのプロパティを読み取って更新します。
C#で、web操作のプログラムを組みたいと思ってます。 例えば、IEでグーグルに行って、検索文字に「ねこかわいいよねこ」と入れて、検索ボタンを押して、 表示された検索結果の一番上のリンクにジャンプする・・・といったような、web操作を実行できるよう にしたいのです。 しかし、いったいどうやればいいのか見当もつきません。 まだC#を始めたばかりで、本屋で入門書を探しているのですが、そんなことのやり方を書いている 本も見あたりません・・・。 どうやればいいでしょうか?
243 :
デフォルトの名無しさん :2006/11/11(土) 18:57:42
>>242 いきなりジャンプすんの?
それとも自分の画面に
「ねこかわいいよねこ」と入れて
自分の画面のボタン押せばその検索結果を出す
ってだけなら今はやりのweb2.0、グーぐるのウェブサービスを使えばできそうだけどな。
同じくamazonの検索機能もウェブサービスで公開されてるような気がするんだが。
* HTTP についてちょっと調べる。 * Googleの検索結果のURLをながめる。 * Googleの検索結果のソースをながめる。
>>243 すいません、えと、グーグルは例に出しただけで、実際は株取引の画面で、色々入力して、
自動注文みたいなことをしようと考えています。
やりかたが全くわかりません・・。
手で色々操作してるところをパケットモニタでキャプチャして観察
パケットモニタつうかプロトコルアナライザの類ね。
皆さん、レスありがとうございます。 うーん パケットモニタとか、プロトコルアナライザなるものがサッパリ分かりません(´・ω・`) ちょっと、調べてみます<(_ _)>ありがとうございました。
株取引って・・・ htppsの操作なんて出来るの?
そかhttpsか・・・中見えないじゃん。
httpsなんて関係ない、ただのオートメーションでそ。
253 :
デフォルトの名無しさん :2006/11/11(土) 19:37:41
>>245 >すいません、えと、グーグルは例に出しただけで、実際は株取引の画面で、色々入力して、
>自動注文みたいなことをしようと考えています。
これとグーぐるの画面出すのと何が共通してるっての?
どういう意味で例だしたのかさっぱりわからん
大体おなじもんだよ。 俺もオートログインとか自動発注とかしてたからわかる。 ラジオボタンとかチェックするのなかなか分からなかったけどな。
ようするに通信したいっていう話じゃなくて、プログラムでIEを操作したいってことじゃね? 文字入力して特定の場所をクリックしてみたいな。
なぁ、C丼とブービードトネトと、一体何が違うんだ?
>>257 ちょっと文法が違うだけで
使うクラスライブラリはほぼ同じ(ただしVBにはMyがあるけど)
好みの問題じゃね。
259 :
デフォルトの名無しさん :2006/11/11(土) 20:22:44
すいません、友人にプログラムのさわりだけ教えるために 一応c#のexpressedhitionでアドレス帳でも作ってもらおうかと思ってるんですが、 その際のDBも簡易的なものでできたらなと思っています。 ,mdfファイルを作るまでをできたのですが こいつにアクセスしてデータを読み書きしてみたいのですが どのようにすればいいでしょうか? 感じ的にはログイン認証みたいなことをしたいなぁと思っているのですが。
ごめんなさい。 本を買えの一言です。
261 :
257 :2006/11/11(土) 20:42:15
>>260 こういう一言書くぐらいなら単純にフル無視したらいいのにとたまに思う。
さわりとは物事の本質を示す
>>259 ADO.NET、接続文字列、SqlConnection、DataSetあたりでぐぐれ。
>>265 あ、そっち?
大丈夫ごめんごめん。
会社ではOraleDBだったり今はSQLServerだったり
DBサーバにつないで、dataadapter使ってデータのやり取りやってるんだが、
単純にそういう環境なしのローカル環境だけの簡単なもの、っていうと
実務では殆ど使わないので実はあまりなじみなくってね。
初心者用の本でもありゃわかるんだろうが、そういう本はないw
結局普通にDataTAbleAdapter使ってデータのやりとりやることにしたよ。
DataSetに入れてしまえばあとはすぐだし。
その辺は「おまじない」とか言って適当にごまかしとくわw
最初から色々教えてやると頭パンクするかもしれんから。
>>264 ローカルにsqlserverたてれたらそら簡単だが。。
ExpressEditionでできることって限られてるじゃん?
SqlServerもクライアントの機能しかないし。
てなると、完全にローカルだけで動かす環境。
Accessも手元にないし、どうしたもんかなぁ、と思ってたんだが。
ローカルデータ用の空のデータベースっつーのが項目として追加できたんで、
それ使ってなんとかやってみたよ。
ローカルデータ用の空のデータベースもSqlConnectionクラス使って
普通にコネクション設定したら使えるのかな?
コネクションはローカル用空DB(.mdfファイル)も
普通に別のDBサーバのDBも書き方同じなんだろうか。
ローカルのDB使ってプログラムなんか普通作らないからなぁ。
268 :
デフォルトの名無しさん :2006/11/11(土) 22:16:13
すいません、質問です。 C#でCheckboxの値を変えられなくする(灰色表示にする)方法ってenable=falseにする以外はありませんか?
なぜ?
>>268 ほんと、なんで?って感じ
なぜEnabled = falseが嫌いなの?
方法ってたら、SendMessageでメッセージ送るとか?
271 :
268 :2006/11/11(土) 22:28:59
>>269 postbackしたときにfalseにしたものはrequest.formに含まれなくなったようなのです。それはこれが原因ではないのでしょうか?
>>268 ロックってなかったっけ?
灰色にしたくない、て言うのだと良くある質問かなと思ったけど(文字が見えにくくなるとか)
最低限 Webで、とか書け。 最近こんなやつばっか。
274 :
268 :2006/11/12(日) 00:31:56
すいません、Webでです。 ふむぅ、なんかできないみたいなので他の手段をとってみます。ありがとうございました。
TableAdapterでUpdateしたんだが、コミットってどうする? どうやったら保存されるの?
標準でcomitしなくても更新できるんじゃなかったっけ。 トランザクション実行してるの?
DatabaseDataSetTableAdapters.ADRESSTableAdapter uadpter = new WindowsApplication1.DatabaseDataSetTableAdapters.ADRESSTableAdapter(); DatabaseDataSet ds = new DatabaseDataSet(); DatabaseDataSet.ADRESSDataTable dt = new DatabaseDataSet.ADRESSDataTable(); //データ追加 DatabaseDataSet.ADRESSRow row = ds.ADRESS.NewADRESSRow(); row.NAME = this.txtName.Text; row.ARESS1 = this.txtAdress1.Text; row.ADRESS2 = this.txtAdress2.Text; row.BIKO = this.txtBiko.Text; row.TEL = this.txtTell.Text; ds.ADRESS.AddADRESSRow(row); uadpter.Update(ds.ADRESS); としてみたんですが、データが反映されません。 なんか最後のところがへんちくりんなんでしょうかね?
そのdtは何のため…
ローカルのDBをコピーして上書きしちゃってたりして
ぐはぁ、 なんかbinのdebugの下にデータベースのコピーできてるやんけ! 一生懸命ちゃうとこみとったわい。 デバッグモードのときはこっちのDBに書き込まれるとかそゆこと?どうなってんだ。
281 :
211 :2006/11/12(日) 09:45:17
きみたち必死になってForm.KeyPreviewという回答をくれたけど 実は違うみたいれつよ(藁 後学のためにきみたちのもおいらが調べた結果をまとめたので教えてあげよう 「Windowsアプリケーションで方向キーなどの特殊キーを処理するには?」 by 149 1.Buttonコントロールで方向キーが処理できない理由 Buttonコントロールでの方向キーの入力が、通常のKeyDownなどのキー・イベントで処理できないということは、 「方向キーが通常の入力キー(以降、普通入力キー)とは異なる」ことを意味する。Buttonコントロールの方向キーは 「プリプロセス(=前処理)を必要とする特殊な入力キー」(以降、特殊入力キー)である。 これは、すでにプリプロセスで何らかの処理を実行済みなので、さらにその後でキー処理を行う必要がないからだ。 例えば、Buttonコントロールで[↓]キーを押すと、Windowsアプリケーションはプリプロセス工程で自動的にフォーカス移動の 処理を実行する。よって、その後でKeyDownイベントを処理する必要はなくなる。 しかし、実際のアプリケーションでは、そのような通常のアプリケーション動作をカスタマイズしたい場合がある。例えば、 通常のアプリケーション動作では[↓]キーでフォーカス移動すると、そのフォーカス移動先がGroupBoxコントロールなどにより 設定されたグループ内でループするようになっているが、それをカスタマイズして、グループを越えてフォーカス移動するように したい場合などが挙げられる。 a) プリプロセス工程における処理をカスタマイズする b) 特殊入力キーを普通入力キーに変更する ここではa)について解説する。 2.プリプロセス工程における処理をカスタマイズする プリプロセスをカスタマイズするには、フォームのProcessDialogKeyメソッドをオーバーライドして、そのメソッド内でキー処理を 行えばよい。もちろんフォームではなく、コントロールのProcessDialogKeyメソッドをオーバーライドしても同様の結果が得られる。 次のコードは、実際に、フォームのProcessDialogKeyメソッドをオーバーライドした例である。この例では、方向キーでグループを 越えたフォーカス移動を行うように、処理をカスタマイズしている。 続く
282 :
211 :2006/11/12(日) 09:46:29
protected override bool ProcessDialogKey(Keys keyData){ switch (keyData) { case Keys.Down: case Keys.Right: this.SelectNextControl( this.ActiveControl, true, true, true, true); break; case Keys.Up: case Keys.Left: this.SelectNextControl( this.ActiveControl, false, true, true, true); break; default: return base.ProcessDialogKey(keyData); break; } return true; } ProcessDialogKeyメソッドをオーバーライドしたサンプル・プログラム(C#) なお、ProcessDialogKeyメソッドはコントロール→フォームの順で呼ばれる。ProcessDialogKeyメソッドでは、 独自にキーを処理した場合には、それを示すために戻り値でTrueを返すようにする。 また、コントロールのProcessDialogKeyメソッドは、コントロールのPreProcessMessageメソッドから暗黙的に 呼び出される。そのため、プリプロセス工程の最初のメソッドであるコントロールのPreProcessMessageメソッドを オーバーライドしても、同様にプリプロセス工程でのキー処理をカスタマイズできる。しかし、コントロールの ProcessDialogKeyメソッドやPreProcessMessageメソッドをオーバーライドする方法を採用する場合、当然、 コントロールの継承が必要になる。 ------------------------------------------------------------- 以上だ。いかにもC#のことなら何でも知ってる見たいなツラして回答者ぶるなら 少しは勉強しろよな(禿藁
そうだね
↑受け売りの知識を自慢げにひけらかしてる奴
常識だな
長い もっと簡潔に
なんで「フォームのkeydownイベントが発生しない」が 「コントロール上でのkeydownイベントが発生しない」にすりかわってるんだろう。 あ、釣られたのか。
・・・つーか、そろいもそろって・・・ 特殊Keyもしらないのでちゅか・・・?
292 :
デフォルトの名無しさん :2006/11/12(日) 13:51:16
Excelのマクロより遅い.NETになんの魅力があるのか禿げしく疑問
そうだね
vistaでは無問題
先を見ることができない
>>292 は脱落者
vista(=見晴らし、見通し)とヒントまで与えてくれてるのに気づかないとはね・・・
┐(´ー`)┌
>>294 ┐(´ー`)┌ ← このAAが禿しくムカツクんだが。
スルー力を磨くスレ
マクロより遅いのか
うそーん EXCELのマクロより遅いなんて話は聞いたことが無いよ。
デバッグモードででもベンチ取ったんじゃないかと
エラー19'hogehoge.Index' は参照マーシャル クラスなので、 'hogehoge.Index' を ref または out として渡すことはできません。 コンパイルエラーでこういうのが出てしまいます。 元のコードは、こんな感じです。 ↓ class hogebase { public int Index = 0 } class hogeInherit : hogebase { private void Close() { base.Index = 100; } } void main() { hogebase hb = new HogeInherit(); Console.WriteLine('{0}', }
ちなみにエラーが出るのは Main の Console.WriteLine です。
文字列になってないし括弧も閉じてない
>>304 void main()
{
hogebase hb = new HogeInherit();
Console.WriteLine('{0}', hogeInherit.Index.ToString());
}
これの間違いです。
308 :
デフォルトの名無しさん :2006/11/12(日) 20:35:50
>>300 デバッグモードだとEXCELにも負けるのか・・・
┐(´ー`)┌
┐(´ー`)┌
>>308 失せろっていってんだよ。
何度も同じことを言わせんなよ。
カスが。
311 :
デフォルトの名無しさん :2006/11/12(日) 20:49:23
┐(´ー`)┌
┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌
ムカデか
314 :
デフォルトの名無しさん :2006/11/12(日) 21:16:03
┐(´ー`)┌
最近妙にレベルが落ちてるな。どうしてだ?
回答者の質が落ちたんじゃね?
ブビー・コボラ・デルオパーイ・ジャバ糞辺りが難民化してるんじゃね?
320 :
デフォルトの名無しさん :2006/11/12(日) 22:35:43
┐(´ー`)┌
┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌ ┐(´ー`)┌
322 :
デフォルトの名無しさん :2006/11/12(日) 22:41:44
ムカデか
┐(´・3・`)┌ エェー
324 :
デフォルトの名無しさん :2006/11/13(月) 00:17:08
初歩的な質問なのですがushortをbyte配列にコピーするにはどうすれば いいのでしょうか? Cでいうmemcpyみたいなことをしたいのです。
Buffer クラス名な
Buffer.BlockCopyでできそうですね。 ありがとうございました
C#を勉強中なんですが、3項演算子というのは、積極的に使っていくものなんでしょうか。 普通にif文を書いた方が見やすいようなきもするんですけど、どうなんでしょう。
>>327 見やすく書いたほうが、読む方は読みやすい。自分が書いたコードでも時間が経つと
意外と悩んだりするもの。C言語でもできれば使わないほうがよいとされている。
C#でもそれは同じだろうと、俺は思っている。三項演算子の方が分かりやすいと判断
したところには使ってもいいんじゃないか?そういう意味ではgotoみたいなもの。
329 :
デフォルトの名無しさん :2006/11/13(月) 13:46:45
複数あるWindowからIEのWindowを絞り出し、そのHTMLDocumentを抜き出すという 事をしたいのですが、その方法で煮詰まっています。 public static bool IECallBack(IntPtr hwnd, IntPtr lParam) { StringBuilder sbClassName = new StringBuilder(256); GetClassName(hwnd, sbClassName, sbClassName.Capacity); if( sbClassName.ToString().StartsWith("IEFrame")) { Form1.al.Add(hwnd); } return true; } // EnumWindows でIECallBack へさせる。 EnumWindows(new EnumWindowCallBack(Form1.IECallBack), IntPtr.Zero); こんな感じでWindowのハンドルは取得できるのですが、Window内のオブジェクトを取得する 方法が分からなくて困っています。 どなたかご教授していただけませんでしょうか?よろしくお願い致します。
3項演算子で書いて意味不明なのは、ifで書いても意味不明だと思う。 ようするに読みにくいのは3項演算子のせいじゃない。
331 :
327 :2006/11/13(月) 15:53:16
単純な分岐で〜だったら1、そうでなければ2みたいな短い時に if文で何行も使うのはどうかなと思ってました。 if (〜) { 〜 } else { 〜 } かっこの中が1行で済むときはこんな感じで書いていたのですが、 一般的に3項演算子のほうを使うのかなと思って質問しました。 あまり参考書などで使ってるのを見かけないので 一般的に使われていないのかなと思って質問しました。 少し使ってみようと思います。
>>329 COMのMicrosoft Internet ControlsとMicrosoft HTML Object Libraryを参照
using SHDocVw;
using mshtml;
ShellWindows sw = new ShellWindows();
foreach (InternetExplorer ie in sw)
{
if (System.IO.Path.GetFileName(ie.FullName) == "IEXPLORE.EXE")
{
IHTMLDocument2 htmlDoc = (IHTMLDocument2)ie.Document;
Console.WriteLine(htmlDoc.url);
}
}
333 :
デフォルトの名無しさん :2006/11/13(月) 18:03:11
>>332 正にこれです。COMオブジェクト関連の操作に関してはVBの資料は多いのですが
C#に関する資料があまりなくて苦労していました。
本当に有難う御座います。
追加で質問なのですが、IEのウィンドウでさらにアクティブになっているウィンドウを取得したいのですが、
Shellwindowからhwndを抜き出すことは簡単に出来るものなのでしょうか?
334 :
332 :2006/11/13(月) 18:19:38
>>333 InternetExplorerクラスにHWNDプロパティがあるからそれが使えるんじゃない?
試してないから分からないけど。
ボリュームコントロールをいじりたい(音を大きくしたり小さくしたりとかしたい)のですが、どうやればいいでしょうか?
336 :
335 :2006/11/13(月) 21:11:54
モジュールが1.1でコンパイルされたものか2.0でされたものかってどこでわかるの?
他のアプリケーションのウィンドウがアクティブになったときに処理をさせたいのだが、 C#ではどうすりゃいいの? 他のアプリケーションのウィンドウに送られるWM_ACTIVATEメッセージを キャッチしたいんだけど…。これをやりたい場合はグローバルフックする 必要があるからC#じゃ無理…だよね? やはりTimerイベントを1秒間隔くらいで発生させて、その中で GetForegroundWindowなどを呼び出してチェックする方法しかないのかな。
342 :
340 :2006/11/14(火) 22:19:36
グローバルフックの部分をC言語などで書いて、WM_ACTIVATEをキャッチした時に .NETアプリにコマンドライン引数などで通知するなんてこともできるかな。 スマートじゃないけど。 うーん。いい方法が思いつかない。素直に全部C言語で作ったほうが早いかな…。
うん、多分その方が良いと思う。 GUI を C# で作りたいのならその部分だけ別プロセスで。
オブジェクトを自分で破棄するにはどうすればいいんでしょうか?
破棄というのが何を指すのかが問題だ
オブジェクトが使用するリソースを解放したいのならそのように明示的にコーディングすればいいだけ。 オブジェクトそのものが占めるメモリを解放するなら参照を切ってからSystem.GC.Collect()する。 特定のオブジェクトのメモリ領域を解放するのは不可能だしそもそも意味がない。
質問です。IntPtrに加減演算が定義されてないのはなぜでしょうか。 IntPtr ptr = ...; ptr = (IntPtr)(ptr.ToIntXX() + 3); などと書くとアーキテクチャに依存して効率が落ちたりしそうな気がするのですが どうなんでしょう。
加減算がしたいのならunsafeで通常のポインタ使ってください
>>343 そんなことするくらいなら全部ネイティブで書いたほうが早い
Cだと面倒なんでC++/MFCならC#を使うより工数は少ないはず
>>347 その質問に答えられるのは MS の中の人だけだろう。
MSDN フォーラムででも聞いてくれ。
351 :
347 :2006/11/15(水) 01:27:28
>>348 なるほど、そういうポリシーなのですか。
わかりました。
プロパティグリッドに表示させたときに Listメンバを編集させないようにできないですか? ReadOnly をつけても編集できてしまいます class MyClass{ private List<string> myList; [ReadOnly(true)] public List<string> MyList{ get{return myList;} set{list = myList;} } }
>>352 プロパティとしては、setterを用意したいけど、
デザイナー上からは、編集できないようにしたいってこと?
C# で作成したアプリケーションを、特定の拡張子と関連付けようとして 「関連付けたい拡張子のファイルを右クリック」 →「プログラムから開く」 →「プログラムの選択」 で作成したアプリケーションを選択したら、アプリケーション名が空になってしまいました。 これって何が悪いのでしょうか?
レジストリ確認しろ
引数のアプリケーション名が空ってことを言いたいんじゃないの? Argじゃなくてプロパティにあった気がする
char型の変数から値取り出したら変な数値だったんだけど 文字型の1が0x31のはずなのになんかばかでかい変な値だった どうやればいいか教えてくれ
全角の1だったんじゃね
じょうだんじゃない
わかる奴はいなさそうだな それじゃ
Console.WriteLine("{0:x}", (int)'1');
これからは
>>357 みたいな奴ばかりになるのかと思うと引退考えるな
どうぞどうぞ。
>>357 すまん。
もう、君が何を言ってるのかわからないよ。
>>354 多分 AssemblyTitle 属性の値が使われると想う。
AssemblyInfo.cs 見てみ。
あとキャッシュされてる可能性がある。
前にそう言うやり取り見たな。あれは XP のタスクバーのグループ化の話だったか。
>>365 何となく理解はできた。
それすらもわからないなら君も早く引退した方がいいよ^^
C#でchar型って文字型だから、単純に値を取り出して intみたいな数字型に変換するのは無理…というかしちゃダメじゃないの? Encoder使って、byteに変換すれば可能だけど
(゚д゚)ハァ?してもよろしいですか? (゚д゚)ハァ?(゚д゚)ハァ?(゚д゚)ハァ?(゚д゚)ハァ?
>>368 CharもInt32もただの構造体だがその辺は適当にConvertibleになってる。
つーか、君はちょっとくらい調べてから発言しようとは思わんのかね。
よろしいです!
>>368 char->intなら暗黙的にキャストできるだろ。
373 :
デフォルトの名無しさん :2006/11/15(水) 23:21:47
C#でC++の特性クラスみたいなことは出来ますか?
traitsはさすがにtemplateがないと無理だろ
でも代わりにリフレクションがあるか。
376 :
デフォルトの名無しさん :2006/11/17(金) 17:55:33
DataGridコントロールで、Enterキー押下時にカーソルを 左に移動する処理を行いたいのですが、下記のイベント にブレークポイントをおいても、イベントがコールされません。 EnableはTrueになっています。 何か設定に不備があるのでしょうか? dataGrid1_KeyPress dataGrid1_KeyUp dataGrid1_KeyDown 環境 VS2003 Win2003
378 :
デフォルトの名無しさん :2006/11/17(金) 19:19:55
一度StartさせたThreadを再び使用するにはどうしたらよいのでしょうか? 一度終了したThreadに対して普通に再びStart()メソッドを呼ぶとThreadStateExceptionが飛んできます…。
終了させなければ良い
そもそもなんで再利用したいの?
381 :
デフォルトの名無しさん :2006/11/17(金) 19:46:37
もし可能なら毎度毎度Threadをnewするオーバーヘッド(どの程度かわかりませんが)を避けられるかな、と思った次第です。
>>381 用途にもよるがBackgroundWorkerやその他のThreadPoolを使いなされ。
スレッドでこんな風にすれ while ( ! 死に時?) { 合図があるまで待つ; お仕事; }
384 :
デフォルトの名無しさん :2006/11/17(金) 19:52:49
ワラタ
C#マネージコードでスクリーンセーバーのような CGを描写するプログラムを書いていて、 その画面を動画ファイルとして出力する機能をつけたいと考えています。 動画を作るライブラリはVideo For Windowsなど色々あるようですが、 何を使うのが一番最適でしょうか?
res385 = null; System.GC.Collect(); こうですか!!わかりません><
便乗っぽいですけど、オブジェクト参照値をクラス変数として 持たせた場合にも参照地にnullをセットすれば勝手にGCが効くんですか?
>>391 他から参照されてなければ刈ってくれるでしょ。
尤も実際に目で確かめる術はないけど。
>>392 > 尤も実際に目で確かめる術はないけど。
つ WeakReference
>>391 意味無いから、やめとけw
消えるべき時に、勝手に消える。
395 :
デフォルトの名無しさん :2006/11/18(土) 22:40:53
質問です。 BitmapのLockbitsメソッドでゲットしたイメージメモリに対して Cで記述したネイティブコードからイメージ操作することは可能でしょうか?
やったことないけどunsafeコードでポインタ使って操作できるくらいだから、できるんじゃね?
もちろんそうよ
398 :
395 :2006/11/18(土) 23:36:59
395です。 今試したらできました!
フォームクラス内にリストを作って、そこをべつのフォームから参照しようと しているのですができません。 public List<string>でできると思ったのですが。 どうすればいいのでしょうか。どなたかご教示ください。
非staticメンバなら フォームクラスForm1のインスタンスをform1とすると form1.list staticなら Form1.list
401 :
395 :2006/11/19(日) 12:54:48
あ〜あ。 私のやりたかったことは、画像のエフェクト処理をCで書いたDLLに任せることだったんだけど、 試しに、Cで作ったエフェクトルーチンをC#に移植しても、スピードが変わらなかった。 C#って遅いと思ってたけど、ほぼネイティブ並のスピード出るのね・・・。 JITコンパイラはきちんとSSE/SSE2命令使ってくれるし。 すみません、チラ裏でした。
403 :
395 :2006/11/19(日) 13:12:49
頭、悪いですよー。 MSX時代から思考が止まってます。
Z80世代はホント頭悪いからね
>>401 まあ、遅いのは初回起動のみだし。
そういや、今、自宅で新しく買った PC に Vista RC2 入れてるんだけど、
.NET アプリの起動がむちゃくちゃ早い(ほんとに一瞬)んだけど。
これは、PC のスペックいいからなのか、
Vista では CLR の最適化かかってるからなのか、どっちなんだろう?
OS起動時にロードされてる
うむ、知らないで遅い遅い言ってる馬鹿もいるんだよなあ
>>405 うちでは大差ないよ。
たぶんスペックのせいかと
XPとVista両方に.Net製のシェルエクステンションを仕込んでるけど、 XPはログオンに時間がかかるがVistaは確かにかなり速い。
Vistaはリソース食い過ぎ('A`) そういえば、Vista対応のために、XPからの変更点のまとめってありませんか? システムフォルダがお引っ越しor内部で勝手にリンクするというのは聞いたんですが。
Vista1/31リリースだっけか・・・ 3年後位には主流になるのかねぇ・・・
>>405 SuperFetchが効いてるんじゃね?重量級のアプリにはかなり
効くようだ。VSとか。
メモリたくさんつまないと駄目だけど。
414 :
405 :2006/11/19(日) 21:23:29
>>413 メモリ2GB積んでる。
無駄にオーバースペックなもの買ってみた。
要するに、JIT が早いのは単にプロセッサ性能、
動作が速いのは .NET Framework のコンポーネントが
SuperFetch であらかじめメモリ上にロードされてるから
ってことでいいのかな?
意外と知らないで遅い遅いと.NET使ってる奴が多いってことか なんだかね
>>415 パソコンを使っている人の大半はあなたみたいなヲタクではありません。
大半の人に使っていただくためには屁理屈こねて遅くないんだよなんていってて・・・
>>416 415じゃないけど、開発者する人間なら…
418 :
417 :2006/11/19(日) 23:33:49
× 開発者する人間 ○ 開発する人間
C#で開発?
初心者と勘違いPGが紛れ込んでますねw
ヲタクばっかですねw
422 :
395 :2006/11/20(月) 08:42:22
ベンチマークです。 pentium4 1.7GHz C#(JIT):16593.75ms C(SSE2):19250ms C(SSE):15031.25ms C(FPU):20125ms athlon64 2.4GHz C#(JIT):4296.875ms C(SSE2):3640.625ms C(SSE):3796.875ms C(FPU):6859.375ms
>376 もう遅いかもしれないけど、そのセルを編集中かどうかで変わってくる。 編集中はセルのEditingControlがイベントを受け取るので、 そっちで処理しないといけない。
>>415 普通のプログラマなら、遅いのが、
・不適切なアルゴリズム選択による遅さなのか (ex. クイックソートとバブルソート、ハッシュ探索と線形探索)
・設計のまずさに起因する遅さなのか
・他のサブシステムに起因する遅さなのか (ネットワーク、ウィンドウシステム、ディスクI/O、など)
・本当に、言語による遅さなのか
などを、経験なり、思考なり、プロファイラ使うなりして判断できるが、
ヘボプログラマ程、遅さの原因を考えることなく、言語のせいにする。
ましてや、自分のアルゴリズム選択ミスだなんて考えもしない。
最終的には、CPUが遅い、とかぬかしだす。
MFCでいうところの SetRedraw(BOOL) ってありますか? Form上のLabelなどの表示を切り替える際に、一度Labelをクリアしてから値代入してるのですが
426 :
425 :2006/11/20(月) 11:04:56
それだと2回描画してしまうので、描画を抑えたいのです 途中で送信してしまいました・・・
コンテナをSuspendLayout/ResumeLayout()したらどう?
WM_SETREDRAWを送れば
429 :
425 :2006/11/20(月) 12:06:26
ファイルハッシュを取得する関数ってありますでしょうか? MsiGetFileHash のような関数を探しているのですが、見つけられなくて…(´д`;
>>430 using System.Security.Cryptography;
かな?
PInvokeするか MD5CryptoServiceProviderにFileStreamくわせるか、かな?
433 :
430 :2006/11/20(月) 15:35:35
434 :
デフォルトの名無しさん :2006/11/20(月) 21:39:41
初めまして。 現在既に起動しているIE6.0のWindowハンドルを取得し、その上に線の描画を行おうとしています。 IEのWindowハンドルは取得できたのですが、そこから線を描画する方法が分かりません。 どの様な解決方法があるでしょうか? どなたかご教授下さい。
多分全部 Win32API / GDI でやった方が早いな。 GetDC / CreatePen / SelectObject / LineTo 辺りか? ただし 434 が望んでる結果になるとは限らない。
再描画とか考えたら面倒くさそうだな。
hdcからGraphicsオブジェクトとって描画なら簡単だけど、
>>436 の言う通り、再描画が発生したら消えるね
438 :
デフォルトの名無しさん :2006/11/20(月) 22:36:26
>434です。
透明なFormWindowを作成してそこに線を描画し、IEのWindowの上に被せるという
方法も考えたんですけども。。。
>>435 さんと
>>437 さんの方法は同じ方法なんでしょうか?
[DllImport( "user32.dll" )] private static extern IntPtr GetWindowDC( IntPtr handle ); [DllImport( "user32.dll" )] private static extern IntPtr ReleaseDC( IntPtr hWnd, IntPtr hDC ); private void button1_Click( object sender, EventArgs e ) { IntPtr hWnd = IEのウインドウハンドル IntPtr hDC = GetWindowDC( hWnd );// またはGetDC Graphics g = Graphics.FromHdc( hDC ); //好きに描画 g.FillRectangle( SystemBrushes.ControlText, new Rectangle( 0, 0, 100, 100 ) ); g.Dispose(); ReleaseDC( hWnd, hDC ); }
440 :
デフォルトの名無しさん :2006/11/20(月) 23:34:21
>>434 です。
>>439 さん。有難う御座います。
この方法でIEのWindowに描画することが出来ました。
ここから線の再描画をする方法を採ってみようと思います。
(^^)イイエ、ドウイタシマシテ
443 :
デフォルトの名無しさん :2006/11/21(火) 00:35:50
DivXのCodecがインストールされている環境で 動画ファイルをDivXで圧縮するツールを 作りたいと思うのですが、.NET1.1 + C#では どのようにしたらいいのか、どなたかヒントを いただけませんか。 やりたいことは 複数のデジカメ動画を検索し DivXで圧縮し あるルールでファイル名を付け タイムスタンプを変換元ファイルに合わせる という感じです。 「DivXで圧縮し」以外の部分はできています。 よろしくお願いします。
コマンドラインでaviutilを起動する
>>443 DirectShow叩けばいいんじゃないか?
>>444 ,445
どっちがやりやすいか調べて試してみます。
ありがとうございました。
文字列のリストに対して、リスト内の個々の要素の文字列の編集を行う処理を考えています。 更に、全てのリスト内の文字列の編集処理後、メインの関数を抜けたいと考えています。 リストにしているのは文字列の順番を記憶したいからです。 以下のThreadMethodように引数を持つスレッドを作成したい場合、 ThreadPoolを使うと良いそうなのですが、joinのような待ちの実現方法が分かりませんでした。 ThreadPoolでの待ちの実現について、また、ThreadPoolを使わなくてもできるよ。そもそもリストじゃなくてこうすれば効率が良い!など、アドバイスいただければと思います。 public bool MainMethod( .... ) { ArrayList arrayList = new ArrayList(); // (仮) // arrayListの個々の要素に文字列を生成する処理 WaitCallback waitCallback = new WaitCallback(ThreadMethod);// コールバック作成 // arrayList要素数分ループ for(int i = 0;i < arrayList.Count; i++) { // スレッドでarrayListの文字を更に改変する処理 ThreadPool.QueueUserWorkItem(waitCallback, arrayList[i]); } // 待ち return true; } public void ThreadMethod(object aStr) { // aStrの編集 }
ThreadPoolは使ったことないが、なんで別スレッドにする必要があるの? joinするんだったらメインスレッドがブロックされるから別スレッドにする意味がないのでは?
まず、リストのアイテム編集ごときになぜ別スレッドを使いたいのか分からない。 だって終わるまで待ちたいんでしょ? どうしてもスレッド使いたいなら、 Thread.Startで引数にArrayListそのものを渡してそっちでループしたら? あと、.net2.0ならList<string>使った方がいいんじゃ?
ThreadPoolは挙動が信用できないので自分で同じような仕組みを作り、Jobとして渡している。 Jobについては下位Jobを持つことができ親Jobは下位Jobがすべて終わった場合にそのJobが終わったことになる。
誰と喋ってるんですか?
452 :
450 :2006/11/21(火) 21:48:54
独り言、気にするな。
454 :
450 :2006/11/21(火) 22:02:40
∧∧ /⌒ヽ) i三 ∪ ○三 | (/~∪ 三三 三三 三三三
SplitContainerでVerticalで使用しています。 通常右の部分は必要ないので左の部分がFormいっぱいに表示されていて なんらかのトリガでFormの半分づつに左右が表示されるようにするには どうしたらいいですか? C#
幅を計算して SplitterDistance だったかに代入すればいいじゃん
いらんときは左のコントロールを直接フォームに載せとけばいいんじゃね
Panel1Collapsedとかなかったか?
エクリプスでC#を使えるようにする方法を教えてください できるとききました
言った奴に聞けよ
>>459 やめとけ。えくりぷすなんて、java以外で役にややない。
C#つか、マネージコードでLWやMAYA、3DSといったヘビーなCGソフトって作れるの? 動けばイイ程度のものなら俺でも作れるが、数十万、数百万出して購入するユーザを 納得させるのは難しそう
何でそういう速度がきわめて重視されるところにマネージコード持ってくるかな(´-`).。oO(・・・・・・・・・) でも速度以外の面では遜色ないもの作れると思うよ。
466 :
デフォルトの名無しさん :2006/11/22(水) 07:57:36
CPUの速さが現在の2倍になればおk
468 :
デフォルトの名無しさん :2006/11/22(水) 08:20:09
>>464 の質問は、
20年前のプログラマに
「C言語つか、コンパイラで吐き出したコードでファミコンのアクションゲームって作れるの?」
と質問するのと変わらん。
いつの時代もソフトがハードを牽引する
470 :
デフォルトの名無しさん :2006/11/22(水) 10:03:42
>>464-465 いや、本当に速度が必要なところだけC++で書いて、P/Invokeすれば良いだけの
話だろ。
確かに、グラフィックス関係だと、テクスチャのような大量のデータをハンドリングしないといけないので、
それを、マネージドとアンマネージドの間で橋渡しするあたりで、工夫がいると思うけど。
472 :
447 :2006/11/22(水) 12:15:13
>>448-450 ありがとうございます。
リストの先頭から順番に処理するとかなり時間かかったので、
同時にスタートさせれば多少なり早く処理がおわるかなぁ。とか思ってました。
とりあえずスレッドは意味がないそうなのでやめて、Listでやってみます。
>>472 とりあえずコンピュータの仕組みをもうちょっと理解したほうがいいと思う
474 :
デフォルトの名無しさん :2006/11/22(水) 15:20:08
475 :
474 :2006/11/22(水) 15:36:25
今までは、こんなバグでなかったのに急にでました。 今日の朝は、ちゃんとオートメーションできてました。 今日の午後から上のバグがでるようになりました。 お昼には、パソコンにインストールされていた ノートンアンチウィルスをアンインストールしました。 出来事といったら、このくらいです。 word2003を再インストールしてもなおりませんでした。 WindowsXPsp2 Word2003
wordへの参照をいっかい削除して、もう一回参照に入れてみては?
Rectangle(0, 0, 640, 480) のサイズは641*481ですか?
ちがいます
それくらい試せよw
じゃなくてRectangle(0, 0, 640, 480)の四角は(0, 0)-(639, 479)ですか?
481 :
474 :2006/11/22(水) 16:44:02
>>476 レスありがとう。
確かにwordへの参照をやり直せばうまくいくような気がしたので、
上で投稿する前に、ご指摘のことは既に試しておりました。
そして、結果は芳しくありませんでした。
.NETアプリ→ネイティブアプリ変換ツールを作成したけど要る?
いらない
ListViewGroup ってオーナードローできませんか
だな
>>485 GetDCしてデバコンに自前で描画すればイイだけのことでは?
>>485 ListViewGroup ってコントロールじゃないし
ListViewのオーナー泥でアイテムのグループみて自前でやる。
DrawItem イベントはあるけど DrawGroup イベントがないのよ
ToolStripMenuItem の派生クラスをデザイナで貼り付けるときに DesignMode プロパティが true にならない現象がおきます [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.All)] public class ToolStripMenuItemDerived : ToolStripMenuItem{ public ToolStripMenuItemDerived() : base(){ base.Text = "aaa"; if (base.DesignMode) return; base.Text = "bbb"; } } 上記の ToolStripMenuItemDerived をデザイナで貼り付けたときには aaa と表示されずに bbb と表示されてしまいます 仕方がないので base.Text = "aaa"; #if ! DEBUG base.Text = "bbb"; #endif としデザイナを使うときはコンフィギュレーションを Debug にしています もっとスマートな方法はないものでしょうか
必要な場合もあるでしょ。 LicenseManager.CurrentContext.UsageMode == LicenseUsageMode.Designtimeとかでうまくいかない?
3.0のスケジュールについて情報ないですか?
C#3.0のことだとしてOrcasと一緒に出すとMSは主張
ここにかいてるんだからC#3.0のことでしょ。でOrcasいつ?
497 :
デフォルトの名無しさん :2006/11/24(金) 14:32:01
protected TcpListener _tcpListener; // TCPリスナーを生成する _tcpListener = new TcpListener(ip, portnb); // TCPリスナーを開く _tcpListener.Start(); // 保留中の接続要求があるかどうかを確認する if (_tcpListener.Pending() == true) { // クライアントからの接続要求を受け入れる _tcpClient = _tcpListener.AcceptTcpClient(); // KeepAliveの設定 _tcpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 30000); } 上記のようにサーバー側でクライアントの接続を受け入れて TCPにて伝文の送受信を行っています。 中継装置(HUB)を経由して接続している時、クライアントのLANケーブル が抜けた(切断)されたことを検出する為、KeepAliveの機能を用いる 方向で実装していますが・・・検出できませんでした。 おそらくKeepAliveの使い方が悪いと思うのですが・・・どなたかご存知ないでしょうか?
Reflectionをつかうとprivateだろうがinternalだろうが値を設定・取得できるってことでOKですか?
499 :
デフォルトの名無しさん :2006/11/24(金) 18:24:14
>>497 です。自己解決しますた。
byte[] inBuffer = new byte[12];
BitConverter.GetBytes(1).CopyTo(inBuffer, 0); // スイッチ
BitConverter.GetBytes(30000).CopyTo(inBuffer, 4); // Interval
_tcpClient.Client.IOControl(IOControlCode.KeepAliveValues, inBuffer, null);
上記の方法で30秒後に切断を検出できました。
DOS窓のnetstatでもidolになりました。
ListやDictionaryなどのGeneric型のタイプを持ってくる場合、FullNameはどのように指定したらいいんでしょう?
>>500 typeof(List<>).FullName: System.Collections.Generic.List`1
typeof(Dictionary<,>).FullName: System.Collections.Generic.Dictionary`2
502 :
デフォルトの名無しさん :2006/11/24(金) 19:20:54
DataRowのインスタンスが2つあって、これらが等しいか(各列の値がすべて等しいか) を調べるにはどうすればよいのでしょう? DataTableに、DataRowインスタンスを追加するときに、同じ内容のものがあった場合は、 追加しない、という処理を行おうと思ってます。
各列の値がすべて等しいか調べればいいんじゃね?
504 :
502 :2006/11/24(金) 22:02:49
その方法しかないんですかね。。? とりあえず、Rows[n].ItemArrayを一個一個しらべて すべて同じだったら等しい という方法ではできましたけど、 ItemArrayを配列として比較するとダメなんですよね。 RowとRowのオブジェクト同士を比較できる便利な関数とかってないものか。
どういたしまむこ。
>>504 その、「RowとRowのオブジェクト同士を比較できる便利な関数」というのも
結局同じことをするんじゃね?
それとも、Cellの内容が変わるたびに中身を構造体にでも突っ込んで
隠しCellにGetHashCodeでハッシュもっておくとかしたら?
面倒くさそうだけど。
DataTable.Constraintsに全列を含んだUniqueConstraintを追加して Rows.AddしたときにConstraintExceptionをcatchするとか
C#で遊び始めて三ヶ月の者です。 質問なのですが、VSで言うプロパティウインドウのようなものを作ることが出来る コントロールなどは既にあるのでしょうか? 今やりたい事は、2列のテーブルで各プロパティを入力するんですが、 行によってコンボボックスに設定出来るようにしたいんです。 やはり自作するしかないのでしょうか?
>>509 System.Windows.Forms.PropertyGrid
FAQ中のFAQ。適当にググって
511 :
デフォルトの名無しさん :2006/11/24(金) 23:17:39
Win32APIに詳しいお兄さんのいるスレにでも行ったほうがいいんじゃね?
>>511 レジストリの値書き換えてシェルに更新メッセージ送って、
終了時にレジストリ戻す……という荒技をどこかで見た希ガス
そんなプログラムは使いたくないな・・・
禿同。途中で死んだらそのままなんだろう?
516 :
デフォルトの名無しさん :2006/11/24(金) 23:45:44
レジストリなんて、なくなればいいのに・・・諸悪の根源
レジストリそのものはかなり優秀なデータベースなんだがな。
518 :
デフォルトの名無しさん :2006/11/25(土) 00:06:32
>>514 おいらもこんなPG作りたくないっす
でもね・・・・。
レジストリはいじりたくないですね
APIスレに行ってみます
レジストリを肥大化させてHDDをパッツンパッツンにするソフトでも作るか
>>511 SystemParametersInfo
で制御すれば
内部的にレジストリいじくるんでしょ
>>510 あったんですか……気付きませんでしたorz
ありがとうございました!
524 :
デフォルトの名無しさん :2006/11/25(土) 13:24:39
ラジオボタンじゃなくてコンボボックスにしよう、いやリストボックスにしよう、やっぱラジオボタンがよかったかな… このたびにソース修正するのがめんどくさいなー どうすればいいですか?
とりあえず全部つっこんで enable/disableで使わない方を消しておけ
IDE使え
井出らっきょ?
>>524 計画を立ててからフォームを組むようにする。
529 :
デフォルトの名無しさん :2006/11/25(土) 14:52:51
dataGridView1_CellDoubleClick(sender s, DataGridViewCellEventArgs e) (DataGridView上をダブルクリックした時のイベント) をコンテキストメニューをクリックした所から呼び出したいんだけど、 どうすればいいですか? private void メニューをクリックToolStripMenuItem_Click(object sender, EventArgs e) { this.dataGridView1_CellDoubleClick(this,DataGridViewCellEventArgs.Empty); } とか無理やりDataGridViewCellEventArgs.Emptyを引数にとってもダメでした。 private void メニューをクリックToolStripMenuItem_Click(object sender, EventArgs e) { this.dataGridView1_CellDoubleClick(this,DataGridViewCellEventArgs.Empty); } とか無理やりDataGridViewCellEventArgs.Emptyを引数にとってもダメでした。
530 :
デフォルトの名無しさん :2006/11/25(土) 16:05:51
>>530 そのPaint.NETはこのスレだかで知ったんだけど、
使ってみると意外といいね。
>>529 イベントプロパティを呼び出すのは無理。
>>529 何がダメなのか分からんが。
普通はメソッド化して両方でそれを呼ぶ
Paint.NETはMITだかどっかの大学生が中心となって作ったアプリじゃなかったっけ?
GIMPよりかは使えるよ
なぜGIMPと比較するかねえw あれは失敗だったと開発者も認めているのにw
え!?、開発者がそんなこといってるの?
541 :
474 :2006/11/26(日) 17:56:33
お願いします。
542 :
474 :2006/11/26(日) 18:02:33
更地のWindowsを用意してそこにWord2003をインストールしてみれば?
544 :
474 :2006/11/26(日) 18:21:31
>>544 それができるってことは次はもちろん何をうpすればいいかわかってるだろうな
画像壊れてないか? 俺だけなのか?
ど、どうしろと
C#のバグじゃないですかね・・・? まだできたてほやほやの言語だし可能性はある 詳細と再現方法をテキストで作ってMSに報告するとよろし
うん
>>544 8007007eが出てるってことは、何かがCLSIDの関連付けあたりを破壊したんだろう。
セキュリティソフトをアンインスコしてから、Officeの自動修復を試してみるとどうじゃろう。
551 :
474 :2006/11/26(日) 18:36:35
いま、regeditで該当するCLSIDを眺めてる・・・ でもどうしようもない・・・ みんな、コメントありがとう!! 明日の朝までにはなおさんと!!!!
552 :
474 :2006/11/26(日) 18:40:46
>>550 コメントありがとう。
僕も、ノートンアンチウィルスのアンインストールが
原因だったと思っています。
このアンインストールの前後に、今回の不具合が発生しているので。
でも、このノートンアンチウィルスを
アンインストールした後に、
WORD2003は再インストールしましたし、
修復っていうのも何度か渡来しております。
でも、そういえば、2003をインストールする前に
予めインストールしておいた97には、
今回は、一切何もふれませんでした。
ひょっとすると、97も完全にアンインストールして
(というか、97はもうPCにないよな気がします。)
553 :
474 :2006/11/26(日) 18:42:47
HKEY_CLASSES_ROOT\CLSID\{000209FF-0000-0000-C000-000000000046} というCLSIDを削除してWORD2003をアンインストールし、 又は、WORD2003をアンインストールしてから、このCLSIDを手動で削除し、 そのあとに、再度、WORD2003をインストールしなおせば直るかなぁ・・・・。
554 :
474 :2006/11/26(日) 18:45:24
555 :
474 :2006/11/26(日) 18:46:21
>>545 レスありがとうございます。
えっと、次は何をうpすればよろしいでしょうか。
MSに聞くのが一番手っ取り早い
558 :
474 :2006/11/26(日) 18:50:34
>>557 いま、試しています。
WORD2003を完全アンインストールしました。
559 :
474 :2006/11/26(日) 18:51:26
HKEY_CLASSES_ROOT\CLSID\{000209FF-0000-0000-C000-000000000046} WORD2003をアンインストールしたら このCLSIDは、併せて削除されていました。
560 :
474 :2006/11/26(日) 18:52:52
C:\Documents and Settings\Administrator\Application Data\Microsoft このフォルダにあるテンプレートもバックアップした上で削除しておきました。 それでは、改めてインストールしてみます。 暖かいご支援、ありがとうございmす。
何でこんなにスレが汚れてる?
明らかにスレ違いな質問に親切に答えちゃってるからだろう。
>>562 答えてるっつーかからかってるように見える
564 :
デフォルトの名無しさん :2006/11/26(日) 22:13:23
インスタンス生成して、もういらなくなったからメモリ解放したい場合って Dispose()でいいんですか? Disposeした後にそのインスタンスのプロパティに普通にアクセスできるし変更できて 解放されていないようなんですけど。 Disposeした後、解放のタイミングはCLRにおまかせで、 今すぐメモリ解放ということは不可能なんですか?
>Disposeした後にそのインスタンスのプロパティに普通にアクセスできるし変更できて >解放されていないようなんですけど そういうことはやめましょう。 null代入してほっとけばGCされるのでほっとけ。
568 :
474 :2006/11/26(日) 22:41:42
スレチでしょうか…
>>565 メモリ使用量が減っていないのでまだ残ってんじゃないの?と思い
ためしにやってみました。null代入した後だと流石にあとかたもなくなってますね。
メモリ解放はdisposeと同様に即座にはされないようですけど。
>>566 いや、C#君ですよ。低レベルすぎてスレ違い?
>>567 よんだけどそれ回答になってないでしょ。
ずばり、インスタンスが使用しているメモリ空間を即解放するにはどうすれば良いか?
という問いの答えは、マネージドコードでは不可能 なんですかね。
>>565 nullを代入することに何の意味があるんだ?
> インスタンスが使用しているメモリ空間を即解放 んなこといってるからC++使いだって言われるんじゃよー > マネージドコードでは不可能 GC対象メモリであれば強制GCを呼べばいいよ。System.GCだっけ。 でも実際に行われるかどうかは知らない。 メモリ使用量がタスクマネージャのそれだとすれば、不可能だねえ。 ヒープはすぐにコンパクト化されるわけではないし。
頭の中のすべては値型にでもなってるんじゃマイカ?
つかなんのための「マネージド」だと思ってんだろ
C#では、メモリ管理はGCにまかせましょう。(つまりメモリ解放のタイミングは予測不可。それでいい。) Disposeとメモリ解放は全く関係ありません。 Disposeが解放するのはアンマネージドリソースです。
>>570 GCは確保したオブジェクトが、どこかから参照されているかどうかで
GC対象かどうか判断してるんじゃなかったっけ?
null代入して参照数をゼロにしないと、プログラム終了まで
インスタンスメモリは確保されっぱなしの可能性がある。
>>569 >それが単なるメモリ領域なら、使用可能なメモリ容量に余裕がある限り、
>回収されずに放置されるケースがあってもそれほど問題とはならない
577 :
474 :2006/11/26(日) 23:03:28
誘導お願いします、家に帰れません…
>>577 ぐだぐだやってないでOSからクリーンインスコしろ
>>596 一般的には、弱参照以外の参照を切ってGC.CollectでGC発動
させれば回収される。
Finalizer持っていてかつ、SupressFinalizeされていなければ、
さらにFinalizerの終了を待って、GC.Collectで回収。
ただ、この行為はともにスループットをほぼ確実に落とす。
もっといえば、2.0だとさらに複雑になっていて「正確に」こんな
ところで説明するのは長すぎるかも。「即開放は不可能」というより、
システム側にその権利は譲った(そして最適化の余地を作った)が
正しい。
581 :
474 :2006/11/26(日) 23:07:24
誘導お願いします、家に帰れません…
>>578 スコープから外れない場合があることを忘れずに…
form
>>581 vbsとかからはCreateObjectできんの?
環境依存っぽいからこちら側では解答できません。 スルーします。
クラスのデストラクタはなんに使うですか?
>メモリ使用量が減っていないのでまだ残ってんじゃないの?と思い >ためしにやってみました。null代入した後だと流石にあとかたもなくなってますね。 何言ってんだか
>インスタンスが使用しているメモリ空間を即解放するにはどうすれば良いか? 即開放は必要ないんじゃない?それに即開放が正しいかどうか分からない場合がある。 C++等では開放してはいけないメモリを勝手に開放して困る場合があった。 人間は簡単にへまをする。 GCだとその可能性は低い。
>>589 上に書いてあるように
>インスタンスのプロパティに普通にアクセスできるし変更できて
とあるじゃないか?
>>588 デストラクタはObject.Finalizeのオーバーライドにコンパイルされる。
593 :
474 :2006/11/27(月) 00:03:22
>583 レス、ありがとう。でも、12時過ぎて電源落とされたんで、タクシーで家に帰ることにしました。明日、朝一でまたクライアントのところへ出張いかないとです…なおんなくって怒られるのが目に見えてて鬱です…。
その流れで、nullを代入した後だとあとかたもなくなった この意味が理解できるか?ってか意味不明
>>569 マネージドではどのリソースがどこのメモリ空間を占有しているって概念がないのよ。
fixedしないとポインタが使えないのも、勝手に整理されてメモリ上を動いてしまうから。
Dispose()したオブジェクトは消滅していないのでしょうか?
Dispose だろうがただのメソッドだ
>>596 ならDispose()しないでいいじゃんってこと?
ばかん♪
いやさ消滅させる処理書かないとと構文的にシンメトリーじゃないじゃん?
>>596 Disposeはオブジェクトの持っているアンマネージドリソースを開放するメソッド
>>600 そこまで気になるなら勝手にCでも使っててくれよ。
リセットボタンおせば消滅するよ
Cつかってもfreeが必要ないとか言い出すバカがいるわけで
>>599 じゃ意味が通るように説明してみろ。
null代入したら普通はたどれる元がないんだから
そりゃメンバにはアクセスできんだろうが、
「それはあとかたなく開放されたからだ」
とでも言う気かよ。
GC起こるまで消えてないことには何のかわりもない。
なんらかの方法でメンバにアクセスしたら普通にアクセスできるわな。
>>601 厳密に言えばSystem.Transactionsのような例外も出てきたから
そうではないのだけど、主目的なのは確かだな。
つか一回Disposeが必要なクラス、アンマネージラッパを書いて
みればとてもよくわかるんだけど、それなりに暗黒面なので難しい
のだろうなぁ。
>>607 ふふふ。覚えた言葉をうれしそうに遣いたがる。
きもいよ
>>605 オマイの日本語お勉強スレじゃねーんだよ
611 :
デフォルトの名無しさん :2006/11/27(月) 01:56:43
いきなり横やりスマソ。 mobileでのwebアプリを作るにあたって、DBから値を引っ張ってきてそれを元にmobilelistitemを作成し、selectionlist.items.add(item)してるんだが、通常はこんなことしないんだろうか? itemの横にcheckboxをつけてそこを選択してから確認ボタンを押すとチェックのついた項目だけ何か操作を行う、といったことがしたいんだが…。 selectionlistに動的にitemを加える作業をすると確認ボタンを押したときにエラーが起こる。indexが不正だというエラーが出る。なんでだろう?
>>610 はん、おかしいことにおかしいといったら日本語云々だあ?
たく最近はこんなのばっかだな。
こっちはちゃんと説明してるってのにな。
それともこんな簡単な内容すら理解できん馬鹿だったか。
>>612 まだこんなに煽りに過敏に反応する奴がいるのか。
まだまだ捨てたもんじゃないなwww
615 :
474 :2006/11/27(月) 09:13:01
なおりました。
616 :
474 :2006/11/27(月) 10:16:59
word2003の再インストールを2回、 word2003の修復を3回、 word2003の再インストール直後のofficeのアップデート1回 これで直りました。 特に、「word2003の再インストール直後のofficeのアップデート1回 」が決め手だったような気がしました。 みなさんも、僕と同じエラーが出たときには、 決して、OSの再インスコなどせずに、 word2003の再インスコなどを試してみてください。 それじゃ、さようなら、ごきげんよう、へけけのけ。
>600 一つ質問だが、>600はintとかstringとかを使ってて 「滅させる処理書かないとと構文的にシンメトリーじゃないじゃん」とか 考えてる?
618 :
611 :2006/11/27(月) 12:39:33
>>613 要するにmobile用のフォームでチェックボックスが使いたいんです。そこでselectionlistを使おうと思ったんだけど、普通これってすでに中に入るitemが決まってるもんじゃん?例えば男と女を選択させるみたいな。
でも今回はそうじゃなくてDBからとってきたものにチェックボックスをつけて選択させたいのよ。
Listviewのスクロール位置を取得する事は可能でしょうか? 具体的に言えば、リストを二つ並べて、右側のリストをスクロールさせた際に、 左側のリストも連動してスクロールするようなプログラムを作りたいのですが… WndProcからスクロールイベントを取得する事はできたのですが、そこで行き詰ってしまいましたm(_ _)m
C#3.0は来年末以降らしい(´・ω・`)
>>619 インデックス取るだけならLVM_GETTOPINDEX投げるほうが速いかもね。
SortedDictionary<string,int> m_dic; でKeyの長さでソートするようにSortedDictionary<string,int>のコンストラクタに指定したいんですけど どうすればいいですか?
624 :
デフォルトの名無しさん :2006/11/27(月) 22:52:12
m_ なんてVC++を使っているように思えるが、そんな人にする質問にはとても 思えん
IComparer<string> を実装させたクラスを定義すれば良いんだよ
ラクダ式ってどうなったの?
普通にメソッドのパラメータとかで使われてるぞ 後は private なインスタンスフィールド辺りだな
どうなったって訊かれてもなあ。 CLRはフィールドとメソッドの引数が小ラクダ式で、その他は大ラクダ式になってるが。
おれマルボロのほうが好きだぜ?
俺は巨乳好き
System.Net.Mail.SmtpClientのSendAsyncメソッドなのですが、ヘルプを読むと、 >SmtpException >SMTP サーバーへの接続に失敗しました。 >または >認証に失敗しました。 >または >操作がタイムアウトしました。 とあります。 認証失敗等はともかく、このメソッドでタイムアウトが原因でこの例外が発生することはあり得るのでしょうか?
Windows Formsのボタンからバッチ処理を別スレッドで走らせるんですが、 別スレッドで起きた冷害はボタン(元スレ)のcatchでは処理できないですよね。 別スレッドの例外をフォーム側で処理したい(メッセージボックスを出すとか) のですが、どうしたらいいですか?
>>633 Application.ThreadException
VisualStudioのようなインテリセンスを持つエディタを実装したいのですが これを容易にするコントロールなどは標準で提供されているのでしょうか?
>>634 なんでもそれで対応出来ると思ってんのか?
>>633 スレッド内で発生した例外はそのスレッドでcatchする。
必要なら UI スレッド側のフォームのメソッドをinvokeするとかしてユーザに通知する。
処理完了の通知と何ら変わるトコないですよ。
bool受け取るDisposeは不要だと思うのですが
>>638 ユーザはtrueを渡して、ランタイムライブラリはfalseを渡すことになっている。
Il offre sa confiance et son amour.
AxWebBrowserのBeforeNavigate2でpostデータ取得したいんだけど postDataってどーやれば文字列型に変換できますか?
string s = null; if(e.postData != null) { s = System.Text.Encoding.ASCII.GetString((byte[])e.postData); } てな具合で文字列に変換できる
>>641 642に加えてmime-encodingかURLEncodeかされてると思うんで、
そいつをdecodeして素のbyte[]にしたうえで、適切なencodingで
GetStringする。
>>642 ,643
641です
ありがとうございます
今のところ、アルファベットと数字だけなので642の方法でうまくいきました
日本語使うようになったら643の方法にトライします
>>645 俺はこういう風に理解した。
----
interface IHogeFactory
{
IHoge CreateInstance();
}
static class HogeCatalog
{
private static Dictonary<Type, IHogeFactory> catalog = new Dictonary<Type, IHogeFactory>();
public static IHoge CreateInstance( Type type )
{
return catalog[type].CreateInstance();
}
public static void Regitster( Type type, IHogeFactory factory ) {
catalog[type] = factory;
}
}
class HogeA: IHoge { }
class HogeFactoryA : IHogeFactory
{
public static HogeFactoryA() { HogeCatalog.Register( typeof(HogeA), new HogeFactoryA(); }
public IHoge CreateInstance() { return new HogeA(); }
}
>>638 ファイナライザでは実行順序が不定のため他のマネージ参照に
触ってはいけないから、ユーザーコードから呼び出されたDisposeと
ファイナライザから呼び出されたDipsoseで処理を分ける必要がある。
C++/CLIでもデストラクタ、ファイナライザはこのパターンを利用して
ILを生成している。雑談だが。
最近、C#をはじめたのですが困っています。 一つのFormで2つのBackgroundWorkerをつかっているのですが、 Formでの処理が重ならないように、どこかで同期させたいのですが、 タイミングは手動でとるしかないのでしょうか? 手動でとるにはどのような方法がありますか? ManualResetEvent などをうまく使うのでしょうか? どなたか教えてもらえませんか?
>>646 その程度ならこれくらいでいいんじゃねーかな。
IHoge CreateInstance<T>() where T : IHoge, new()
{
return new T();
}
>>649 Tをハードコーディングできるなら、直接newするだろ
>>649 わろた。
newって書くのとかわんねー
ちなみに
Activator.CteateInstance<T>()
てのが標準であるぞw
そもそも BackgroundWorker の(GUI に触れる)イベントでは 処理はメインスレッドで行われるので同時にってことはあり得ない
インターフェイスはなんに使うですぅ?
インターフェイスに使う
C#でメモリマップト(File Mappingモード)は使えますか? 使えるならその方法を教えてください
>>654 翡翠石よ
クラスを継承させたりした場合で、必ず呼び出してほしい
メソッドがある場合に、インターフェースを入れると、
コンパイラが警告を入れてくれる。
ピンボケ
warota
>>655 多重継承の代わりじゃないのかな?くるみちゃん
>>656 Microsoft.Win32.NativeMethods.CreateFileMappingを参考に自前でDllImport汁
663 :
デフォルトの名無しさん :2006/11/29(水) 01:19:39
>>635 やめておけ
エディタって何の編集するするものか知らんが
テキストエディタは相当難しい。
3Dグラフィックのほうがはるかに簡単。
つか、.NETで実用的なテキストエディタを作ることは不可能と思って
間違いない。
user.confing の保存場所なんなんだよーう、ちくしょう SettingProvider から継承して作れって・・・ LocalFileSettingsProvider のタコ!!! ・・・愚痴でした。 みんなは、どうやってる? アプリケーションの設定保存
レジストリ
当然脳ミソ
アプリケーションの設定を保存する
http://dobon.net/vb/dotnet/programing/storeappsettings.html 上のサイトで紹介されているアプリケーションの設定を保持するクラスを、”俺”ライブラリに追加しようとして難儀しています。
各々の静的メソッドとシングルトンであることを基本クラスで定義しておき、これを継承するクラスでシリアライズするプロパティを追加したいのです。
試行錯誤してみましたが、「静的メソッドとシングルトンであること」を基本クラスでうまく定義できなくて行き詰っています。
最近ようやくOOPを意識しはじめたので的外れな質問かもしれませんが、指針についてアドバイス頂ければと思います。
つーかシングルトンクラスを継承だと? その時点で破綻してないか?
>>671 Orz
恥の書き捨てで伺いますが、それなら継承後のクラスをシングルトンにするのは如何なものなのでしょうか。
でも、それだと当初の目論見から外れてめんどうになりそうだなぁ。
>>672 その程度のシングルトンなら
class MyClass {
static MyClass _cur = new MyClass();
static public MyClass Current {
get { return _cur; }
}
}
でいいんじゃないか?
何のためにがやりたいのか日本語で普通に説明してみて。
>>673 >>670 のURLを参考に、「アプリの設定を保持するためのクラス」を作りました。
シリアライズしたいオブジェクトをプロパティに持たせて使います。
シングルトンなのは「設定が複数できるとマズいから」です。
それを使ってみて便利だったので、シリアライズ用のメソッドと、保存する値を書き込むプロパティを別個のクラスにしたいなと思いました。
ここまで書いておもったのだけど、シリアライズ用のメソッドがstaticである必要は特に無いのかもしれません。
派生したオブジェクトについてはインスタンスが複数できるとマズいけど、
>>673 で頂いたような手法で良いのかも…。
検討してみまふ。どうもありがとうございました。
こういうとき、C#3.0ならExtension Methodを使うようになるんだろうな。
VSからrichTextBoxにコピペして気付いたけど VSってRTFでコピーできるんだね。 色がついてて驚いた。
677 :
664 :2006/11/29(水) 20:46:21
ちなみに俺は670ではありません。
今まで俺Setting的 Singleton 使ってたけど、
.NET Framework 2.0 での System.Configuration.ApplicationSetting が用意されてるから
わざわざ自分でつくるのは、すでに「車輪の再発明」的かな、と思ったです。
Settings.cs のコンストラクタに、this.Upgrade() 入れておけば
バージョンアップの際、結構自動で管理してくれるみたいだし。
ただ、デフォルトの LocalFileSettingsProvider がタコだなーと
バージョンアップした時の、以前の user.config の扱い次第では
自分で Provider 実装か、LocalFileSettingProvider か、
そこまではよくわかってません。
ttp://msdn2.microsoft.com/ja-jp/library/ms181001 (vs.80).aspx
# Mono を意識するなら、現時点では
# 俺Setting になるから、これがベストかどうかはわからない
678 :
656 :2006/11/29(水) 21:00:40
>>662 ありがとう。やっぱりWin32API使うしかないんですかー。
その方法使います。どもども
679 :
645 :2006/11/29(水) 21:17:51
>>646 レスが遅れて申し訳ありません。補完して頂き大変参考になりました。m(_ _)m
自分は2003なので、多少修正したのと返すクラスがシングルトンでもOKなように
改造しました。一応載せますです。
public interface IHoge
{
void ShowMessage(string str);
}
public interface IHogeFactory
{
IHoge CreateInstance();
}
public sealed class HogeCatalog
{
private static Hashtable catalog = new Hashtable();
public static IHoge CreateInstance( string key )
{
return ((IHogeFactory)catalog[key]).CreateInstance();
}
public static void Register( string key, IHogeFactory factory )
{
catalog[key] = factory;
}
private HogeCatalog(){}
}
public sealed class HogeFactoryA : IHogeFactory { public static void Register() { HogeCatalog.Register( "A", new HogeFactoryA()); } public IHoge CreateInstance() { return HogeA.CreateInstance(); } private HogeFactoryA(){} } sealed class HogeA: IHoge { private static HogeA myclass = new HogeA(); public void ShowMessage(string str) { Console.WriteLine(str); } public static HogeA CreateInstance() { return myclass; } private HogeA(){} } [STAThread] static void Main() { HogeFactoryA.Register(); IHoge hoge = HogeCatalog.CreateInstance("A"); hoge.ShowMessage("ぬるぽ"); }
Visual C# 2005のフリー版をつかってるんですが、 これってEclipseのような自動インポート機能ってないのでしょうか? いちいち using を自分で書いていかなきゃだめっすか?
スマートタグで using を追加してくれるでしょ
自分で発見shift+alt+F10ですか。
>>684 それだと
using
追加知れくれませんでした。
eclipseなら追加してくれるんだけど・・。
eclipseにしとけ
VSは最初にusingを記述するスタイルじゃなくて、 最初に使うときに型名を明示的に書かせてusingに追加させるスタイルなんだね
パスで指定された形にたいしてぼかした影のようなものをつけたいんですがいまいちわかりません。 パスから鋭角を丸める→パスグラディエントブラシ?
>>685 ReSharperっつーアドオンいれるとQuickFixでusingの追加できる。
けど、アドオンってことでVS2005 Expressだと無理で、ReShaperも有料だ。
ReSharperいれると、リファクタリングもeclipseレベルにまで拡張される。
ソース今印刷したんだけど、印刷のときは表示のときのカラー設定とか一切無視するのね・・・ なんつーか( ゚Д゚)<氏ね!
>>690 印刷と表示と色の設定で別々になってるよ
>>692 画面でみるときには黒背景にしてるやつってたまにいるぞ。
うちの会社にも1人いる。
>>692 テキストエディタの設定をコピーする機能があるから問題なし
ガベレージコレクションは無効にできないの?
仮に無効にできたとしたらメモリ開放できないぞ。
ガベレージじゃなくてガベージだぞ。
白地の液晶画面だと目が悪くなるよ…
蛍光灯凝視しているようなもの。
黒地に白がベター
印刷は別設定できるほうが絶対優れていると思うが、
>>692 みたいに
ねじ曲がった奴もいるんだな。
黒地に白は見辛くて困る 薄緑地に黒が良い
えくりぷちゅは色そのままだお・・・あほかと
スレ違いではあるが 当方 CRT で背景 rgb(215,215,215) 結構見易い
703 :
デフォルトの名無しさん :2006/12/01(金) 16:05:00
データベース(PostgreSQL)を参照するデスクトップアプリを作っています。 ユーザIDとパスワードを入力して、ログオンする機能をつけたいのですが、作り方の定石があれば教えてください。ID/Passは両方ともサーバ側で認証を行います。 ちなみに前身のAccessアプリではID/Passテーブルというものが設けられていました。
sql serverのだったら本があるんだがな。 ODBC接続の接続文字列変えるだけでいいのかも。
以前にPropertyGridの件で書き込んだ者です。 PropertyGridで、項目を展開できるようにしたはいいのですが、その数値変化した時にイベント取得が出来ません。 基本的に、位置は関係なく起こりさえすればいいのですが、ABCの値変化はMyClassChangedが発生しません。 結果、ABC変化は取得できない状況です。この取得は難しいでしょうか? ソースはこんな感じです。
[TypeConverter(typeof(CustomClassConverter))] public Class Class1 {private CustomClass myClass; public event EventHandler MyClassChanged; public Class1() { myClass.DataChanged += new EventHandler(Triggar);} [DefaultValue(0,0,0)] public CustomClass MyClass {get{return myClass;} set{ myClass = value; Triggar(); }} public void Triggar() {if(MyClassChanged != null) MyClassChanged(this,EventArgs.Empty);}} public Class CustomClass {private int a,b,c; public event EventHandler DataChanged; public CustomClass(){a = 0; b = 0; c = 0;} public int A { get{return a;} set{a = value; Triggar(); } public int B { get{return b;} set{b = value; Triggar();}} public int C { get{return c;} set{c = value; Triggar(); }} public void Triggar() {if(DataChanged != null) DataChanged(this,EventArgs.Empty);} }
こんなに汚いソースは久しぶりだ
Class1 のコンストラクタを呼んだらヌルリの予感
[TypeConverter(typeof(CustomClassConverter))] public class Class1{ private CustomClass myClass; public event EventHandler MyClassChanged; public Class1(){ myClass.DataChanged += new EventHandler(Triggar); } [DefaultValue(0,0,0)] public CustomClass MyClass{ get{return myClass;} set{myClass = value; Triggar();} } public void Triggar(){ if(MyClassChanged != null) MyClassChanged(this,EventArgs.Empty); } } public class CustomClass{ private int a,b,c; public event EventHandler DataChanged; public CustomClass(){ a = 0; b = 0; c = 0; } public int A{ get{return a;} set{a = value; Triggar(); } public int B{ get{return b;} set{b = value; Triggar();} } public int C{ get{return c;} set{c = value; Triggar();} } public void Triggar(){ if(DataChanged != null) DataChanged(this,EventArgs.Empty); } }
もう、一体何がしたいんだと子一時間(ry
せめてコンパイル通るコードを貼ってくれよ。もう嫌がらせのレベルだろ
712 :
705 :2006/12/01(金) 22:17:51
>>707 スミマセン、携帯手打ちな上に改行規制でかなり削りました。
>>708 申し訳ないですが、Class1()内でnewを脳内補完していただけますよう。
ぱっと見問題外のコードだな。どこから突っ込めばいいのか。 とりあえずここでやるには長すぎる。
さっさとパケ死しろ
エラー1デリゲート 'System.EventHandler' に一致する 'Triggar' のオーバーロードはありません。
最大の問題はtrigg'a'rかな
本当にスミマセン、粗がありすぎて……。 とりあえずこちらではコンパイル通っているので、基本的なエラーは目を瞑って下さい。 CustomClassでA、B、Cという値が設定できる状態で、 それをまとめたものとして"0,0,0"というstringをCustomClassのABCに代入出来るように、 ExpandableObjectConverterを継承したCustomClassConverterで変換してます。 CustomClassの各ABCset{}の時にイベントを発生させる形で、 それをさらにClass1で受け取って発生させるつもりでした。 しかしながら、一度Class1のプロパティとしてMyClassの値を変化させると、 DataChangedイベントは取得されなくなります。 どうやらMyClassで設定した後はDataChanged==nullとなってしまうようで、 これがなぜだか分かりません。 何をすれば再びABCの変化を取得出来るのでしょうか?
MyClass { set; } で別インスタンスにしてるからだろ イベント登録しなおせ
TreeViewに動的に親や子を追加するにはどうすればいいですか? また、親や子に名前以外のデータ(構造体やクラス)をもたせることって出来ますか?
720 :
デフォルトの名無しさん :2006/12/01(金) 23:42:19
できません
できるにきまってるだろwwww
両方できないのですか?
TreeNodeCollection.Add Tag は .NET 2.0 以降だっけ? それ以前なら TreeNode の派生クラス作るなり外部で Hashtable/Dictionary<TreeNode, Hoge>使うなり
ふつう黒に緑じゃないか?
デリゲートの意味がわからん・・・・
関数ポインタのようなもの
デリゲートに好きして
使ったことないからピンとこないです。 つかなんでserialPostの受信ハンドラから同じクラス内の コントロールハンドラを呼べないんだろ
>>725 意味なら「委譲」。
.NETの機能のことなら、「型」の一種(delegate型)。
その型のインスタンスは、オブジェクト、または静的な「メソッド」へ
の参照を保持して呼び出すことが可能な実体。
型の一種として定義されるのでタイプセーフ。ポインタではなく
呼び出しのための実体として抽象化されているので、オブジェクトのメソッド、
静的なメソッド区別なく呼び出し可能。
別の機能である「イベント」と関連性が深い。
さらに言語機能として、C# 2.0で匿名メソッドが追加。これにより、「手続き」を
持ち運びできるように「見せ掛ける」機能にもなるように。BCLのコレクションク
ラスにもこの機能の使用を前提とした設計が見受けられるように。
3.0になるとさらに(ry
そんなに言わなくても。 脳内補完で充分通るソースだと思うのですが・・ スペルが変、名前おかしい(インスタンスとクラスの区別ができていない?etc)、デリゲートの型があわない。 DefaultValueAttributeの使い方があわない、Frameworkの初期化ルールがわかっていないかも? インスタンスとイベント(デリゲート)の関係が怪しいところ。くらい? myClassオブジェクトに関するあらゆる変更を監視して、イベントMyClassChangedを呼び出すようにしたいはずなので フィールドが変更されたときもイベントを購読(subscribe)するようにするとよいと思われ。 public CustomClass MyClass {get{return myClass;} set{ if(myClass==value){return;} if(myClass!=null){ myClass -= new EventHandler(value_OnDataChanged);} value += new EventHandler(value_OnDataChanged);//value_OnDataChangedはEventHandler型メソッド myClass = value; Triggar(); } public Class1(){ this.MyClass = new CustomClass();} } こんなのでよい?
>>725 GenericsのList<T>クラスを使ってみると分かるかも
delegateを引数に取る奴、FindとかForEachとか
>>728 スレッドが違うから。別のスレッドにアクセスするならInvokeしないと。
>>731 TypeConverterがなんでClass1についてるのとか、
TypeConverterの中身はどうやねん(InstanceDescriptorの実装とか)とか、
DataChangedにするよりINotifyProertyChanged使えとか、
そもそもCustomClassはstructでいいやんとか、
class使うならDesignerSerializationVisibilityはContentのにしろよとか、
あーもうきりがない。
だからただ一言問題外と。
private void TreeView1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { Point p = new Point(); p.X = e.X; p.Y = e.Y; ContextMenu1.Show(this,p); } ツリービューを右クリックした時にメニューを表示したいのですが これは間違ってますか?表示されないんですが
if( e.Button == MouseButtons.Right ) { ContextMenu1.Show( this.TreeView1, e.Location ); } あるいは this.TreeView1.ContextMenu = this.ContextMenu1; としておくだけ。
>>735 TypeConverter(typeof(ExpandableObjectConverter))はプロパティグリッドで展開して編集できるようにするためでは
プロパティグリッドにバインディングした奴は
DesignerSerializationVisibilityを特に設定しなくても実オブジェクトのプロパティは変更されると思われ
この場合は特に要らないかと。
structは特性を熟知している人が少ないから使わ(せ)ない派なんですが、あまりよくないのかな?
どうでもいいけど、INotifyProertyChangedを知ったときはちょっとショックだった。
後からこんなクラスあったんだって・・
Frameworkだだっぴろいよね。
>>735 TypeConverterつけるべきはこの場合CustomClassのほうだと思うのだが?
それにCustomClass型のプロパティを使用するとして、これを代入させるのなら
TypeConverterにInstanceDescriptorの変換を定義しないとデザイナがプロパティ
代入時シリアライゼーションできない。直接ExtendableObjectConverterだけでは不可。
方法論としてはDesignerSerializationVisibilityがContentにして、その場合は
プロパティとしてgetのみにする(というかsetがあったら明示指定しないとContentと
デシリアライゼーション&代入とデザイナは区別できないはず、どっちが優先されるか
知らんが)。
または、この実装のように代入も許可するなら、この辺のシリアライゼーションを
きちんと実装した上でさっき誰かが書いたコードのようにイベント登録、解除の処理も
きちんと入れてやる。INotifyPropertyChangedにしたほうがいいが。あるいは代入クラスを
Componentにしてしまうのもありだろう。
ほかには動的なのでDefaultValueの代わりにShouldSerializePropertyの実装に切り替えるとか
ぐらいか。
つーかこの辺まじめに解説するとこのように長くなるっつーの。これでも省きまくっているのだが。
基礎知識ぐらいはつけてから聞いてほしいよ。
>>738 ありがとうございます
しかしe.Locationの定義がありませんと出てしまいました
742 :
740 :2006/12/02(土) 02:04:11
失礼。もう一つ方法追加。 CustomClassをstructに変更。CustomClass用のTypeConverterを実装( stringの双方向変換、InstanceDescriptorへの変換、サブプロパティの許可等)して、 CustomClassに結びつける。InstanceDescriptorの関係から、組み込み型のみ使用 したコンストラクタor静的メソッドの実装あたりも。 ちなみに、これが最も標準的な方法で、使い方も楽。参照型のプロパティで かつImmutableでない型をプロパティに使用し、代入許可するのはかなり異端な方法。 整合性を取るのが大変だからね。
文字列がひとつ入力できるメッセージボックスって標準でありますか?
VB用のInputBox
>>719 です、まだ解らないので質問します
TreeViewの親や子に名前以外のデータ(構造体やクラス)をもたせることって出来ますか?
>>747 ああ、ありどとうございます!
もう一つ質問ですがハッシュテーブルをそのままファイルに書き出すことってできますか?
もちろん見ることではなく、次の起動の時読み込むのが目的です
SoapFormatter やら BinaryFormatter やらなら
デリゲートの正確な説明面倒だよな。 変数にメソッド代入して実行できるなんて適当に言ってみようか…
デリゲートはデリケートな説明が必要だからな
いい加減そのだじゃれ飽きたYO
753 :
デフォルトの名無しさん :2006/12/02(土) 16:28:56
エディタを作っていて、TeraPadのように、行番号と桁数を表すルーラー をつけたいと思うのですが、どのように実装すればいいでしょうか?
Controlを継承して、ひたすら描画する。 C#でかかれたテキストエディタって、どこかにないのかな? かなりP/Invokeを自分でラップすることになると思うんだけど・・
755 :
デフォルトの名無しさん :2006/12/02(土) 17:46:11
DataGridViewで、 SelectionModeにFullRowSelect を設定してるとき、選択されるのは行単位で、SelectedCellsも その行のセルすべてになってるけど、これを本当にクリックして選択してる 1セル(点々で囲まれてるセル)を知るにはどーすればいいでしょう?
全て選択されているが答えじゃないのか?
>>750 C/C++でいうところのの関数ポインタだよというとか。
1メソッドInvokeだけを含むインターフェースだよというとか。
>>755 >これを本当にクリックして選択してる
間違いじゃないかな。
アクティブ≠選択している
DataGridView.CurrentCellAddress あたりじゃないかなと勘で答える。
>>757 関数ポインタ知らない奴結構いるよ…
俺も使ってないし。
761 :
753 :2006/12/02(土) 18:40:31
>>754 ありがとうございます。でも意味が全然分かりません・・・
どこかにソースが転がってないか探してみます。
>>760 そりゃよかった。
適当に答えたけどあたってて良かった。
俺は知識無かったけどMSDN探せば簡単に見つかったよ。
TreeViewをそのままxmlに書き出すのって簡単に出来ますか?
そんなに手間ではない
>>764 そうですか
XmからTreeViewへのサンプルコードはたくさんあるんですが
逆は全く無いので難しいのかと思ってました、もうちょっと探してみます
ありがとうございました
それがわかるんならxml.saveをすればいいものを最初から作るのか。ご苦労な話だな。
>>766 まんまコピーして使っているので仕組みを理解してません
ちょっと改造すればできるんですか?
改造?なんの話だよ。xmlとTreeViewの同期がとれてるんなら xmlの保存だけで事は済むってことだろ。
769 :
デフォルトの名無しさん :2006/12/02(土) 19:55:51
C#で実用的なテキストエディタを作成することは不可能です。
そんなことはない。
771 :
デフォルトの名無しさん :2006/12/02(土) 20:07:36
絶対に不可能です。
確かに実用的なものは作れないでしょうね
>>768 xmlに元々あるデータは保存できるのですが
新しいノードを作ると反映されないのです
粘着はかえれ☆
一言で表すと、メソッド用インターフェースかな?>デリゲート
どちらかというとメソッドそのもののほうに近いだろ。
>>772 不可能化可能かでいったら十中八九可能だと思うよ。
意味がないだけで。
粘着野郎へ 俺は見つけたぞ!! しかもソースまである。 ググレカス!
需要あると思うよ。 テキストエディタ単体としてではなく、テキストエディタコンポーネントとして。
>>779 死ぬほどメソッドがあるコンポーネントだろうけどな。
次はC#でieコンポーネント使わないインターネットブラウザが作れないって言うだろうね
テキストエディタのソースの 目的の場所までたどり着く自信がない。orz
>>778 今まで検索してましたけどありませんでしたから
多分試したやつだと思います
>>779 コンポーネントとして使えればいいんなら C++(/CLI) で作るよ。
だから「意味がない」なんて言い回しになるわけで
キモイやつだな
テキストエディタのソース見てるが思ったよりあっさりしてる。 これで行番号とかアイコンとか出せるんだな…
788 :
753 :2006/12/02(土) 23:17:07
ソース見る限りでは自前ドローも簡単そうに見える… tipsゲット!! でも自分でいちから書くにはしっかりした設計が必要だな
ソースの読み方研究しようね。 OnPaint で検索しろ。 GutterMargin.cs HRuler.cs
ソースおもろかった。 いろいろ勉強になった。 データ構造も面白かった。 昔Cオンリーで書いてたころと大違いだな。 実装の参考になる。 テキストもキャレットも選択部分も自前で書く参考になる。 おもしろい。
アプリケーション起動時に最初に呼ばれるフォームを 外部の設定ファイルに応じて自由に変える機能を作りたいのですが 方法はないでしょうか?
mainで設定読んで選択したフォームのインスタンス作るだけ。
795 :
753 :2006/12/02(土) 23:55:32
>>790 ありがとうございます。とても参考になりそうです。
みんなはなんのソースを見てるんだろう?
うぎゃー! ソリューションの関連先がかわってしまった! しばらく沈黙します。
またまた質問なんですが、TreeViewのコレクションデータを保存するには どういったやり方があるのでしょうか? 次に起動したときに読み込みたいのです
serialize
>>798 その方法だと
シリアル化できない設定ですってエラーがでるんです
RTFM
そういわれても… TreeViewを継承して[Serialized]でもできませんでしたし・・・ [NonSerialized()]も使わなきゃいけないんですか?
private void button1_Click( object sender, EventArgs e ) { List<TreeNode> lst = new List<TreeNode>(); foreach( TreeNode node in this.treeView1.Nodes ) { lst.Add( node ); } BinaryFormatter bf = new BinaryFormatter(); using( FileStream fs = new FileStream( "unko.dat", FileMode.Create ) ) { bf.Serialize( fs, lst ); } } private void button3_Click( object sender, EventArgs e ) { BinaryFormatter bf = new BinaryFormatter(); List<TreeNode> lst; using( FileStream fs = new FileStream( "unko.dat", FileMode.Open ) ) { lst = (List<TreeNode>)bf.Deserialize( fs ); } this.treeView1.Nodes.AddRange( lst.ToArray() ); }
自分でTreeViewのコレクションデータって書いているはずなんだがなあ?
TreeViewをそのままシリアライズして保存するという発想は危険なのでやめたほうがよい 何を永続化する必要があるのかをよく考えるべき。
807 :
デフォルトの名無しさん :2006/12/03(日) 02:47:40
Cで書いたプログラムを.NET(C#)に移植しているのですが、C#からNDdeShareAddという nddeapi.dllのAPIを使おうと下記のように書いてみたのですが、呼び出し時にインスタンスが なんたらとかいうエラーが出てしまいます。 たぶん構造体の受渡に失敗しているような気がするのですが、みなさん助けてください(><) [StructLayout(LayoutKind.Sequential, Pack=1)] public struct NDdeShareInfo { public long lRevision; public char[] lpszShareName; public long lShareType; public char[] lpszAppTopicList; public long fSharedFlag; public long fService; public long fStartAppFlag; public long nCmdShow; public long[] qModifyId; public long cNumItmes; public string lpszItemList; } [DllImport("nddeapi.dll", EntryPoint="NDdeShareAdd", CharSet=CharSet.Ansi)] public static extern uint NDdeShareAdd( string lpszServer, int level, ref SecurityDescriptor pSD, ref NDdeShareInfo lpNDdeShareInfo, long cbShareInfo );
808 :
デフォルトの名無しさん :2006/12/03(日) 03:36:19
dataGridViewで、 0,2,3,5列目 の値がそれぞれ hoge0, hoge2, hogeee, hoge の行を探す みたいな機能はdataGridViewにはないですか? もしくは、 0,2,3,5列目 の値がそれぞれ hoge0, hoge2, hogeee, hoge だったらtrueを返す みたいな比較メソッドはないですか?
>>807 MSDN の「アンマネージ コードとの相互運用」以下を嫁。
型のサイズがめちゃくちゃだ。
そう言えば Vista では NetDDE 完全廃止らしいな。
>>808 そんなのが標準で用意されてたら却ってイヤだ。
素直にループ回せ。
すみません、よろしければ教えてくださいませ。 まだC#でプログラミングしてはいないのですが、その前に既存の Word2003 が インストールされているところへ、 ・ .NET Framework 2.0 ・ Visual C# 2005 Express Edition 日本語版 をインストールしたところ、 Word2003 が起動するときによくわからないエラー が出るようになってしまいました。(そのエラーメッセージをエンターで解除した あとは Word2003 自体は使えていました) そうこうするうちに、Word2003 の使用頻度が高くなり、一方 C# の緊急度が下がり、 逆に別のアプリケーションを入れる関係で .NET Framework 1.1 の導入の必要が 出て、一旦 C# も .NET Framework 2.0 もアンインストールしてしまいました。 すると Word2003 の起動時に出ていたエラーは出なくなりました。 今度また C# や VB.NET を学習するために再び同様にインストールしようと 考えているのですが、同じ問題が起こるとちょっと困るなと思いました。 出ていたエラーメッセージは記録していなかったのですが、こうしたことは起こるもの でしょうか?それとも Express Edition であったために起こった問題の可能性もある でしょうか?申し訳ないですが、よろしければ教えていただけたらありがたく。 環境: Windows2000 (Updateはネット経由で随時更新)
エラーの内容もないのに答えられるわけ無いが、 大抵はインストールする人が変なコトしたからだろう。 あと .NET 1.1 入れるからって .NET 2.0 消す必要も意味もないぞ。 別物だから。
>>811 さっそくどうもです。助かります。
.NET Framework 2.0 や C# Express を入れるときにトラブルしたり
その他のNG等が出たわけでもなく、すんなり普通に終わっていたかと思います。
そこで思いましたのは、もしかしたら Express を入れるとそうなってしまうのか
ということでした。製品版だと問題ないのだとしたらしょうがないのかなと。
>.NET 1.1 入れるからって .NET 2.0 消す必要も意味もない
あ、そうだったのですか!問題起こすといけないと思って抜いてしまいました。
だとすると これからこのまま 2.0 入れてしまえばいいわけですね。
それでその上で
Visual C# 2005 Express Edition 日本語版
や同 VB.NET Express も入れてしまえばよいと。
ありがとうございました。またやってみてわからないことが出たら教えてください。
大変どうもでした。
XmlNode rootXmlNode = myXmlDocument.DocumentElement.FirstChild; でXMLのルートノードの最初の子を取り出せますよね? その次の子が欲しい場合は rootXmlNode = myXmlDocument.DocumentElement.FirstChild.NextSibling; で取り出せるんですけど、次の子がnullになるまで取り出したい場合、 XmlNode rootXmlNode = myXmlDocument.DocumentElement.FirstChild; (rootMxlNodeを使った処理) if(rootXmlNode = myXmlDocument.DocumentElement.FirstChild.NextSibling != null) { rootXmlNode = myXmlDocument.DocumentElement.FirstChild.NextSibling; (rootMxlNodeを使った処理) if(myXmlDocument.DocumentElement.FirstChild.NextSibling.NextSibling != null) { rootXmlNode = myXmlDocument.DocumentElement.FirstChild.NextSibling.NextSibling (rootMxlNodeを使った処理) } ・ ・ ・ } ってやらなきゃいけないんですか? For文を使うわけにはいけないし・・・ 他にいい方法ないですかね?
これ→myXmlDocument.DocumentElement.FirstChild が ファイル読み込みなので再帰の方法が思いつかないんですが こういう場合でもできますか?
>>815 rootXmlNode = myXmlDocument.DocumentElement.FirstChild;
do{
//
}while(null!=(rootXmlNode = rootXmlNode.NextSibling));
>>813 foreach(rootXmlNode in myXmlDocument.DocumentElement.ChildNodes){
//
}
>>811 さん
すみませんが、ついでにもう一つ教えてくださいませ。申し訳ありません。
もしかして、.NET は Windows2000 はサポート外ではないですよね
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/html/ndp2_prere.asp では
Microsoft Windows 2000 Professional with SP4
がありましたのでOKのようですが、今 Microsoft のサイトを見ましたら、
現在の Framework の最新バージョンは 3.0 になっていました、それで対応OSに関しては
http://www.microsoft.com/japan/msdn/windowsvista/general/netfx30.aspx -------------------------
.NET Framework 3.0 の導入
このセクションでは、.NET Framework 3.0 を導入してアプリケーションで使用する方法について説明します。
ソフトウェア要件
.NET Framework 3.0 をインストールするには、対象のコンピュータに次のいずれかのオペレーティング システムがインストールされている必要があります。
Microsoft Windows XP Home または Microsoft Windows XP Home Professional、Service Pack 2 以降
Microsoft Windows Server 2003 ファミリ、Service Pack 1 以降
-------------------------
とありました、これは 3.0 以降はこのバージョン以上からしか対応しない
ということになるでしょうか?Windows2000 は安定性がいいのでずっと使っていましたが、
.NET 3.0 以降が必要な場合は上記OS以上に Upgrade しないといかんということになる
でしょうか?
>>821 その通り。
WinFX改め.NET3.0からは2kサポートがドロップされてる。
そだよ 3.0 は XPSP2 以降限定 2.0 までは Win98 以降 あと今更 2k の方が安定性がとか無い
>>822 さん、
>>823 さん
早速にどうもです。
そうだったんですか、うーん。
早急な Upgrade はまだとしても、いずれはやらないと
いけないんですね。わかりました。
とりあえずは 2.0 を入れて VS2005 を勉強してみます。
どうもありがとうございました。
>あと今更 2k の方が安定性がとか無い
そうでしたか、自分がいた会社でも去年ぐらいまではずっと
これを言っていて業務用は2000で統一していたりしていました。
ありがとうございました。
それではまたよろしくお願い致しますです。
>>824 それは機材の更新を先延ばしにしたい鯖缶の常套句
カネないのがモロバレ
827 :
807 :2006/12/03(日) 16:10:50
>>809 なるほど。
ループさせます。どうもありがとう。
>>826 金ないのもあるだろうがむしろ
め ん ど く さ い 仕 事 増 や す な
だと思う > 鯖缶
829 :
デフォルトの名無しさん :2006/12/03(日) 18:13:55
#FTP C#には、FTPサーバにファイルを アップデートする方法(クラスライブラリ) があるのでしょうか。
>>829 当然MSDNぐらいは検索したんだろうな?
831 :
デフォルトの名無しさん :2006/12/03(日) 20:03:31
>すいません、MSDNってなんですか? >すいません、MSDNってなんですか? >すいません、MSDNってなんですか? >すいません、MSDNってなんですか? >すいません、MSDNってなんですか?
( ゚д゚) ポカーン
MSDN知らずにどうやって開発するんだろ?
VSのヘルプで検索でおk
VSとは一体… すみません初心者なので略されると学習できません おはずかしいのですが
ぽまえら釣られ杉
MasterSystemDominantNormalization Virtuoso Sound
VSはVirtual Sexだろ
Visual Studio
>>836 飽きたのでマジレス。まず、ここは初心者スレ(ふらっとスレ)ではないです。
ましてや「C#初心者」よりもっと前の段階の人なんて初心者スレでもお断りです
入門書でも買ってそこからはじめてください。
MSDN以前にGoogleは知ってるよな、まさか
ここは何だかんだで初心者に優しいスレですね。
844 :
デフォルトの名無しさん :2006/12/03(日) 23:02:01
>>842 検索はYahooで行っています。
なにか、問題ありますか?
846 :
デフォルトの名無しさん :2006/12/04(月) 00:31:38
ストアドプロシージャの出力パラメータ(@ErrCode)を 変数に格納する作業をしたいのですがエラーが発生します。 string ErrCode = ""; "DECLARE @ErrCode exec [STP_SelectKoshinSiire] @ErrCode OUTPUT SET @ErrCode = " + ErrCode; どこか間違っていますでしょうか?
847 :
デフォルトの名無しさん :2006/12/04(月) 00:39:14
>846 基本がナットラン・・・
このスレでは代入式まで教えなくちゃいけないの? たぶんコンパイラも呆れてるよ? x = y; 右辺yを左辺xに代入
849 :
デフォルトの名無しさん :2006/12/04(月) 01:02:12
DECLARE @ErrCode INT exec [STP_SelectKoshinSiire] @ErrCode OUTPUT SET " + ErrCode + " = @ErrCode エラーメッセージ =付近に不適切な構文があります。 となってしまいます。
>>812 Visual Studio 2005のスレがあるから、次からはそちらへ。
851 :
847 :2006/12/04(月) 01:06:23
>>851 いえ自分の見る限りですがそんな構文あり得ないです
>>852 おまいは C# が使いたいのか C# に似たオリジナル脳内言語が
使いたいのかどっちなんだ?
前者ならコンパイラのほうがまず正しい。後者なら C# のコンパイラは
使えない。
854 :
851 :2006/12/04(月) 02:20:57
おまえら・・・少しはスルー汁よ
BAC#言語
例え釣りっぽいと思っても、ホンモノだと仮定したうえで 全力をもって食い付くのが俺のジャスティス。
うむ。ウサギはライオンを倒すにも全力を尽くすというしな。 がんばれ。
最近のライオンはスルー力を鍛えてるらしい
860 :
405 :2006/12/04(月) 12:20:46
861 :
デフォルトの名無しさん :2006/12/04(月) 21:21:52
秀和システムの本だけで開発しています
MSDN+秀和?
RichTextBoxについて質問があります。 FontプロパティをMS ゴシック, 9ptにしているのですが、Textプロパティに文字列をセットしたときと RichTextBoxに直接入力したときでフォントが変わってしまいます。 なぜだかご存知の方はおられますか?
半角文字のフォントがArialになるバグのことか?
あ、バグなんですか?
諸事情よりメニューを作らずにツールバーだけが存在するアプリを開発中なのですが メニューなしでショートカット(Ctrl+Oで開くなど)を実現する方法はありますか?
KeyPreview=trueにしといてFormのイベントに引っ掛ければいいんじゃね?
>>865 アジア言語圏特有の仕様。
この機能を抑制するにはWin32ではEM_SETLANGOPTIONSメッセージでIMF_AUTOFONTをクリアする。
.NETでもP/Invokeを使わない方法が何かあったと思ったが出てこないな。
869 :
866 :2006/12/05(火) 19:43:54
>>863 の問題は過去スレで、.NET Framework 2.0以降なら何かのプロパティをいじるだけで直せる解決法が出た。
ログ紛失してしまったorz
>>870 これ?
uint opt = (uint) richTextBox1.LanguageOption;
opt &= ~((uint)RichTextBoxLanguageOptions.DualFont);
richTextBox1.LanguageOption = (RichTextBoxLanguageOptions) opt;
>>871 おおおおおおおおおおおおおおおおおおおおおおお
ありがとうございます!!!
873 :
871 :2006/12/05(火) 22:06:35
自分で貼っといて何だが richTextBox1.LanguageOption &= ~RichTextBoxLanguageOptions.DualFont; でいいな。
>>873 enumを直接演算に使うと警告かエラーが出た気がする。それでuintにキャストしているはず。
普通にやってるぜ?
>>874 別に問題ないよ。
今回は大丈夫だけど、enumを32ビットと仮定しているところのが怖い。
enum型で出来ないのは算術演算でビット単位の論理演算は出来た。思い込みをやっちまってたかorz
unionが見つからない
IDEを使ってDataSetとDataGridViewをそのままバインドしています。 ここで現在表示されているUnix Epochからの経過秒数を、普通の日付に直したいと思います。 これは非バインドされた列を新たに追加して、バインドされた列を元にデータを作らないといけないのでしょうか。 それとも、バインドされた列に「そのように見えるフィルタ」のようなものをほどこしてやる事は可能でしょうか? 方針を教えていただければ幸いです。
>>879 普通SQLの段階で直す。DataSetはあくまでコンテナ。クエリエンジン
ではない。
>>880 そうなんですけど。レコード件数が多いのでサーバ負荷がすこしでも減ればと思って。
あまり意味はないのでしょうか。
>>878 FieldOffset
ところでVARIANTARGには死んでもらっていいですか?
バリアントあるだろ
110cm単装リニアカノン:バリアントMk.8 アークエンジェル副砲。艦尾両舷に1基ずつ装備されているリニアガン。連射能力も高く精密射撃が可能だが、長時間連続使用すると砲身温度が上昇して使用出来なくなるのが欠点。 右舷が1番、左舷が2番である。ゴットフリートと違って側面に配置されているために上下方向の旋回が可能であるため、地表や海面を空中から直接狙撃することも可能である。 また、潜水航行が可能である本艦にとって数少ない水中での攻撃が可能な兵器である。 「DESTINY」最終話では、これによりミネルバの武装を破壊、戦闘不能に追い込んだ。
キチガイは放置で。
どなたかinvalidaterectの使い方を教えてください。 普通にinvalidate()するよりも軽くなるんでしょうか? [DllImport("user32.dll")] private static extern IntPtr GetDC(IntPtr hwnd); [DllImport("user32.dll")] private static extern bool InvalidateRect( IntPtr hWnd, ref Rectangle r, bool bErase ); private void button2_Click(object sender, EventArgs e) { Graphics gra = pictureBox1.CreateGraphics(); IntPtr hwnd = gra.GetHdc(); Rectangle rect = new Rectangle(100,100,100,100); InvalidateRect(hwnd, rect, false); } 調べたんですがこの程度しか分かりませんでした。あってるのかも分からないです
Invalidate(Rectangle) でいいだろ
おまいらインタフェースに同じような名称のメソッドつけたくなる時どうしてますか? メソッド名にインタフェースを表すようなプレフィックスつけてる? それとも衝突覚悟で同じ名前つける漢ですか?
>>886 InvalidateRectが引数にとるのはRECT構造体へのポインタ。
マネージドのRectangleではない。メンバの意味が違う。MSDNで探せ。
GetHdcしたらReleaseHdcする。
CreateGraphicsしたらDisposeする。
あと細かいけど
>IntPtr hwnd = gra.GetHdc();
hwndはHWND型
hDCはHDC型
マネージドだとどっちもIntPtrで型はあってるけど
ふつうそういうときにhwndは使わない
つーか
>>887 でFA
890 :
889 :2006/12/06(水) 17:54:02
あっー よく考えたらデバイスコンテキスト取得する必要ないじゃんorz InvalidateRectの第一引数はウインドウハンドルっす。 どうしてもInvalidateRectしたいなら struct RECT { public int left; public int top; public int right; public int bottom; } で RECT rct = new RECT(); //ここでrctのメンバ入れる。rightとbottomにちゅうい InvalidateRect( pictureBox1.Handle, ref rct, false );
891 :
886 :2006/12/06(水) 18:34:56
みんなありがとう。 教えてもらったとおりがんばってみます。
FormのタイトルバーをFormBorderStyleをNoneにすることで消し、 そこにリストボックスを配置、DockをFillにしました。 が、表示させるとなぜか下のほうにFormがはみ出ます。 (グレーの背景が見える) なぜなんでしょう?
>>892 IntegralHeight を false に
ListBoxに追加するアイテムの色分けする方法を教えてください 行ごとに色を変える方法はDrawItemで作れたのですが 一列の中で何色も色を変える方法がわからないです
>>894 言いたいことがよく分からんが、オーナードローならどんな描画だってできるでしょ。
897 :
894 :2006/12/06(水) 20:52:40
一行丸々色を変更する方法は、こんな感じで出来ました e.Graphics.DrawString(文字列, フォント, 色, e.Bounds); e.DrawFocusRectangle(); --- 赤い青い黄色い という文字列(実際に色がついているとして)をリストボックスの1列に表示したいんですが ListBoxの要素ひとつの中で色を変更する方法を探してます 上のDrawString + DrawFocusRectangle だと一列ごとにひとつの文字列・一色しか設定できませんでした わかりやすい説明が出来なくて申し訳ないです
DrawString を複数回呼び出せばいいだろ 要は MeasureString だな
899 :
894 :2006/12/06(水) 21:05:45
MeasureStringの知識がなかったので助かりました 苦肉の策で文字数*5と指定してX位置を横にずらして表示していたので その部分を変えていけばできそうです ありがとうございます
>>888 そうならないようにインタフェースに責任を持たせる。
自然な発想で操作から連想される名前が重なる場合には衝突は気にしない。(どうせ、明示的実装できるし)
もちろん、時と場合による。
そもそも幽霊だからこの世の物質に干渉できないって言うなら そもそも視覚や聴覚も機能しないはず
視覚や聴覚を認識する自意識はこの世の物にはあらず
903 :
デフォルトの名無しさん :2006/12/06(水) 23:14:54
例外が発生してそれをキャッチした場合に PictureBox.Imageが突然、nullになってしまうのですが、 何が原因なのでしょうか?
>903が自力で調べるのを投げてるように見えるが…。
誰がうまいこと言えと
907 :
質問です。 :2006/12/06(水) 23:32:58
DataTableに関する質問です。 例えばDataTableに10行レコードが入っていたとして 一番最初(0レコード目)に””(空白)値のみのDataRowを 挿入したいのですが何か良い方法をご存知の方はいらっしゃいますか? New DataRow ・・・ dt.Add ⇒この方法だと一番末尾にレコードが追加されてしまいます。
TextBoxのGetPositionFromCharIndex(int index)を呼び出すと indexにかかわらずIsEmptyがTrueのPoint(X=0,Y=0)が帰ってきます。 何がいけないのでしょう?
909 :
903 :2006/12/06(水) 23:37:28
スマヌ。 原因が分かった orz... try{...} catch(...){return;} PictureBox.Image = new ...;
>>907 もうちょっとメソッド調べれ 挿入を英語で
>>908 indexは0以上かつText.Length未満でなければならない。
>>912 はい、その点は大丈夫です。
txtBox.GetPositionFromCharIndex(txtBox.SelectionStart);
とやっているのにそうなるのです…(T-T)
>>913 ブレークポイント張ってSelectionStartの値は見てみたのか?
fuck?
916 :
907 :2006/12/07(木) 00:12:33
>>911 DataTable.Insertでしょうか?
このメソッドは挿入箇所をインデックスで指定する事も
出来るのでしょうか?
なぜ調べない?
918 :
907 :2006/12/07(木) 00:24:00
つか DataTable には Insert 以前に Add が無いはずだが Add は別のクラスのだろ? それ調べれ
>>918 そんな姿勢ならプログラミングやめた方がいいよ
少なくともこのスレには来ないでくれ
>>918 プログラミングというのは、正にそういうことの地道な繰り返しなわけだが。
その作業が嫌なら、プログラミングには向いてないな。
922 :
907 :2006/12/07(木) 01:06:17
いや、向いてるよ。 実際プロだしね。
プロに勝った!
>>922 名前全角にしないとそれっぽく見えないよ
プロが2ちゃんで質問かよw それで教えて貰って分からないってのも。
DataRowCollection.InsertAt メソッド コレクション内の指定した位置に新しい行を挿入します。 名前空間: System.Data アセンブリ: System.Data (system.data.dll 内) 構文 C# public void InsertAt ( DataRow row, int pos ) パラメータ row 追加する DataRow。 pos DataRow を追加するコレクション内の位置。 解説 InsertAt で指定する位置は、DataRowCollection での行の順序だけを表しています。 DataRow 配列で複数の行が返される場合は、挿入行が InsertAt で指定した位置に返されないことがあります。 たとえば、Rows プロパティは指定した挿入位置に行を返しますが、Select と GetChildRows は挿入位置に行を返しません。 DataRowCollection の内容を XML (WriteXml など) で作成すると、行は DataRowCollection で指定された順序に従って書き込まれます。 pos パラメータで指定した値がこのコレクション内の行数を超えている場合は、新しい行はコレクションの末尾に追加されます。
下記で、悩んでいます、たすけてください。 TEST_DLLという名前空間にTEST_CLASSというpublic クラスをつくりました。 これは、DLLとしてビルドされます。 それで、上記のDLL内のクラスを参照して、うごくEXEファイルを別につくっているのですが、 以下のようにするとDLLのクラスを呼べるのは確認しました。 TEST_DLL.TEST_CLASS test = new TEST_DLL.TEST_CLASS(); ただ、上記のDLLを削除して起動すると例外(System.IO.FileNotFoundException)が発生して おちてしまいます。DLLがあれば、問題なく動きます。 そら、DLLがないのだから当然の例外なのですが、インスタンスを作成する前に、 DLLがあるかどうかのチェックをする処理を入れて、 あれば、インスタンス生成にしても、例外が発生します。 インスタンス生成を削除すると動くので、インスタンス生成が問題であるのは確認しました。 また、上記インスタンス生成時に(System.IO.FileNotFoundException)を catchにしてもキャッチされません。 Visual Studioのデバッグで起動しても、どこで例外がおこってるかも表示されません。 どうしたら、いいのでしょうか?ご教授頂けませんか?おねがい致します。
929 :
928 :2006/12/07(木) 10:59:08
>>928 ごめんなさい。自己解決しました。
インスタンスの生成に失敗すると自動的に例外が上位にあがるんですね…。
たぶんで、自信ないけど…。
インスタンス生成部分をメソッド化して、呼び出し元でキャッチしたらできました。
メソッド化した時に例外が発生したら上位にあげるとかもかかなくても、勝手に上位に上ったので、
たぶん、そうなのかなあと思いましたが…。
>>928 Exceptionならキャッチできる?
931 :
928 :2006/12/07(木) 11:14:27
>>930 System.Exceptionでもキャッチできなかったから、ほんきで悩んだんだ。
そんなはずないだろ?って。
メソッド化しても、メソッド内ではキャッチできなくて、呼び出し元ではキャッチできた…。
よくわからんが…。
あのね、参照した型を直接扱コードを実行するためには 実際の実行より前に型情報が必要になるのね つまり、そのコードを含むメソッドのJITコンパイル時ね 先にJITコンパイル済まさないと実行出来ないからね てことは、そのメソッドの実行よりも前に型のロードが必要になるのね もう分かるね?
すげぇわかりやすい説明だと思った
>>928 あるかどうか分からんライブラリをアーリーバインドする馬鹿がいるかよ。
Reflection使っとけ。
試してないけど、完全に分離して、アセンブリの名前解決が起こらないようにすればいけるんじゃね? namespace ConsoleApplication1 { class Program { static private void doSomething() { new ClassLibrary1.Class1().DoSomethong(); } static void Main(String[] args) { if (File.Exists("ClassLibrary1.dll")) { doSomething(); } } } } 汚いからやめて欲しいが。
937 :
デフォルトの名無しさん :2006/12/07(木) 13:54:56
C#でRC6使えないのかな?
938 :
デフォルトの名無しさん :2006/12/07(木) 14:09:18
C#から入ってC、C++もできるようになる?
>>938 なる奴はなる。ならん奴はならん。
そういう質問をするタイプの奴はならん。
941 :
デフォルトの名無しさん :2006/12/07(木) 14:16:36
そっか じゃあやめとくか
Formatメソッドで、文字列を幅固定し左詰したいのですが、 固定幅を文字数でなくバイト数で設定することは可能なのでしょうか? 何がしたいかというと・・・(アスタリスクは空白文字とお考え下さい) 1.String.Format("{0, -6}", 1) -> “11****” 2.String.Format("{0, -6}", "あい") -> “あい****” 上記の2の結果“あい****”を、“あい**”で取得したいのです。
>>942 "1" と "あ" はどちらも2バイト。
>>942 Encoding.GetEncoding(name).GetByteCount(s)
で目的のエンコーディングでのバイト長を取得して、
足りない分を空白を埋めればいいんじゃね?
>>943-944 ・・・根本的に思い違いをしていたのですねorz
GetByteCountで取得してみます。即レスありがとうございました。
質問があります。 wsdl.exeで作成したプロキシクラス(呼び出し元はjavaで作成したwebサービス) をコンソールアプリケーションのプロジェクトに追加してビルドすると プロキシクラスの先頭で using System.Web.Services; using System.Web.Services.Protocols; と宣言している部分で 「型または名前空間名 'Services' は名前空間 'System.Web' に存在しません。アセンブリ参照が不足しています」 というエラーが出ます。 どのようにすればビルドが成功するかわかりません。 助けて下さい。
948 :
デフォルトの名無しさん :2006/12/07(木) 21:31:21
プロパティのオーバライドについて質問です。 public abstract class AbstractClass{ public abstract int Value{get;} } public class ConcleteClass{ public override int Value{get{return 0;} set{ }} } のようにサブクラスではGetter/Setter両方を定義する方法ってありませんか? プロパティに対してoverrideキーワードを追加すると以下のようなコンパイルエラーになるのですが 「オーバーライド可能な set アクセサがないため、オーバーライドできません。」
ない SetValue メソッドでも用意してやれ
950 :
デフォルトの名無しさん :2006/12/07(木) 21:43:35
public abstract class AbstractClass{ public abstract int Value{get;} } internal class MiddleClass : AbstractClass{ public override int Value{get{return 0;}} } public class ConcleteClass : Class{ public new int Value{get{return base.Value;} set{ }} } こうするとか
ミス ConcleteClass : MiddleClassね あと、internalにはできないな
concrete
TreeViewの一番上の親ノードを取得するのってどうやるんですか?
何を悩む事があるんだ?
何かトリッキーな方法を欲してるんじゃね?
(仮想的な)スーパールートノードが欲しいとか?
TreeView.FirstNodeみたいなのはないんですか?
959 :
928 :2006/12/08(金) 00:08:31
>>935 Reflection使って、作りなおしました。
でも、複数アプリに共通なクラスはDLL化したらしたで、
Reflectionつかわないとってなるとめんどいな…。
配布せずに自分でしか使わないというならGACに入れるという手も……
959 の思考がさっぱり理解できない
>958 お前の頭についている二つの穴はフシアナか?
あんまり釣られんな
??あるんですか?
人に訊く前にMSDNくらい読んでこいや
MSDNってなんですか?
thx
>>949 ,951,953
メソッド用意しました。
>>959 いったい何がしたいわけ?
dllがなくても正常に動かしたいの?
普通dllがなきゃ動かないのは当たり前でそ
>>970 いや、エラー処理なんだな。
DLLがなきゃ動かないのは当然なのはわかってるんだ。
もし、DLLがない場合&DLLが古い&DLLが名前は同じでも別もの
の場合でもちゃんとエラーをだして止まるようにしたかったんだ。
例外が発生しておちましたでは困るんで。
一般のユーザは、こっちが思ってるように、正しく使ってくれないから…。
だから例外キャッチしときゃいいんでしょ?
Reflection使うのめんどくさいって・・・ 3行くらい書くだけじゃないの?
必須DLLだったらReflectionもメソッド単位でcatchする必要も無いと思うけど
せいぜい最上位レベルでキャッチしてメッセージ出すくらいだな。
publicなHashtableを持つクラスをシリアライズしたいんですが XmlSerializer.Serializeを使ったら冷害が出ました。 どうすればいいんでしょうか?
BinaryFormatterマンセー
Xmlserializerはそんなことには使えない
>>979 Magic Libraryっていう有償のコンポーネントが必要
>>979 詳しく書かないってことは答えて欲しくないってことでおk?
>>974-975 またまた、出没しましたよ…。
下のソースの 1 のClassLibrary.MyClassがDLL内にある。
それで、そのDLLがないともちろんエラーとなるんだが、例外が 2 じゃなくて 3 でキャッチ
されるのがなぜなのか理解できない。普通 2 じゃないの?
ここでthrowしてないのに…。なぜ3にいくの…
static void DLL_Class_Test()
{
try
{
ClassLibrary.MyClass test = new ClassLibrary.MyClass(); // ←ここ 1
}
catch (System.Exception ex) // ←ここ 2
{
Console.WriteLine(ex);
}
}
static void Main(string[] args)
{
try
{
DLL_Class_Test();
}
catch (System.Exception ex) // ←ここ 3
{
Console.WriteLine(ex);
}
}
>>984 エラーになるのはなぜかっていうのはわかるけど、
例外の発生場所がなぜそうなるのかわからないよ…。
型情報がないから、そのメソッド自体を初期化できないってこと?
飲み込み悪くてすまねぇ。
986 :
追加 :2006/12/09(土) 03:52:14
>>985 そのメソッドってのは、上でいうDLL_Class_Testのことです。
いや、そのメソッドを実行開始する前にJITコンパイルが必要だから、 そのメソッドを実行開始する前に、型がロードされる。JITコンパイルしようとして。 これでなんで分からないんだ? 初めてDLL_Class_Testが呼び出される時点、つまりDLL_Class_Test();の部分を実行箇所に来ると、 この時点でDLL_Class_TestのJITコンパイルが開始され、 まだロードされてないClassLibrary.MyClassが必要と認識され、 自動的にロードが試みられる。 ↓ ふぁいるが見つかんないから例外 ↓ DLL_Class_Testメソッド内の ClassLibrary.MyClass test = new ClassLibrary.MyClass();ではなく、 MainのDLL_Class_Test(); の実行箇所で例外となる。
ザッツオール!
989 :
デフォルトの名無しさん :2006/12/09(土) 15:32:10
32bitのpng画像なんですが、汚くなってしまいます。 なにかのcontrol.Image プロパティに直接指定したときは綺麗なんですが、 一度ImageListに格納してしまうと(ColorDepth を32bitにしています) 微妙にアルファがつぶれてくれます。 iconでも確認しました。 回避法はありませんか〜?
メッセージボックスに表示される文字列を改行することってできますか
それはギャグで(ry
改行文字を入れればいいと思うよ。
できました、ありがとうございます
>>989 ImageListは内部でネイティブのImageList_DrawEx()を呼び出している。
自前でやってみればできるらしい。
文字列の中に"とかを含めたい場合はどうすればいいのでしょうか? これではエラーになりますよね string str = " abc"d"efg ";
string str = " abc\"d\"efg "; または string str = @" abc""d""efg ";
test
(・3・) エェー 100げっとずざー
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。