ふらっとC#,C♯,C#(初心者用) Part36
1 :
デフォルトの名無しさん :
2009/01/20(火) 21:47:33 このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
ComImportを使って自作のDLLを読み込むのってどうやるの?
5 :
デフォルトの名無しさん :2009/01/20(火) 23:11:00
リモートのファイルサイズ取得方法について質問です HttpWebResponse.ContentLengthでContent-Lengthヘッダ情報を取得できますが Content-Lengthが設定されていない場合にリモートファイルサイズをHTTPで取得する方法はありますか? フリーのダウンローダー(Irvine等)などはHTTPでファイルサイズを取得してるようなのですが 解決方法をご存知の方お願いします。
>>4 その自作のDLLとやらはどうやって作った何者?
>>5 HTTPだと一般的なのはContent-Lengthしかないよ
IrvineもContent-Lengthが存在しない場合サイズは0って表示してるだろ
8 :
4 :2009/01/20(火) 23:51:27
>>6 Visual C++で、WindowsSDKのSampVidサンプルを改造して作った
DirectShowのレンダラーフィルタ
2つか3つぐらいメソッドが追加されている。そのメソッドも使いたい。
ComImportではGUIDを指定するみたいだけど、DLLの名前
指定してもいないのにどうやってDLLに定義してあるGUIDがわかるの??
その辺りがちんぷんかんぷん。
C++/CLIで作ればいいのに
そもそもCOMの仕組みをわかってないんじゃないか。
>>8 ComImport は印みたいなものであまり意味はないよ。
基本としてとりあえず2つ。
まずインターフェイスはこんな感じ
[ComImport]
[Guid("IID をここに")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
// ↑DirectShow らしいのでたぶんこう。違ったら変えて
interface IHoge {
// ヘッダ見て「同じ順番で」メソッドを並べる
// IUnknown メンバは必要なし
[PreserveSig] // ←戻り HRESULT がほしいときはこれを付ける。
// エラー時例外でいいならいらない
HRESULT Foo();
}
で、生成のコクラス
[ComImport]
[Guid("CLSID をここに")]
[CoClass]
class Hoge {}
これでこうやって使う。
IHoge hoge = (IHoge)new Hoge();
後は適当にスレッドモデルに気をつけて
>>8 そのDLLがCOMとして公開されてなきゃ使えないよ?
13 :
7 :2009/01/21(水) 00:07:00
14 :
デフォルトの名無しさん :2009/01/21(水) 00:30:03
データアダプターについて質問です。 データアダプターの使い方がわかりません。普通にSQLを記述するのと違うのでしょうか?
// / / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ まピョーん☆ / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
2008ExpressEditionSP1 ヘルプの一部が中国語になっているんですけどこれは直りませんか? 自分が確認できている範囲では以下の部分だけです 開発ツールと開発言語→Visual Studio→Visual C#→C# プログラミング ガイドの下の 「コレクション クラス」と「ファイル システムとレジストリ」の間にある項目です ヘルプの左側のツリー表示してる目次部分と右側のタイトル部分が中国語になっています
前スレで既出
18 :
デフォルトの名無しさん :2009/01/21(水) 22:43:33
C#の質問なんですが、button2を押したときにpictureboxに描画するようにしたいのですがやりかたがよくわかりません。googleなどでも調べてみましたが、検索ワードが悪いのか思っていたようなものが引っかかりませんでした。超初心者ですいませんがお願いします。
//コンストラクタかどこかに追加 this.Button2.Click += new System.EventHandler(Button2_Click); //メソッドを追加 private void Button2_Click(System.Object sender, System.EventArgs e) { //pictureboxに描画するコード }
そして再描画で消えますって返ってくると
いいから先ずはやってみなされ
23 :
デフォルトの名無しさん :2009/01/21(水) 23:14:04
おい! 俺こそは超絶C#プログラマーだ!!っていうやつ出て来い! 俺とメールでソース交換して、どっちがすげえか白黒つけようじゃねえか!
いいよ。じゃ、まずお前から送れ。
>>23 うpすればいいじゃん
俺よりすごそうだったらちゃんとすごいって認めてやるから
正当な評価をする事を保証するよ
/ PictureBoxに直接描画することはできないので、 // コンストラクタかどこかでPictureBox.Imageに適当なImageオブジェクトをセットしておき、 pictureBox1.Image = new Bitmap(400, 400, PixelFormat.Format32bppArgb); // イベントハンドラで、PictureBox.Imageに描画を行う using (Graphics g = Graphics.FromImage(pictureBox1.Image)) { }
27 :
26 :2009/01/21(水) 23:42:35
すまん、途中で書き込んでしまった。 // PictureBoxに直接描画することはできないので、 // コンストラクタかどこかでPictureBox.Imageに適当なImageオブジェクトをセットしておき、 pictureBox1.Image = new Bitmap(400, 400, PixelFormat.Format32bppArgb); // イベントハンドラで、PictureBox.Imageに対して描画を行う using (Graphics g = Graphics.FromImage(pictureBox1.Image)) { // ここで描画 } pictureBox1.Invalidate();
揚げ足とるようでなんだが、 >// PictureBoxに直接描画することはできないので、 これは違うというかミスリード過ぎだろう。 描画できないんじゃなくて描画した画像を保持できないだけ。
29 :
デフォルトの名無しさん :2009/01/22(木) 01:32:29
ド初心者です。 はずかしい質問です。 オライリーとかを買ってきて勉強してるんだけど、純粋に言語の話ばかりで 初心者なのに、いきなりここまで必要かなあと思うんだけど。 C#を使う場合って、ほとんど、VisualStudio上じゃないの?だったら「VSの使い方」っていう コンセプトの本が普通だと思うんだけど、そうでもないの? 自動生成されるコードもたくさんあるのに、初心者のうちからそういう仕組みをまったく度外視して 純粋に言語仕様の本を「初めてのC#」として売ってるから怖いんだけど。 そこそこ使う人はIDEに依存しないで使ってるんですか? 初心者にもIDEの使い方より言語そのものの仕様の方が重要だというのは常識なの?
>>29 C# がはじめての人対象であってプログラミング初心者対象ではないんだろ。
VS の使い方を目的にした本はいくらでもあるのにそういう本を選ばなかったのが悪いんだろ。
オライリーなんて初心者から見ていかにも難しそうなのによく買ったな。
>>30 べつに理解できないわけじゃないし
内容じたいは全然難しくないんだけど、
これをすぐに応用する機会ってあるのかなあ、
というのが疑問で。。
www
VSというよりそもそもWinに縛られてるような……
>>29 オライリーの初心者向けは「プログラミングC#」だが
ToString("むしろ、言語仕様のみに限定する事である程度慣れてからも手に取りやすくしてるんじゃ中廊下");
37 :
デフォルトの名無しさん :2009/01/22(木) 04:53:47
質問です。VS2008EEです。 UTF8エンコードのbyte列を文字列に変換し、string型変数(var1)に代入しました。 その文字列はXMLのデータです。これをXmlLoadし、UN要素のN0属性の値を取得したいのですが、できませんでした。 しかし、var1をTextBoxに表示させ、そのTextBox.TextをXmlLoadすると、値を取得できました。 何故このようになるかがわかりません。また、どのようにすればTextBoxを介さずに解決するのでしょうか。 var1 = Encoding.UTF8.GetString(mStream.ToArray()); XmlDocument doc = new XmlDocument(); doc.LoadXml(var1); XmlElement root = doc.DocumentElement; XmlNodeList nodelist = root.GetElementsByTagName("UN"); XmlElement UN = (XmlElement)nodelist.Item(0); textBox2.Text = UN.GetAttribute("N0"); ↑がうまくいかないパターンで、 途中に(たとえば1行目直後)textBox1.Text = var1;を挟み、doc.LoadXml(textBo1.Text)とすると値を取得できました。
>>37 doc.Load(var1) か
doc.Load(mStream); でどう?
39 :
37 :2009/01/22(木) 07:21:07
>>38 レスありがとうございます。
Loadメソッドは
XmlDocument.Load(string filename)
なので、やはり使うのはLoadXmlメソッドだと考えています
今回の場合、XMLデータがgzipで圧縮されているファイルがあり、その中身を見るプログラムを書いています。
なので、ファイルを一度gzip解凍してからXMLとして読み込まないといけないので、ファイルの直接指定ができないのです。
zipならともかくgzipならGZipStreamで十分だが Load(Stream)もあるだろ というかうまくいかないってのは実行できるけどどこかでnullが返るのか 例外が出るのか出るのならどんな例外がどこで出るのか
41 :
プログラム歴2週間 :2009/01/22(木) 12:25:09
@キャンセルボタンを押す Aダイアログを出力して確認 OKかキャンセル Bキャンセルなら本処理終了 OKなら引数を渡して画面遷移する プログラムを書きたいのですが、わかりません。よろしくお願いします。
何が分からないのかが分からない
44 :
プログラム歴2週間 :2009/01/22(木) 12:39:49
むしろわかっているのが protected void ButtonCancel_Click(object sender, EventArgs e) //キャンセルボタン押すとき { Response.Redirect("遷移先のページ名"); //飛びたいページ } だけです。Visual Studio2005を使ってボタンとか配置しました
>>42-43 こういうくだらない皮肉をすぐにレスする奴って
何が原因でここまで卑屈になったのか疑問。
どっちが卑屈かな?
>>45 こういうくだらない皮肉をすぐにレスする奴って
何が原因でここまで卑屈になったのか疑問。
い・・・、引数
if (MessageBox.Show("キャンセルしますか?", "今やってることをやめる", MessageBoxButtons.OKCancel) == DialogResult.OK) { Response.Redirect("遷移先のページ名"); }
51 :
プログラム歴2週間 :2009/01/22(木) 13:29:54
>>48 企業用アプリケーションなので、うまく説明できないのだけど
とあるコードを渡してそのコードを選択する画面に戻る
編集画面ABCDE→Bを選択した(Bを編集したい)→Bの詳細画面 そこで編集ボタン押すと→B編集画面→B編集画面でキャンセルボタンを押すとBというコードを引数としてB詳細画面に戻りたい
初プログラミングで何がなんだかって感じなのですが。
引数でなければならない理由がわからない どこぞの変数にでも放り込んでおけ
ManagedDirectXでもクラスはクラスで参照型ですよね? { Texture tex=null; SetTexture(tex); (ブレークポイント) } SetTexture(tex) { tex = new Texture(Static.device, w, h, 0, Usage.Dynamic, Format.A8R8G8B8, Pool.Default); 〜 } (ブレークポイント)のところで止めてもtexがnullになります。 SetTexture内ではその値を保持していますが…
54 :
プログラム歴2週間 :2009/01/22(木) 13:47:08
>>50 ありがとう。埋め込んでデバックしてみます。
SetTexture(out Texture tex) じゃないか?
>>55 これで出来たテクスチャを色々なところで使い回したいのです。
なので
Texture getTexture(){
retrun tex
}
として引っ張ってきたテクスチャをtex.Dispose()とした方が良いのか
全部描画後にtex.Dispose()とした方が良いのか…
tex1=getTexture();
(tex1描画)
tex1.Dispose();
tex2=getTexture();
(tex2描画)
tex2.Dispose();
とした方が良いのか
tex1=getTexture();
(tex1描画)
tex2=getTexture();
(tex2描画)
tex2.Dispose();
とした方が良いのか
おまえは何を言ってるんだ? 内容がさっきと全然違うじゃないか。
>>53 で作ったテクスチャ(tex)を保持しておいて
そのテクスチャを
>>56 でgetTexture()で引っ張ってきて(tex1)描画した直後にDispose();すると
最初に作ったテクスチャ(tex)の方が消えてしまうのでしょうか?
tex = が入った時点でインスタンスは別のものになってるよ。
ということはtex1.Dispose()としても元のtexの方は生きていろということで良いのですか?
ソース見てないから順番がよくわからん、、、 疑問ならメッセージ出力するようにしておいて観察してみるといい。
分かりましたTraceで頑張ってみます。
63 :
デフォルトの名無しさん :2009/01/22(木) 18:55:40
VC#2008EEでメソッドにかかった時間が表示できるいい感じのプロファイラはないですか?
チームエディシオン買えよ。
66 :
デフォルトの名無しさん :2009/01/22(木) 21:00:21
C#最強だな・・今までの中で最強だ・・
立ち上がりの速さとかS級だよな
これで.netがUNIXで動けば・・・
つ mono
>>70 自分で張ったリンク先くらい全部読んでから来い。
Marshal.ReadInt32とか使えばコピーしなくて済むけどコピーするよりも大幅に遅くなる コピーせずに速いのはunsafeでポインタ使う方法
unsafe スコープで T* p = (T*)bitmapData.Scan0.ToPointer(); T は好きな blittable な型で。
74 :
70 :2009/01/22(木) 22:55:51
>>71 すいません、読んでいませんでした・・
>>72-73 回答ありがとうございました。
NiVEのサンプルのプラグイン、
Marshal.Copy使っているのをunsafe使ったコードに変えたら速くなるかな
処理自体はポインタ使った方が遅くなるよ コピーのコストが無視できるような重い画像処理なら一回マネージ配列にコピーした方が速い
76 :
デフォルトの名無しさん :2009/01/22(木) 23:09:57
buttonを押すとちゃんとと舞踊になりました。ご教授ありがとうございました。
77 :
デフォルトの名無しさん :2009/01/23(金) 04:17:17
見よう見まねでやっと一つ自分なりの小さなアプリを作ったんだけど、 できあがったファイルに、わけわからんのがあるんだけど。 メインのexeファイルの他に、--.vshost.exeとかいうexeファイルもできてるし --exe.configとかいうファイルが二つも出来ちゃった。 こんなの全部まとめて一つのexeファイルにするのが本当なんじゃないの? 一応アプリは正常に動作してるみたいだけど、何か気に入らない。 将来もっとスキルがあがってちょい立派なソフトを作って人に使ってもらうときに なんかこういうのは格好悪い気がするんだけど。 ベクターのソフトとかは、exe以外だとbinとか、なんかいろいろ意味がありそうなファイル ばかりじゃん。 どうして俺の場合はへんなファイルばかりなの? 何かやり方が間違ってる可能性はない?
ない
79 :
デフォルトの名無しさん :2009/01/23(金) 04:54:54
以下のコードにおいて、Triangleオブジェクトを参照するt1を作った上で、その参照変数をTriangleクラスの同クラス のオブジェクトを受け取るコンストラクタに渡して、Triangleオブジェクトt2を作成しているのですが、その際 t2を作る過程で、コンストラクタ内で、t1の“private”なはずのstyleにアクセスできてしまうの理由が分からず 悩んでいます。 同じクラスから生成されたインスタンス同士なら、privateな部分も見れるってことなのでしょうか・・・。 ご教授お願いします。 (独習C#第2版という本の抽象クラスの部分を読んでいるときに出くわした疑問ですが、抽象クラスには関係ないので、 370-373ページのコードを参考に短いコードを書きました。) class Triangle { string style; public Triangle(string s) { style = s; } public Triangle(Triangle ob) { style = ob.style; //t2のインスタンスを作っているとき、t1のprivateなメンバにアクセスできてしまう! } } class Demo { public static void Main() { Triangle t1 = new Triangle("right"); Triangle t2 = new Triangle(t1); } }
>同じクラスから生成されたインスタンス同士なら、privateな部分も見れる うん
81 :
77 :2009/01/23(金) 05:20:26
読み返してみてあまりにバカっぽいので、 少しバカ度を下げて質問しなおします。 ビルドによって--.vshost.exeというようなファイルができるのは正常なんですか? あと、初心者から脱した人には、生成される各ファイルがどんな働きをするものなのか たいてい想像できるもんなのですか? --.vshost.exeとか--exe.configはどういうファイルなんでしょうか? 申し訳ありませんが、できるだけ長い回答をお願いします。
>>79 privateはクラスプライベートであってインスタンスプライベートではないから
84 :
79 :2009/01/23(金) 05:34:10
>>80 >>82 なるほど、クラスプライベートですか。お二方、どうもありがとうございました。
exe.configはアプリケーション設定のデフォルト設定だったかな
87 :
デフォルトの名無しさん :2009/01/23(金) 10:59:06
public partial class ページ名: System.Web.UI.Page って何をやっているんですか?
class ページ名 … ページ名 という名前のクラスを宣言します public … クラスがアセンブリ外から参照できます partial … クラスの定義が複数のファイルにまたがっています : System.Web.UI.Page … クラスはSystem.Web.UI.Pageクラスを継承します
89 :
デフォルトの名無しさん :2009/01/23(金) 11:12:19
ありがとうございます。おおぉ・・・クラスとかアセンブリとか定義、継承 全部わからない・・・;; 適当にぐぐったのを翻訳すると、 「ページ名という名前のデータと処理を宣言して、コンパイル済みのコード群外から参照でき、複数のファイルのデータと処理を扱い、System.Web.UI.Pageのデータと処理を使えるようにする」 ???????頭が壊れる。これがないと何ができなくなるのでしょう?
C#ではすべてのコードはクラス(というか型)の中に書かないといけないので クラス定義がないと何もできない
91 :
デフォルトの名無しさん :2009/01/23(金) 11:21:03
そのページ処理すべて=クラス ということなんですかね? すみません、「クラス定義」すら理解できていません・・・
それくらいは理解できてないとC#は使えないので 入門サイトや入門書読んで勉強しましょう
Firefoxのオプションダイアログのようなもの(上部のボタンでウィンドウの中身を 切り替える形のもの)を作成したいのですが、 その実装方法がわからず悩んでいます。 MDIにして子フォームのFormBorderStyleをnoneに設定し 切り替える方法でやってみたところ、ちらつきが出てしまいダメでした。 Firefoxのオプションダイアログにかぎらず、ウィンドウがひとつで中の描画だけ 切り替えるようなアプリの実装方法には、MDIの他にどういったものがありますでしょうか? 長文ですみませんが、よろしくお願いいたします。
そんな長文でもないと思うよ ・TabControlを使う ・Panelを重ねて置いて、ボタンを押したら該当Panel.BringToFrontで最前面にもってくる とか
95 :
デフォルトの名無しさん :2009/01/23(金) 12:11:30
public partial class ページ名: System.Web.UI.Page { なんらかの処理 } これがクラスで合ってますか?C#ではこれが必要だと。 publicは他のページでこのページの処理を使えるようにしている。 partialの意味がよくわからないのですが、1つのクラスを2つのファイルに分けると何かいいことあるのですか? あと、System.Web.UI.Pageってなんでしょう?ぐぐってもよくわからなかったのですが、そういう処理名ですか?
>publicは他のページでこのページの処理を使えるようにしている。 これは違う。クラスの前に付くpublicについては今は気にしなくてもいい。 クラスライブラリを作ったりするときに重要になる。 >1つのクラスを2つのファイルに分けると何かいいことあるのですか? VisualStudioのデザイナが自動生成したコードを分離できる。 >System.Web.UI.Pageってなんでしょう? あらかじめ用意されてるクラスの名前。継承元として指定してる。 こんなところでいちいち聞いててもキリないでしょ? まとめて勉強した方が早いよ
97 :
デフォルトの名無しさん :2009/01/23(金) 12:42:20
ありがとうございます。キリがなくてもいまいち入門サイトとか本見ても理解できないもので・・・ partialを使う事によって「ページ名.aspx.designer.cs」が生成されるって事ですかね? System.Web.UI.PageはASP.NETが用意していて、それを基盤に動かしたいと。
>>97 partialを付けなくても「ページ名.aspx.designer.cs」は生成されるが、
その場合、「同じクラスが2つもあるぞゴルァ!!」と怒られてしまう。
partialを付けることで、二つのファイルに分かれたクラス定義を1つにまとめることが可能になる。
> 1つのクラスを2つのファイルに分けると何かいいことあるのですか
コードジェネレータが生成するコードと、ユーザーが編集するコードを分けることで、
ユーザーが編集したコードがコードジェネレータに上書きされてしまう危険性が無くなるし、
ユーザーが編集するコードに余計なものが混じらないので、コードも見やすくなる。
ところで、本見ても理解できないって、どんな本を読んでるんだ?
99 :
デフォルトの名無しさん :2009/01/23(金) 13:28:56
知り合いの人が、「これからはC#の時代だから一番つぶしがきくのはC#だよ」 と言ってたのですが、同じ人が、「いつまでもWindowsの時代ではない。他の OSがたくさんでてくるから誰もWindowsなんて使わなくなる」とも言ってました。 これ矛盾してないですか? C#はWindows上でしかコンパイル(というの?作ること)できないできないですよね?
LinuxでもOK
全く矛盾してません
(´・ω・`)しらんがな。次。
Monoってのがあることはあるからぐぐるといいよ 基本的には聞き流しておけばおk
>103で十分だろ しかし > 「いつまでもWindowsの時代ではない。他のOSがたくさんでてくるから誰もWindowsなんて使わなくなる」 これはもう10年以上前から聞いてるような台詞だな
ごめんなさい。 103さんのでよく分かりました。
>>105 安心しろ
新しいハードウェアが出なくなってみんなが同じ構成のマシンを使うようになったら
俺がパーフェクトなOSを作る
109 :
デフォルトの名無しさん :2009/01/23(金) 14:24:47
>>98 ありがとう
作って覚えるVisual C#2005exples edition入門だと
クラス…共通の目的を持ったデータと処理を集めたもの
public…外部に公開する。他のクラスから呼び出すことができる
System.Web.UI.Page…本にないのでぐぐってもよくわからず
partial…1つのクラスを2つのファイルで分けて管理できるようにする宣言
ハァ!?!?って感じですた。
110 :
デフォルトの名無しさん :2009/01/23(金) 14:30:56
ちなみに猫でもわかるC#プログラミングだと 「クラスとは、オブジェクトの性質や動作を規定するDNAです。」 「DNAの遺伝情報をもとに生命が形成され、生命は活発に活動することができます。この、実際の生物がオブジェクトに担当します。」 「つまり暮らすを具体化して、物理的な実態となったものがオブジェクトです」 はあ?死ねよって感じでしたね・・・なにいってんだこれ
自分が馬鹿だって全世界に向けて叫ばないでいいから
112 :
デフォルトの名無しさん :2009/01/23(金) 14:49:02
>>110 そんな感じの説明って多いよな。
人とか動物とか例えている・・・。実際、人とか動物とかプログラムに関係ないのにな。
>>109 ハァ!?!?と思ったら本屋に行くといい。
ハァ!?と思った部分の解説を見比べることで
良い本と悪い本の見分けがつくよ。
全ての本でハァ!?と思うなら・・・ご愁傷様と言うしかないな。
114 :
デフォルトの名無しさん :2009/01/23(金) 15:15:50
変数宣言で Aaa aaa = new Aaa(Global.WebConfig); のGlobal.WebConfigってなんですか? ()の中が何もないのは、aaaの箱を作って使えるようにしてるってことだと思うのですが
こっちが聞きたいけどおそらくこういうこと WebApplication webApp = new WebApplication(設定ファイル)
116 :
デフォルトの名無しさん :2009/01/23(金) 15:27:02
Aaa = クラス aaa = インスタンス変数 Global.WebConfig = 何らかの値 aaaというオブジェクト(インスタンス変数)を作る際にGlobal.WebConfigの値で初期化しているもの。 インスタンスの生成時にコンストラクタが呼び出されるため、そのコンストラクタの引数として渡す。 日本語でわかりやすく説明すると、 赤色で軽自動車を生成するには、こんな感じ。 自動車 自家用車 = new 自動車(赤色,軽自動車); そんなことよりaaaとかいう名称は、つけてはいけない。 今だけではなく、あとからデバッグする時に何これ?になる。
private static bool TryGetAttributeValue(HtmlNode node, string xpath, string attrString, out string value){ value = default(string); if(node == null) return false; HtmlNode aNode = node.SelectSingleNode(xpath); if(aNode == null) return false; HtmlAttribute attribute = aNode.Attributes[attrString]; if(attribute == null) return false; value = attribute.Value; return true; } private static bool TryGetAttributeValue(HtmlNode node, string xpath, string attrString, out string value){ value = default(string); if(node == null) return false; HtmlNode aNode = node.SelectSingleNode(xpath); if(aNode != null){ HtmlAttribute attribute = aNode.Attributes[attrString]; if(attribute != null){ value = attribute.Value; return true; } } return false; }
118 :
デフォルトの名無しさん :2009/01/23(金) 15:41:25
>>117 インデントがされていないのでどっちも嫌。
上のほうが改行がされてて見やすい。
if(aNode == null)
return false;
という書き方は、どうも嫌なので…
if(aNode == null){
return false;
}
と書いてる・・・。
>>118 自分は
if(〜){
}
でなれた頃にその構文知ったから
ほとんど↑
120 :
デフォルトの名無しさん :2009/01/23(金) 15:44:12
1行でかけるときは { }なしにするが、 たとえ1命令でも2行にまたがるときは{ }をつけることにしてる。
取り敢えずネストはできる限り深くしない
ループも条件もネストは一回までと決めてる あとはswitch使う
一回まではやりすぎ
125 :
117 :2009/01/23(金) 16:39:21
ネストが浅くなるので上のほうが好まれるのかしら? まあ{つけるかとか{の位置とかは別の話として
ネストの深さとはずれるけど 「出口は一つであるべき」とか言って returnを複数書くのを嫌ったりする人もいるね
foreachで使う列挙体の項目をfoeach内でDisposeしたら即刻エラーになるので 該当項目をすべてDisposeするといった便利な使い方が出来ないのは言語的なバグですか?
128 :
デフォルトの名無しさん :2009/01/23(金) 16:49:35
どうも ブロックは、{ } で囲むという癖がついてる。
ネスト一回まではさすがに厳しいかもしれないけど どんどんだらしなくなる性格だし後から読むとき楽なので、あえて決め事してる コード量増えることもあるのはご愛敬
>>127 列挙体って何のこと。俺様用語は止めてくれる?
Disposeすることは例外発生の原因じゃないよ
どうせコントロールコレクションから要素をDisposeしようとしたんでしょ。
DisposeするとコレクションからRemoveされる実装もあるから。
while( collection.Items.Count > 0 ){
collection.Items[0].Dispose();
}
みたいにしたらどう
>>127 >列挙体
なのか?用語間違ってないか?
>言語的なバグですか? 自分の無能は棚上げですか?
ずいぶん厳しいインターネッツですねw 察してやれよw
>>132-
>>133 性格に難あり
どういう環境で育ったんですか?
>>135 性格に難あり
どういう環境で育ったんですか?
137 :
デフォルトの名無しさん :2009/01/23(金) 17:44:43
脳にバグ持ってる人は大変だねぇ
いやバグだな 0 1 2Dispose 3 4Dispose 5 C#ではこういったことが出来ない
>>139 分かるように実行可能なソースをアップしてくれんか
141 :
デフォルトの名無しさん :2009/01/23(金) 22:02:00
C#でOS作ったんだけど、フレームワークインストールして無いと動かないんですよね? どうしたらいいっすか?
C#という言語自体は.NET Frameworkとは無関係です 自分でネイティブコンパイラ作るなりCLI実装しちゃうなりすればおk
ネイティブで C# が動く、って OS があったな・・・
ネイティブでC#が動くというよりCLIを組み込んだOSだったような
それWindowsじゃん
singularity
Type.GetType(string)ではなくてType.GetType(class)って書けないのかな? ""で括ると候補でないし
typeof(型名)
NumericUpDownコントロールのMinimumを1に設定してもフォーム起動時には0になってしまいますが何故だろう
152 :
デフォルトの名無しさん :2009/01/24(土) 05:28:05
C#でのExcel操作(自動化)について質問があります。 C#からExcelのセルの幅や高さを変更したり、新しいシートを追加して そのシートの名前を変更、新しく追加したシートを操作するにはどうすれば良いのでしょうか?
"C#でExcel"でぐぐった上の発言であろうな?
>>153 色々やってシートの追加と名前の変更はできたのですが、Sheet1しか名前の変更ができない上に
セルの幅、高さの変更、追加したシートの操作ができません。
Sheet1のみの操作と名前の変更だけしかできないです。
VBA ではできてんの?
VBAは使った事がありません。
まず VBA でできることを確認してから、C# に書き直した方が早いよ。
名前付き引数を使わずにやってみたら?
>>159 すいません。まったく意味が分かりません…
コードでこのように書き換えたら良いという例を挙げてはいただけないでしょうか?
159氏じゃないが、エクセルの起動法は分かるよね? とりあえず、シート2の名前を変更して、それらのセルを操作する例 シート1は既に起動している物として話を進める 自分で設定したシートコレクション名を以下のコードに置き換えて試してみて //シート2を追加 Excel.Worksheet sheet2 = (Excel.Worksheet)シートコレクション名.Add(before, after, 1, Excel.XlSheetType.xlWorksheet); //シート1とシート2の名前を設定 シートコレクション名.Name = "シート1の名前です"; sheet2.Name = "シート2の名前です"; //セルに文字を入力自動化 シートコレクション名.Cells[1, 1] = "シート1のセルA1"; sheet2.Cells[1, 1] = "シート2のセルA1";
質問です。C#でバイト配列から部分バイト配列を探すには どうしたらいいでしょうか。 Cのstrstr()や、Pythonのbuf.index(sub_buf)のような処理です。
>>162 バカ正直に検索する作業に戻るんだ。たとえばこんな風に。
private static int FindSubArray<T>(T[] array, T[] subArray) where T : IComparable
{
int match = 0;
for (int i = 0; i < array.Length; ++i)
{
if (array[ i ].CompareTo(subArray[ match ]) == 0)
{
match++;
if (match == subArray.Length)
{
return i - match + 1;
}
}
else
{
match = 0;
}
}
return -1;
}
IComparable使ったらボックス化が発生しちゃうからジェネリックにした意味がないぞ IComparable<T>にするんだ
というか大小比較する必要はないんだからIEquatable<T>のほうがいいな それもwhereで指定すると単純に参照比較で探したいときなんかに困るから EqualityComparer<T>.Default使えば
対象がbyte[]と決まっているなら、文字列に変換しておいてIndexOf()という手もある。 string s1 = Encoding.ASCII.GetString(buf); string s2 = Encoding.ASCII.GetString(sub_buf); int p = s1.IndexOf(s2, StringComparison.Ordinal);
工エエェェ(´д`)ェェエエ工
168 :
162 :2009/01/24(土) 15:38:37
>>163 関数丸ごと書いてもらえるとは・・・感謝です。
バカ正直に検索する作業に戻ります。
>>164-165 すいません、マニュアルを読んでみましたが
不勉強でまともなレスが付けられません。
メモしたので後日振り返りたいと思います。
>>166 そういう方法もあるんですね。
byte[]からStringの変換にEncodingを使うとは
思っていなかったので参考になりました。
>>163 に
>>165 を適用するとこう
>>163 よりは桁違いに速いはず
private static int FindSubArray<T>(T[] array, T[] subArray)
{
EqualityComparer<T> comparer = EqualityComparer<T>.Default;
int match = 0;
for (int i = 0; i < array.Length; ++i)
{
if (comparer.Equals(array[ i ], subArray[ match ]))
{ //あとは同じ
だな。今回の場合、むしろASCIIEncoingが0x80-0xffのデータを受け付けないほうが問題だ。 無理矢理でもnew string(a.Cast<char>().ToArray())とか、 a.Aggregate(new StringBuilder(a.Length), (sb, c) => sb.Append((char)c)).ToString()とかで持っていくほうがいい。
BitConverter.ToString
\u003fに置き換えられるのをもって受け付けるといわれても…
Dictionary<AAA, BBB>のコレクション中から、BBBの条件によって要素を削除したいのですが foreachで列挙しながらRemoveすると、列挙子が無効になって例外が発生します。 あらかじめ削除する要素を全部列挙してから、その後にRemoveするしかないんでしょうか?
一旦Keysを配列にコピーするとか
>>176 それ以上にスマートな方法は思いつかないなあ。
List<AAA,BBB>に投射しておいてRemoveAll()とか、考えられなくもないけど。
179 :
178 :2009/01/24(土) 22:41:06
間違えた、List<KeyValuePair<AAA,BBB>>だ。
> あらかじめ削除する要素を全部列挙してから、その後にRemove を静的クラスに書いておけば拡張メソッドで呼び放題だよ!
foreachのin ○○の後に.ToArray()と書けばおk
>>180 こんな感じか? メモ帳で書いただけで検証してないけど。
public static void RemoveAllByValue<TKey, TValue>(
this Dictionary<TKey, TValue> dictionary, Predicate<TValue> match)
{
List<TKey> keys = new List<TKey>();
foreach (TKey key in dictionary.Keys)
{
if (match(dictionary[key]))
{
keys.Add(key);
}
}
foreach (TKey key in dictionary.Keys)
{
dictionary.Remove(key);
}
}
183 :
176 :2009/01/24(土) 23:27:22
列挙しながら削除はできませんか。 削除するのに別途メモリ確保するのは違和感あったのですが、仕方ないんですね。
>>183 削除するんじゃなくて最初から条件を満たす要素を Dictionary に入れなければいいんじゃね?
(゚ε゚)キニシナイ!!
186 :
デフォルトの名無しさん :2009/01/24(土) 23:35:48
コピペ君って馬鹿だな、まで読んだ。
ThreadPool.QueueUserWorkItemで実行されるスレッドで Thread.CurrentThread.PriorityをデフォルトのNormal以外に変更してみたところ 問題なく変更でき、優先順位もちゃんと反映されているようです。 終わった後はNormalに戻されてました。 この挙動を期待して書いてもいいのでしょうか? MSDNをざっと見たところ、この事について書いてないようなのですが…
>>188 文書化されてない以上その性質に頼るべきではない。
ちなみに.NET1.1では再利用したスレッドに変更したプライオリティやスレッド名は引き継がれている。
あとMonoの場合はLowestから変更できなかった。いろいろ複雑だ。
190 :
188 :2009/01/25(日) 17:50:04
>>189 ガビョ〜ん、そうなんですか。
ありがとうございました
191 :
デフォルトの名無しさん :2009/01/25(日) 21:02:05
VisualStudioが自動で書いたコードなんだけど、 using System; using System.Windows.Forms; というのがあったんだけど、一行目だけでよくないですか? Systemの中にWindowsもあるんでしょ?
ないよ 名前空間はそれぞれ独立してる 見易さのためにピリオドで区切ってるだけ
名前空間ってその名の通り名前の一部にすぎないんだよ
using System; だけで System.* がすべてインポートされるなら、 名前空間を分けた意味がないじゃないか。
そもそもグローバル名前空間はすべての名前空間を含んでるんだから 何も書かなくても全てインポートされるはずだな
SystemだけってのはExplorerでいうマイコンピューターみたいなもの?
PCのCPUみたいなものでは
Systemで指定されるものにSystem.Windows.Formsは入ってないとするなら Systemだけで指定されてるのって何だとなるわな。
201 :
デフォルトの名無しさん :2009/01/25(日) 21:39:09
ためしにusing System;を抜いてみればわかるお
>>198 コレッ。 手元にVSない状態で、妄想で会話するな。
これ、自称非初心者の俺様も実はよくわかってない
リフレクションは遅いと聞くと MethodInfoとかを静的フィールドにいちいち持っておきたくなるけど、 システムでキャッシュしてるそうだから効果なかったりする? 使うたびに作り直すのとどっちがいいかな?
そこら辺は言語によっていろんな考え方があるよね。 C++だと、using System;相当のものを書けば、Windows.Forms.Hogeと使えるという風に 入れ子の名前空間にもusingの効果が及ぶ。 C++から来た人間としてはそこにはまりそうになった。
>>204 CreateDelegateで取得したデリゲートをキャッシュするのが最速
だから、System も System.Windows.Forms も System.Collections も、 全部同じレベルなんだよ。
なんかフォルダみたいだね。 Systemフォルダの中にWindowsがあってその中にFormsがある。 SystemフォルダにアクセスしたからってFormsにアクセスするわけではない。
一応フォルダ状の構成なんだよね? でも宣言はさらに下位のフォルダの中には及ばないってことなんだろう。
違う。C#ではあたかもネストしてるように見せかけてるだけ。
namespace System { namespace Windows { この中ではSystemの型にアクセスできる } } C#でこういう風に書けるのは単なるシンタックスシュガーみたいなもの。 本当に階層になってるわけではない。名前空間はあくまで型の前に付く名前。
だから、今、開いてるフォルダの中のファイルしか使えない。 例えば、C:\Windows\System\ を開いてるなら その中のファイルにしかアクセスできない。 その下のC:\Windows\System\Form\ にあるファイルを開きたいならC:\Windows\System\Form\を開かないといけない。 ただ、わかりやすいようにカテゴリーに分けられているだけ。 極端に言えば System.Windows.Forms ではなくWindowsForm という名前でも良かった。 ・・・しかし、それではわかりにくく管理しにくいことからSystemのWindowsのFormsというように分類したまでの話。
どっちなんだよw ネストしてるのか(フォルダ的) 別もんなのか
System_Windows_Forms なら理解してくれるんじゃまいか?
難しく考えずに、フォルダとその中でいいんじゃない? コンソールでパスを通したことがあるなら、イメージ的にはusingはそれと同等って感じ。
フォルダの中にフォルダはあるけど名前空間の中に名前空間は無いの もっといえば,名前空間なんてものは単なる飾りなの
それよりギガ株を自社株買いで半値を割らせないようにしているけど その評価でBPSを出してくるのは認められているの?。 グレーゾンも粉飾紛いに見えてしまう。
219 :
218 :2009/01/25(日) 22:35:50
スマソ、ごばく
SystemとSystem.Windowsは同じ列なんだな。 Systemの下にSystem.Windowsがあるのかと思ってた。
221 :
191 :2009/01/25(日) 22:38:53
たくさんの方に答えていただきありがとうございました。 というか、ここの人でも議論になるような疑問を持ててちょっとうれしかったです。
>>214 C#の概念ではネストしてる(フォルダ的)
MSILの概念(=リフレクションで扱える情報)ではネストしていない
(SystemとSystem.Windowsの間に親子関係はない)
usingの効果は、たとえば using System.Text;と書いておけば毎回System.Text.StringBuilderと 書かなくて済むというだけの話でしょ。 で、using System;とだけ書いても、Text.StringBuilderと書けるようには ならない、と。
>>206 おお
確かにDelegate実行は大分速いみたいですね
だけどこれMethodInfoにしか使えませんね
プロパティだって結局メソッドなのにPropertyInfoに使えないというのは
>>224 プロパティにも使えるよ
PropertyInfoのGetGetMethodやGetSetMethodでアクセサのMethodInfoが取れる
フィールドの場合は面倒だけどEmit使ってメソッドを動的に生成してやるしかない
EventInfo も同じ感じだな。少しは ILDASM あたりでメンバが
各々どうなっているか眺めてみれ
ちなみに
>>225 のフィールドの場合のヒントは DynamicMethod な
フィールドの値の取得だけならExpression.Field使えば簡単だけどな
.NET製のソフトってそれ自体ではなく、JITコンパイラの起動が遅いの?
BinaryFormatterでシリアライズしたデータをデシリアライズしようとすると、 TypeLoadExceptionHolderがなんとかというエラーが出てきてデシリアライズできないのですが、 シリアライズができてデシリアライズができないというのはどんな原因が考えられるのでしょうか?
他で開きっぱなしで、開く権限がないとかかなぁ。 それか、テスト用として、保存直後に読み込んでて、 using とか Close とかしてなくてちゃんとフラッシュされてないか。 あとは、保存する時に、 ファイルを Create とか Truncate じゃなくて、 Append とか Open で保存しちゃってて不正なバイナリになってるとか。
>>230 多分そこら辺は問題ないと思います。というのも、それが起こるのがこのアセンブリで定義した
型をシリアライズした時のみで、それ以外の本体やプラグインで保存したデータについては全く問題ない
ためです。試しに、
[Serialize]
class TestData { }
というクラスをシリアライズして保存してみましたがそれでも上のエラーが飛んできます orz
BinaryFormatterを使っていてSerializeAttributeをつけ忘れてSerializationExceptionが飛ぶ
ということはありますが、ArgumentExceptionなんて飛んできたことないよ orz
>>231 [Serialize]→[Serializable]
でした orz
例外を正確に書いてみそ
>>233 エラーメッセージは
型 'System.Runtime.Serialization.TypeLoadExceptionHolder' のオブジェクトを
型 'PluginTest.IPluginData' に変換できません
と…
変換先の型名はちょっと変えてますが、それ以外は全く一緒で、SerializationExceptionではなく
ArgumentExceptionで飛んできます。InnerExceptionはnullでした。
>>234 そのコードを新しいプロジェクトとかで書いても同じ例外が投げられるの?
だったらそのコードをさらしてくれ。
>>235 新しくプロジェクトを作成し、すべて同一にすると同じ例外が飛んできますが、
名前空間を変えると飛ばなくなりました。
プロジェクト全体を確認してみましたが、名前空間とクラス名がダブっている訳でもなかったのですが…
なんだこれ orz
よく分からんけど関係するアセンブリをGACに登録してるとかない? ローカルのアセンブリよりGACのが優先してロードされるので、 期待したのと違う動きをすることがある。
>>237 してないです。ngenとかも動かしてないのでキャッシュされたのがロード
されてるわけではないと思います。
.NETのインストールでもミスったんでしょうか…
VS2008でソースとかシンボルとか落としてきてSerializeの中追っかけてみたら何か分かるかもね
ある別の型(T)に変換できることを表すインターフェイスは無いの? IConvertible<T>みたいな
標準ライブラリには無いな
is T じゃだめなのか?ダメだな。
クラス名にOfとか使うのってどうなんだろう。 たとえばContainerOfImage、ContainerOf3D、といった感じの名前の付け方。似た機能のクラスの頭文字が統一されて見やすいとは思うんだけど。
不自然 英語としてどうかは置いといて,普通は見かけないから激しく違和感を感じる Ofのかわりにアンダーバー使ったりする方がまだ綺麗な気がする
○○Of(引数)の形を除けば,メンバ名にもOfってあんまり見かけないよね
別に Of なくてもいいと思う。 先にカテゴリを記述する命名スタイルは普通にある。 Of を名前に入れるのは、Of 込みで1つの熟語になってるようなものくらい。
DialogColorやStreamStringじゃ全然違う意味になっちゃうよ
全部そう言う命名で統一されていれば気にならないもんさ。
>>240 変換出来るかどうかを知るだけなら、TypeConverter拾ってきて
CanConvertTo(), CanConvertFrom()で良いと思う
C#で複数ファイルを一つに暗号化した上で纏めるツールを作ろうと思っているのですが、 例えば、次の3ファイルを1ファイルに纏めるにはどうすれば良いでしょうか? ※また、一纏めにするだけではなく、パスワードを入力する事により暗号化した上で1ファイルに纏めたい と思っています。当然複合化もしたいです。 【暗号化_前】 AAA.xls BBB.xls CCC.xls 【暗号化_後】 ABC.xls 【パスワード】 abc_dayo
7zip32.dllでも呼べば?
ふぇ…
ふぇっくしょん!
256 :
デフォルトの名無しさん :2009/01/27(火) 12:26:20
if なんらかの条件 { なんらかの処理 } ボタン処理 のプログラムでなんらかの条件に当てはまったときにボタン実行が行えないようにするにはどうすればいいでしょう? プログラム自体わけわかめで日本語でおkは重々承知ですが、エスパーさん助けて;;
if なんらかの条件 { なんらかの処理 } else { ボタン処理 }
258 :
デフォルトの名無しさん :2009/01/27(火) 12:59:42
まさにそのとおりのプログラムなのですが if なんらかの条件 @ { if なんらかの条件A { なんらかの処理A } else { なんらかの処理B } } ボタン処理 となっていて、なんらかの条件Aのときにボタン処理させないようにしたいので、頭ぐちゃぐちゃーとなっています。
なんらかの処理Aの最後でreturn;すればヨイヨイ
260 :
デフォルトの名無しさん :2009/01/27(火) 13:05:03
リターンよくわかってないです。調べてみます。ありがとう
if なんらかの条件 @ { if なんらかの条件A { なんらかの処理A } else { なんらかの処理B } } else { if なんらかの条件A { なんらかの処理A } else { ボタン処理 } }
なんらかのがゲシュタルト崩壊した
まあreturnで解決できる場合もあるし関数分ける手もあるが、 どんな場合でも対応したいのならば、 bool b = なんらかの条件 @; if (b) { なんらかの処理 とかいろいろ } if (b) { ボタン処理 } みたいに保存しておいて後で使ったりできるぞ。
if (!b) { ボタン処理 } だった。。。
>>258 bool ボタン処理するフラグ = true;
if なんらかの条件 @
{
if なんらかの条件A
{
なんらかの処理A
ボタン処理するフラグ = false;
}
else
{
なんらかの処理B
}
}
if (ボタン処理するフラグ)
{
ボタン処理
}
結局、
>>258 のやりたいことがなんなのかよく分からんかった。
単純に牡丹を押した時の処理を分岐させたいだけだったのか、
それとも一定条件下ではボタンそのものを押せないようにしたかったのか・・・
なんだっけ、MVCの類似だか発展版みたいなやつで
こういうのをスマートに解決する方法があったような。
267 :
デフォルトの名無しさん :2009/01/27(火) 13:59:42
ご飯行ってました。ありがとうございます。参考にして書いてみます。
268 :
デフォルトの名無しさん :2009/01/27(火) 14:02:57
>>266 一定条件下ではボタン押しても処理させないようにする ですね。
具体的に言うと、保存ボタンなので、データベース更新させないようにする、ですかね。
権限チェックをして、誰々なら見ることはできるけど、保存はできないという。
つーか押しても何も起きないんだったら押せなくすべきじゃね? と思ったら何か起きるのか でも保存ボタンで保存されないのは嫌ね
270 :
デフォルトの名無しさん :2009/01/27(火) 14:18:52
押せなくする方法がわからんとです
権限管理を、そんなあちこちでアドホックにやってたら漏れるぞ。
272 :
デフォルトの名無しさん :2009/01/27(火) 14:37:51
ButtonSubmit.Attributes.Add("onclick", "return confirm('ダイアログに出るメッセージ');"); で、ダイアログに出るメッセージを変数に変えて、変数の中身を表示させるにはどうすればいいのでしょう。 ButtonSubmit.Attributes.Add("onclick", "return confirm('MSG01');"); でMSG01の中身をメッセージとして出したいのですが
>>260 do { ... } while(false);
にして、breakすれば良い
>>270 ボタンのEnabledプロパティをfalseにするんだ
>>272 ButtonSubmit.Attributes.Add( "onclick", "return confirm('" + MSG01 + "');" );
276 :
デフォルトの名無しさん :2009/01/27(火) 15:13:09
おおお ButtonSubmit.Enabled = false; たったこれ追加すれば使用不可にできました。ありがとう〜
データグリッドビューで質問があります。 データグリッドビューの列を1から10まではユーザーが任意で追加する事ができるが、 それ以上は追加できなく(メッセージなどで「追加できません」と表示)するにはどうすれば良いのでしょうか?
void hoge(EventHandler handler) { } 引数で渡されたデリゲートが、匿名メソッド・ラムダ式かそうでないかを判別する方法って無いですよね・・・?
279 :
デフォルトの名無しさん :2009/01/27(火) 15:22:29
>>275 できましたー!ありがとうー!”++”が必要なのかぁ。こういうの載ってる本ないですかねー。
C#の解説書で載ってないものは無いだろう
283 :
282 :2009/01/27(火) 15:54:54
ああ、型名だとstaticなときに駄目だな じゃあ、メソッド名の方で
>>277 this.dataGridView.AllowUserToAddRows = false;
1〜10まではあらかじめデフォルトの数値を入力しておけばおkだと思う。
285 :
デフォルトの名無しさん :2009/01/27(火) 18:02:13
テキストボックスで入力された値を変数に入れる A=〜; B=〜; C=〜; ・・・ 変数が正しいかチェック (日付や金額の桁) 正しかったらBoolでTrueを返す if全部正しいとき 保存処理を行う else 本処理終了 みたいな感じでプログラムを組みたいのですが、全部正しいときって A==True && B==True &&・・・・・ みたいな感じでやっていくのですか? またもうまく説明できない(´ω´)
A && B && Cでいい
287 :
デフォルトの名無しさん :2009/01/27(火) 18:10:03
全部False 日付も金額も合ってないときも保存処理行われちゃいません?
おまえは何を・・・ &&でつないだら全てtrueの場合だけ条件に一致するよ
おまえは全部ここで質問するつもりか 仕事じゃねーのそれ? 本でも買って読めや低能
290 :
デフォルトの名無しさん :2009/01/27(火) 18:25:11
>>288 どうして&で繋ぐとtrueになるかわからないのですが、そういう仕様なのですか?
&&は論理積の演算子どれか一つでもfalseならfalse
292 :
デフォルトの名無しさん :2009/01/27(火) 18:30:21
A && B AとBが両方trueのときtrue でなければfalse A || B AかBのどちらかがtrueのときtrue 両方falseならfalse
293 :
デフォルトの名無しさん :2009/01/27(火) 18:31:27
>>291 なるほど。どこかで見た&&は、かつ ||は、または と日本語変換してたのがいけなかったですね。
294 :
デフォルトの名無しさん :2009/01/27(火) 19:09:05
日付チェックは public static bool IsDate(int iYear, int iMonth, int iDay) { if ((DateTime.MinValue.Year > iYear) || (iYear > DateTime.MaxValue.Year)) { return false; } if ((DateTime.MinValue.Month > iMonth) || (iMonth > DateTime.MaxValue.Month)) { return false; } int iLastDay = DateTime.DaysInMonth(iYear, iMonth); if ((DateTime.MinValue.Day > iDay) || (iDay > iLastDay)) { return false; } return true; を参考にしようと思うのですが、どう自分で作った変数を当てはめていいのかわからないのですが、わかる方ご教授ください。
295 :
デフォルトの名無しさん :2009/01/27(火) 19:16:20
new DateTime(year,month,day) ってやれば間違ってた時例外かなんか投げてくれるんじゃないの
変数なんか一つも作る必要ないんじゃないか?
297 :
デフォルトの名無しさん :2009/01/27(火) 19:23:26
自分もそう思うのですが、データベースを直接扱うのはよくない。エラー原因やチェックがしやすい。 という理由で、テキストボックスとかで入力した値を変数に入れるそうです。あんまりよくわかってないですが
>>291-293 その覚え方は危険。
&&と||は論理積ではなくショートカット演算子。
まずAを評価して、その結果によってはBも評価する。
A&&B デフォルトはfalse。Aがtrueの時のみBが評価される。Bがtrueならtrue。
A||B デフォルトはtrue。Aがfalseの時のみBが評価される。Bがfalseならfalse。
300 :
デフォルトの名無しさん :2009/01/27(火) 20:11:50
>>299 なるほどー。わかりやすいですね。ありがとう。
わからない単語とか検索すると、たいていトップにマイクロソフトのヘルプみたいな解説が出てくるけど、すごいわかりにくいですな
MSDNは英語で読むに限る
>>299 論理積は論理積だよ
ショートサーキット評価するだけで
去年買っておいたデザインパターンの本(C#)を読んでるんだけど目から鱗だ 何でもっと早く読まなかったんだろう
>>299 ということは
if(A()&&B()){
〜
}
とあったとき
A()でfalseが帰ってきたら
B()が呼ばれないんですか?
そうだよ if( A() & B() ) ならBも呼ばれる
>>304 そのとおり。
if (A()) {
if (B()) {
〜
}
}
と等価です。
>>305 成る程
順番によっては値が変わることもあるのか…
ありがとうございます
>>303 だからってobserverとかinterpreterとかはそのまま使っちゃダメだよ
イベントやforeachとしてC#に組み込まれてるからな
他にもデリゲート使うと非常に簡単になるパターンは多い
A()&&B()の場合、A()の結果次第でB()が呼ばれるかどうか決まる。 A()&B()の場合、両方呼ばれるが、(結合規則とは無関係に)どちらが 先に呼ばれるかは不定。
310 :
308 :2009/01/27(火) 23:07:42
×interpreter→○iterator
いまさらだけど A == B と A.Equals(B) ってどっちがお勧めなの?
&&や||の場合が両表評価するじゃなかったっけ?
>>311 目的による
参照比較したいならObject.ReferenceEqualsが確実
値の比較がしたい場合は
==, IEquatable<T>.Equals, Object.Equals (左ほど優先)
の中から実装されているものを使えばいいと思う
質問です。 開いたウィンドウを閉じたいと思います。 アプリケーションの場合は、 Process hProcess = Process.Start("Notepad"); if (! hProcess.CloseMainWindow()) {hProcess.Kill();} でできるのですが、エクスプローラの場合、 Process hProcess = Process.Start("explorer"); とすると、ハンドルされていない例外が発生し、「オブジェクト参照がオブジェクトインスタンスに設定されていません。」となります。 どのようにしたらよいか教えてください。
>>318 hProcessがnullなんじゃね?
Process.Startの戻り値は
>プロセス リソースに関連付けられた新しい Process コンポーネント。
>プロセス リソースが起動されなかった場合は null (既存のプロセスを再利用した場合など)。
シェル(explorer.exe)の場合、新しいフォルダを新規プロセスで開く設定にしてないと
プロセスは作られないよ
だっふんだ!m(__)m
2つ以上の評価をするときに使えそうだな
>>323 たしかにレビューはあれだw
でも書名出してくれてありがとう
>>320 おお。なるほど。explorerを新規プロセスで開く方法は?
(´・ω・`)しらんがな
328 :
デフォルトの名無しさん :2009/01/28(水) 05:02:41
C#でのExcel操作(自動化)について質問をさせてください。 dataGridViewから入力した内容を取り出し、Excelに出力をしたいのですが 以下のコードの時、数値を入力した場合のみ、「数値が文字列として保存されています」と表示され、エラーが発生します。 どのようにすれば文字列ではなく数値で出力をする事ができるのでしょうか? string[,] table = new string[10,1]; for (int c = 0; c < 10; c++) { table[c, 0] = dataGridView1.Rows[c].Cells[0].Value.ToString(); } sheet.get_Range("A1", "A10").Value2 = table;
object[,] tableにしてToString()しなきゃいいんじゃね?
330 :
初心者 :2009/01/28(水) 14:28:58
C#.NETについて質問させてください。 MVCアーキテクチャでWebサイトを構築していますが、XMLファイルより、 使用クラス名を読み取り、動的に使用クラスのインスタンスを生成する為に、リフレクション 機能を使用したいのですが、Type.GetType()メソッドやAssembly.GetType()メソッドなどの 戻り値がNULLになってしまいます。GetType()メソッドを使用するクラスと同じファイルに、 インスタンス生成したいクラスのクラス定義を書くとうまくいくのですが、別ファイルにすると、 うまくいきません。 詳しい方ご教授お願いします。
完全限定名で書いてないとかそんなんだろ 初心者名乗る奴がリフレクションとかどうよと思うけど
Dictionary<Key, Value>と同様な追加/削除/検索が行えて ValuesプロパティがObservableCollectionみたいに変更通知機能がある そんなコレクションってありませんか?
Dictionary<,>とObservableCollection<>の両方をラップした IDictionary<,>の実装クラスを作ればいいよ ほとんど丸投げだからそんなに手間はかからない
334 :
デフォルトの名無しさん :2009/01/28(水) 17:22:34
パラメータをバインドする機構がない ってどういう意味ですか?初心者にはさっぱり
コンテクスト(文脈)って知ってる?
文脈って意味じゃないでしょうか?!!!!
そういえばインデクサやStreamのサイズ指定はint型だけど 64bit環境だとどうなるの? アドレス空間が64bitになっても4GBに縛られるの?
>>337 uintでないから2Gだな。
しかし、ストリームなら2GBずつRead/Writeすればいいし、
List<T>でもTが例えば16バイトの構造体なら全部で32GBまでいける。
もっとも、そんな大量のメモリを一度に扱おうというのなら、
まだまだネイティブなコードのほうがいいだろうと思うのは俺だけか?
インデクサはどんな型でも使えるだろ。
配列の添え字はlongでいけなかったっけ?
NativeIntなんで64bitプロセスなら可能のはず
>>340 配列の添え字にはlong型の値も使える。
そのため、配列にはint型のLengthプロパティに加えてlong型のLongLengthプロパティもある。
32bit環境でも一応、
int[] arr = new int[ long.MaxValue ];
と書けるし、コンパイルもできるのだが、
>>341 の言うとおり、NET.Framework内部では配列の
添え字をNativeIntで処理しているので、実行するとOverflowExceptionが発生する。
内部でNativeIntの範囲を超える添え字を扱えるようにしても、そんな配列を確保した時点で
メモリ不足に陥るのは自明なので、合理的な仕様なんじゃないだろうか。
343 :
テラ初心者 :2009/01/29(木) 17:01:11
引数・・・メソッドを呼び出す際に渡す情報のこと。 なんのことかサッパリわかりません。メソッドもなんかの処理なんだろうなあ位にしかわかってません。 何がなんのために何に何の情報を渡しているのですか????
まず@ITのC#入門でも読め
釣りでしょ
TVのリモコンでチャンネルの上下は引数なしだが、一発選局はチャンネル数が引数といえる。
tv.SelectChannel(-1, CURRENT) とか書きうるわけだが
せっかくメソッドにしてるのだから Up() Down() だろ。 なんで使いにくくするんだ。
リモコンのボタンで、CURRENT、-1、チャンネルチェンジと押すわけですね、その形式だと。
350 :
デフォルトの名無しさん :2009/01/29(木) 17:55:29
ほむほむ。ありがとう。Voidとかで引数を返さないっていうのはどういうメリットがあるというか、どういうときに使うのでしょう? チャンネルでいうと、8ちゃんボタン押しても数字が入っていないので何も起こらないのかな。
voidで値を返さないメリットがあるかじゃなくて 値を返すメリットがないからvoidなんだろ
それ引数じゃなくて戻り値では
353 :
デフォルトの名無しさん :2009/01/29(木) 18:10:46
private void CalcButton_click(object sender,EventArgs e) { } 作って覚えるC#の本より引用なのですが、これからVoid取っちゃうと何か不具合ありますかね?
やってみればわかる
イベントから学習しろ
357 :
デフォルトの名無しさん :2009/01/29(木) 18:15:19
なるなる。ありがとう。やっぱり読むだけじゃ覚えれなそうですね 6年前のPCにVisualStudio入れたら重くなって挫折してしまいました
358 :
デフォルトの名無しさん :2009/01/29(木) 18:17:08
デフォルトのvoidさんは無いのか。 2CHよりひでーな。
>>357 csc.exeのあるディレクトリにPATHだけ通せば
あとはコマンドプロンプト+エディタで最低限の環境が揃うぞ
ネットで適当に調べてやってみるといい
頻繁に呼ばれる関数で newを使うのって速度かなり落ちますか? 画像データ用の領域で、一度に640*480*4バイト確保します。
関数を呼ぶのに new は必要ない。
落ちますか? ってやってみればいいじゃない newを使うかどうかよりも1MBを頻繁に確保するのは重いかもね ワーキングセットも大きくなるだろうし
コンピュータの性能が良すぎて問題ないという可能性もある。 まずは率直な書き方で作ればいい。
キャッシュしても問題ない構造ならとりあえずキャッシュするようにしといてもいいとおもうよ 手間かかるものでもなし
ArrayListやList<T>において、 list.Add(new T()) といった感じで配列に追加している場合、 削除系メソッド(Clear、Remove、RemoveAllなど)実行したときに配列内のクラスのインスタンスは 開放されないのでしょうか?
その要素を他が参照してなかったらGC対象になる
>>371 そういうことなのですね。ありがとうございました。
"バイト"や"キログラム"のような単位を表す文字列を 設定されたカルチャに応じて取得できるクラスないですか?
標準ライブラリには無い 複数形とか考えると多分作るのは不可能に近い
不可能ってこたねえだろ
俺もそんなクラスほしい 標準であってもいいよね 関係ないけど「OK」「キャンセル」「適用」 とかも欲しかった
378 :
デフォルトの名無しさん :2009/01/30(金) 19:14:29
ってか、C#おもろいけど、GUI案件がないからモチベあがんないんだよね。言語的にはいいんだけど。 しょうがないから、ASP.NETもじもじやってる。
379 :
デフォルトの名無しさん :2009/01/30(金) 19:47:32
C#とついでにSilverLigitもやったんだけど、案件が全然ねえ(;´д`)俺は馬鹿だったのか?
わざわざ.netを指定してくる企業って皆無では・・・
おれずっとc#でやってたよ。MSとちょっと関係ある会社だけど
VS2008 + .net2.0 dirフォルダ内のサブフォルダの中身も含めたファイルの個数を出したいです。 using System.IO; string[] files = Directory.GetFiles( dir, "*", SearchOption.AllDirectories); として、files.Length を数えてるんだけど、ファイル数が5000とかあるフォルダを 検索しなくちゃならないので、さすがに遅いです。 この段階ではファイル名のstringは使わないので、個数だけで良いのですが、 サクっと出せるような方法ありませんか?
ないよ 遅いのは結局IOであってファイル名とかはほぼ関係ない
385 :
デフォルトの名無しさん :2009/01/30(金) 21:01:30
Rectangle rect; rect = null; としたところ、Rectangle 型なのでnullは入れられないと言われました! VB.NETだと、どんな型の変数にも Nothing を入れられるのでつい同じかと 思っていました。どうやったら同等の処置が可能でしょうか、よろしくお願いします。
VBでも本当にNothingを入れることはできないよ Rectangle? rect; rect = null; ※使うときはRectangleにキャストすること
>>385 Rectangleは値型だっけか。これでどうだ。
Rectangle? rect = null;
>>385 VB の Nothing は null じゃなくて Zero Fill な値(既定値)だからな
C# 的には null と既定値は区別される。C# 的には VB の Nothing
は default(T)。
なので VB の Nothing 代入に近いのは
var rect = default(Rectangle);
だぁね
389 :
デフォルトの名無しさん :2009/01/30(金) 21:15:16
>>386-387 どうもです。やってみましたところ、キャストを入れた上で一応解決かと思った
のですが、一つだけ問題がでました。Contains()メソッドを使っているところで
'System.Nullable<System.Drawing.Rectangle>' に 'Contains' の定義がありません
というエラーとなりました。これは
if ((Rectangle)rect.Contains(e.Location))
{・・・}
のように使ってみたのですが、他の書き方しないとだめでしょうか。
390 :
デフォルトの名無しさん :2009/01/30(金) 21:18:27
>>388 ご教示どうもです、知りませんでした。
>なので VB の Nothing 代入に近いのは
>var rect = default(Rectangle);
こういうのもあるんですか!この場合は
if (rectG != null){・・・}
のように使えるでしょうか。そうだ、やってみます。
((Rectangle)rect).Contains
>>390 できません
rectG!=default(Rectangle)ならできるけど(0, 0, 0, 0)とは区別できないよ
defaultはgenericで使うことを前提に作られているんで若干癖がある。 Rect(0,0,0,0)に初期化することが目的なら var rect = new Rectangle(); 未初期化のRectangleが欲しいのなら Rectangle rect; でいい。
>>390 おおっと。
いや VB 使っているうちは VB の流儀でいっていいと思うんだが
C# に来たんだから C# の流儀にあわせて区別しような。
Rectangle? val = null;
のほうを使えってことだけど。
>>389 のほうは rect.Value.Contains(e.Location) な。
null だったら例外出るが。例外がいやなら
if( rect.HasValue && rect.Value.Contains(e.Location) )
かね。
394 :
デフォルトの名無しさん :2009/01/30(金) 21:24:56
>>391 >((Rectangle)rect).Contains
早速ありがとうございます、これで大丈夫でした、助かりました。
>rectG!=default(Rectangle)ならできる
わかりました。いろいろご教示ありがとうございました!
皆様本当にありがとうございました!またよろしくお願いします!!
うぽ! (rect ?? new Rectangle()).Value.Contains(
っていうかVBでも値型をNothingと比較するのはダメだろ
ゼロ初期化されたものと同じとわかっててやるならいいけど,
>>394 はわかってなさそう
397 :
デフォルトの名無しさん :2009/01/30(金) 21:31:15
Rectangleをnullと初期化したあとにどう使うんだろう・・・
フラグ代わりだよ Rectangle rect; bool isRectAssigned; みたいなのってよく出てくるだろ これを一つにまとめたのがnullable
IList<T> list = new List<T>(); とかやってたら、IListの方にはForEach()がなくて涙目なんだけど、そういうもんなの?
ForEachぐらい自分で書けばって
nullable ってキモいからまだ使ったことがないな すこし慣れてみるか……
拡張メソッドで自作するのは簡単 でもEnumerable.ForEachが無いことを考えると,素直にforeach書けということなんだろうと思う
WPFではShowDialogの戻り値がbool?になってたりするね
正確に20msで処理をしてFORMのPictureBoxを触りたいときは、 BackgroundWorker+System.Timers+AutoResetEventでいいですか? 他にもっといいやり方があるんなら教えて欲しいのですが…orz
406 :
デフォルトの名無しさん :2009/01/30(金) 22:57:49
>>405 > 正確に20ms
まずこれが難しい。timeBeginPeriod か MMCSS 使えば
ある程度いけるかもしれないけど、あくまである程度。
さらにいいやり方となると Forms 使うのが間違ってる。
20msは厳しいんじゃないの 更新間隔は20msよりも長くして, そのつど経過時間を計測してそれから計算してその結果をもとにしてPictureBoxを更新したほうが
コールバック間隔は,Application.Idleイベント使うなり自分でメッセージループ回すなりして その中でStopwatch使って時間計測すればある程度正確にできるけど フォームの更新が20msでは絶対無理
20msってどこから来たの? 測定機械のタイミングとか? GUIの更新は後回しにした方がいいんじゃね?
410 :
デフォルトの名無しさん :2009/01/31(土) 00:53:40
20msってWindowsのインターバルタイマーで拾えるの? 割り込み上がっても、処理が間にあわん気がするんだけどね リアルタイムOSでというのなら分からんでもないけど。 #組み込み用が対象なのかな? 割り込み->データをFIFOQueueに追加->queueのデータをGUI処理 になるんだろうけど(sharedメモリ経由か) #割り込みコンテキストってWinにはあるのかな?
いつも思うんだが、なんか2chって日本語として成立してない質問でも適当にESPを働かせて、
(というより、回答する側も他人の文章を正確に読解する能力がないだけ、という方が
より真相に近いと思うんだが)回答する奴が多すぎないかね。
>>405 「正確に20msで処理をして」とはどういう意味?
正確に20ms間隔でイベント処理をしたい、って意味なの?
いずれにしても、「正確」という表現はもっと定量的な表現にする必要があるだろ?
仮に20ms間隔でGUIを更新したい、って意味だとしたら、
今時のPCなら単純にSystem.Timers.Timer使っても±5ms以内の誤差で可能だと思うけど。
少なくとも、平均速度として50回/秒が実現できればいいということなら
(意味があるかどうかは別として)ほぼ確実に出来ると思う。
もちろん糞重い描画処理をしてたらあっという間に破綻するけど。
いざとなったらスレッドでThread.Sleep(0)と、Stopwatchをポーリングして
20msごとにControl.BeginInvoke()を実行する無限ループで実装したっていいし。
えらい自信だからためしに作ってみたけど System.Timers.Timerなんて無茶苦茶ばらつくじゃないか
エスパーで解釈すると、 20msecでコントロールのアップデートはありえないから、 CreateGraphics()で得たGraphicsで直接描こうとしている。 CreateGraphics() + GDI+メソッドは別スレッドからでも使える。 こういう用途にはFormかPanelが適当なのだけどVB6以来の伝統かPictureBoxを使いたがる人が多い。 Timers.Timerはタイマーイベントの処理時間分、間隔がずれてゆくはずだからその分の解消をしたい。 そんなとこだろ。
>20msecでコントロールのアップデートはありえないから、 >CreateGraphics()で得たGraphicsで直接描こうとしている。 じゃあオフスクリーンにも20msecで描画する必要ないじゃん
>>414 オフスクリーン
というのはどこから出てきたんだ?
どうやってもGDI+で20msは厳しいでしょ
オンでもオフでも問題の本質は一緒でしょ >20msecでコントロールのアップデートはありえない のなら20msec間隔で描画する必要がない
そのオン、オフというのを説明してもらいたいのだが・・・
ダブルバッファリングじゃないの
へっぽこエスパーダブルバッファリングも知らないのかよ
やっぱりダブルバッファのことね。それを使うとは一言も言ってない。 フォームにパネルとSystem.Timers.Timerはって、20msecに設定でこれ。 Font stockFont = new Font(FontFamily.GenericMonospace, 14); int locs = 0; private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { using (Graphics g = panel1.CreateGraphics()) { g.FillRectangle(Brushes.Blue, new Rectangle(8, 8 + 28 * locs, 14 * 20, 28)); g.DrawString(Environment.TickCount.ToString(), stockFont, Brushes.Yellow, 10, 10 + 28 * locs); locs++; if (locs >= 5) locs = 0; } }
Direct3Dでも使わないと描画間に合わないだろ
へっぽこエスパー ありえないとか言いながら20msecでコントロール(panel)のアップデートしてんじゃねーよ
なんか子供だなぁ。 ありえないのは、Control.Invokeを使うこと。 他のスレッドからだからPanel1.Update()も使えない。 Timers.Timerをフォームに貼り付けてと書いたけど、実際はコードでnewしてる。 フォームに張りつけた場合は、ここだけthisからnullに変更してくれ。 this.timer1.SynchronizingObject = null;
WindowsXP、VisualC#2008環境で質問があります。 フォルダの[ツール]-[フォルダオプション]で表示できるフォルダオプションのウィンドウを開くには、なにを呼び出せばいいですか? 可能なら、表示オプションのタブをクリックした状態にしたいです。 どなたかご教示ください。よろしくお願いします。 この中身を編集するということは、レジストリをいじるということかと思いますが、その場合、どのような方法を取ればよいでしょう? 違っていたらご指摘いただけないでしょうか。
だから描画間に合わなかったらどうすんの?
>>423 くらいの処理なら間に合わないこともないかもしれないけど一時的に遅れることだってあるだろ
>>428 それで
>>405 がAutoResetEventと書いてるのだと思うよ。
つまり間に合わなかった場合は、その分間隔を遅延させるか1回か数回とばすか。
実現する方法はいくつかあるが、AutoResetEventを使うのはとばす方のロジックで使える。
この辺は普通にゲームの描画のアルゴリズムだと思うんだけどな。
>>427 Vistaだったら
::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{6DFD7C5C-2451-11D3-A299-00C04F8EF6AF}
なんだけど。これをShellExecute。
XPはシラネ
あとはRegistryクラスで編集、WM_SETTINGCHANGEDをブロードキャストとかかのう
で20ms間隔で描画できたかい?そんなコードだと無理に決まってるけどw
Expression Treeで動的生成されたメソッドって一回作ったらそのまま解放されないの? 頻繁に式木作って評価するならインタプリタ作った方がいいのかな
クラスデザイナの関連付けってなにしてくれるの? 関連付けされたクラスのコンストラクタが、 関連元クラスに追加されるみたいだけど、何につかうんだべ。
System.Threading.Timer使ってConsoleアプリケーションで、 コールバックは、 ・1000回呼ばれたら終了イベント上げる ・開始前と最後のコールバック時に時刻表示 メインは ・1秒後から20msecでコールバックするようにタイマーセット ・終了イベントが上がってきたらタイマーをdisposeして終了 という事実上タイマーが使われるだけで何もしないサンプルをためしに 作ってみたが、32秒かかるよ。最初の1秒待ち差し引いても、平均31msec 呼ばれるのにかかってる。
>>434 20msecといってるのは
>>405 でTimers.Timerにこだわる必要もないのだが。
ただ1000回で31秒かかるというのはおかしいな。
長いがコードはるね。Celeron1.4G WinXPで00:00:20.0493193だった。
using System;
using System.Threading;
class Startup {
void Test() {
using (var timer1 = new System.Timers.Timer()) {
timer1.Interval = 20;
int counter = 0;
timer1.Elapsed += (o, e) => {
if (++counter >= 1000) lock (this) Monitor.Pulse(this);
};
var sw = System.Diagnostics.Stopwatch.StartNew();
timer1.Start();
lock (this) Monitor.Wait(this);
timer1.Stop();
sw.Stop(); Console.WriteLine(sw.Elapsed);
}
}
static void Main() { new Startup().Test(); }
}
436 :
デフォルトの名無しさん :2009/01/31(土) 16:30:27
Directoryを外部から隠蔽したいのですが、どんな感じに実装したらいいですか? private Directory<int,int> _dic; public Directory<int,int> dic{ get ... set ... } みたいにそのままプロパティにしちゃうと、外からdic[key]=1;って叩けないですよね?
>436 public int this[int key] { get { return _dic[key]; } } みたいに隠蔽して必要な値を取得できるメソッドとかだけ公開すれば操作はしようがないので堅いよ。
>>436 外から叩けちゃうと隠蔽にならないんだが、そのコードなら別に外から叩けるな。
内部にラップしてるDictionaryをそのままの型で公開しちゃったら隠蔽にならないから
>>435 >ただ1000回で31秒かかるというのはおかしいな。
>長いがコードはるね。Celeron1.4G WinXPで00:00:20.0493193だった。
ハードウェア割り込みタイマーの周期次第じゃないの?
この周期はどこかのアプリがtimeBeginPeriodを使うだけで
簡単に変わるから、単純にOSとCPUだけ並べて
おかしい/おかしくないとは言えないよ。
Windowsだとデフォルトの割り込み間隔が16msecってのはよくある値だし
20msecのタイマーを仕掛けたら32msecごとにコールバックされていた
と考えればむしろ辻褄があう。(32msec×1000で約32s)
>>434 の環境でメディアプレイヤーなんかを同時に起動してるだけで
結果は変わるんじゃないかね。
単に終了イベントを待つのにビジーループさせてるんとちゃう
C#で、書き方を迷っているんだけど、ちょっと相談に乗ってくれないか 例えば、ファイルコピーをするメソッドで、コピー元が無ければ例外を発生する場合 public bool CopyTo(string fromFileName, string toFileName) 1) if (!this.GetIsFileExistsfromFileName, throw new FileNotFoundException(); System.IO.File.Copy(fromFileName, toFileName, true); return true; 2) if (this.GetIsFileExists(fromFileName), { System.IO.File.Copy(fromFileName, toFileName, true); return true; } else throw new FileNotFoundException(); 上下のどちらがいいのかな。
それを踏まえて、さらにコピーの上書不許可時にコピー先にファイル名存在でfalseを返すとき public bool CopyTo(string fromFileName, string toFileName, bool canOverride) 1) if (!this.GetIsFileExists(fromFileName)) throw new FileNotFoundException(); if (!canOverride) { if (this.GetIsFileExists(toFileName)) return false; } System.IO.File.Copy(fromFileName,toFileName, false); return true; 2)//ビルド時にエラーになるかも if (this.GetIsFileExists(fromFileName)) { if (canOverride) { System.IO.File.Copy(fromFileName,toFileName, false); return true; } else { if (this.GetIsFileExists(toFileName)) return false; } } else throw new FileNotFoundException();
3) if (this.GetIsFileExists(fromFileName)) { if (!canOverride) { if (!this.GetIsFileExists(toFileName)) { System.IO.File.Copy(fromFileName,toFileName, false); return true; } } } else throw new FileNotFoundException(); return false; こんな書き方があると思うんだけど、見やすいというか、わかりやすい書き方が思いつかない。 なんかいいアイデアないかな・・
引数チェックは上にまとめたいから1
bool返す必要があるのか疑問ではある
説明がないとわからないようなbool値を返すな
448 :
434 :2009/01/31(土) 17:21:02
んじゃおれも貼ってみる。ヘルプのサンプル改変だけど、どこかおかしい? using System; using System.Threading; using System.Collections.Generic; class TimerExample { static void Main() { AutoResetEvent autoEvent = new AutoResetEvent(false); StatusChecker statusChecker = new StatusChecker(1000); TimerCallback timerDelegate = new TimerCallback(statusChecker.CheckStatus); Timer stateTimer = new Timer(timerDelegate, autoEvent, 1000, 20); autoEvent.WaitOne(60000, false); stateTimer.Dispose(); } } class StatusChecker { int invokeCount, maxCount; public StatusChecker(int count) { invokeCount = 0; maxCount = count; Console.WriteLine(DateTime.Now); } public void CheckStatus(Object stateInfo) { AutoResetEvent autoEvent = (AutoResetEvent)stateInfo; if(++invokeCount == maxCount){ Console.WriteLine(DateTime.Now); autoEvent.Set(); } } }
>>435 のコードを実行してみた
Pentium4@2G WinXP .NET 3.5SP1
結果 00:00:31.2455778
というわけで31秒かかる環境はここにもある。
450 :
434 :2009/01/31(土) 17:34:00
>>448 こちらは、21-22秒で完了。起動時の1秒待機があるから20.5秒くらい。
>>440 の説が正しいなこりゃ。
戻り値と例外モデルが混在してるのがイライラする。
リアルタイムOSじゃないんだから無理ってのが出ないのはそこまでの正確さは求めていないってこと?
454 :
434 :2009/01/31(土) 18:08:02
しつこいが、System.Windows.Forms.Timerでも試してみた。
private void timer1_Tick(object sender, EventArgs e)
{
label3.Text = (Convert.ToInt32(label3.Text) + 1).ToString();
}
というカウントアップをリアルタイム描画。
1000回回して31.24秒だった。
もういいや。
>>453 それは、(ひょっとすると元質問者以外は)百も承知でしょ。
>>445-447 ごめん、例が悪かったね。返り値が必要/不必要という点でなくて、
そういう返り値を出したいとき、どう書くのがいいのかなと思って。
別の例を出したほうが理解してもらいやすいのかな。
public int GetType(string word) 例えばword=="nullpo"の時0で、それ以外1を返すとき、
わかりやすいのはどれだろう。
if (word == "nullpo") ■1
return 0;
else
return 1;
if (word == "nullpo") ■2
return 0;
return 1;
int type = 1;
if (word == "nullpo") ■3
type = 0;
return type;
それを踏まえて、canAcceptNullpoがTrueの時には、1を返したいとすると、 public int GetType(string word, bool canAcceptNullpo) if (word == "nullpo") ■a if (canAcceptNullpo) return 1; else return 0; else return 1; if (canAcceptNullpo) ■b return 1; else if (word == "nullpo") return 0; else return 1; if (canAcceptNullpo) ■c return 1; if (word == "nullpo") return 0; else return 1; などあると思うけど、もしわかりやすいアイデアあったら頼みます。
うぽ return (word == "nullpo") ? ((canAcceptNullpo) ? 1: 0) : 1; というのは冗談として、 事前条件的なものは早めにチェックして単独でreturnしたほうがいいと思いますよ。 引数の検査、つまりnullチェックのや範囲チェック的なものはそれ。
正直、「それを踏まえて」の人が何を主張したいのかよーわからん。 どうでもいいだろそんなの。 そもそも最初の質問者の質問意図と全然違うこと言ってるのに「それを踏まえて」 ってどういう神経?
戻り値と例外モデル混ぜるなってアドバイスは
素直に受け止めておいたほうがいいとおも
例外の役割のうちに一貫したエラー処理メカニズムの提供があるんだから
>>455-456 よりよほど重要だ
エラー処理じゃないか。通知だね
Visual Studioで質問 デバックなしで実行。 開いたウィンドウをクリックすると そのウィンドウが最小化されてしまう。 つまり最大化やら最小化ができない。 複雑でも何でもないんだが教えてくれ…
で、どこに質問があるの?
463 :
デフォルトの名無しさん :2009/01/31(土) 21:09:12
みんなありがとう。なんか釈然としなくてね。
>>457 単独で、returnできるうちにしてしまうってのが正解なのかな。やっぱり。
>>458 >どうでもいいだろそんなの。
それならいいんだけどね。なら動けばなんだっていいみたいな感じが自分ではするので、
何か可読性がよく、わかりやすい方法が内かなと思って。
「それを踏まえて」の前はif文によって異なるreturn値を返す方法についての方法論を示したということ。
「それを踏まえて」の後は、その異なるreturn値に、さらに例外がでてきた場合の例なんだけど、
書いていて旨い例が見つからず、何かもっと言い例がないかなと思ったの。
>>459 了解、心にとめておきます。
ただ、手近にあってソースで例を書いたので、戻り値と例外が一緒くたの例になってしまった。
例が悪かった。すまない。よければ、
>>455 と
>>456 の書き方で、
自分はこうしてるみたいな理由があったら教えてほしい。
だからそんなことどうでもいいって。 もう、そんな些細なことに固執して宗教論争してても飯が食えるような 牧歌的な時代じゃないんだから。 もっと他に理解したり習得したりすべきことが山ほどあるだろ。
>>464 そういう些細なことまで書いてあるCode Completeって本がある
複数リターンについても記述があったはずだからまずは立ち読みで
>>465 どうでも良くないだろ。こういうのは大事だぞ。
生産性や可視性の観点から重要。
最近はPCの性能が良くなったからか、
同じスコープでインスタンスを返すループを伴うメソッドやプロパティを、
何の資源も消費せずに、いくらでもインスタンスが出てくる
打ち出の小槌みたいに簡単に使う傾向があるしな。
命名規則で質問ですが 動詞に対する結果を示すbool型変数の名前はどうしてますか IsCreated IsClosed 等、Is○○○だと英文法的におかしいので
おかしくないですよ。
IsCreated IsClosedなんて.NET Frameworkのクラスライブラリにいくらでもあるし 英文法的にも別におかしくない
471 :
468 :2009/02/01(日) 00:25:58
そうですかありがとうございます
Process.Startで起動した外部プログラムからの 戻り値を受け取ることは出来ますか?
ExitCodeプロパティ
>>468 引数やインスタンス名まで含めて一つのセンテンスと捉えると、寧ろ自然なことが多い
HashSetがなぜか見つからない言われるなーと思ったら Genericの中でこいつだけdllが違うのか しかもSystem.Coreはデフォルトでは参照設定に追加されてないという罠。
3.5で追加されたもんだから仕方ない 一応csc.rspには入ってるけどな
HashSetってなんに使うんだ?
>>476 >しかもSystem.Coreはデフォルトでは参照設定に追加されてないという罠。
プロジェクトテンプレートの設定次第。
デフォルトで参照設定に追加されている人も結構多いはず。
LINQ用のクラスもSystem.Coreに含まれてるから。
LINQを使うのにいちいち参照設定が必要だったって人はあんまり見ないよね?
そういう人ははHashSetも最初からIntelliSenseに表示されるように見えているはず。
>>468 bool型のプロパティの名前をisやhasで始まるのは定番中の定番。
isなしで形容詞or過去分詞のみのパターンも、それはそれで定番。
過去分詞のみなのはイベントの名前にしていただきたいところだがな
Javascriptから来た子は、OnClickとかがイベント名じゃないことに文句言ってた
VBAもOnClickってあったな
ちなみに.NETでClickedとかClosedみたいな名前のイベントがあったら 過去分詞じゃなくて動詞の過去形(ガイドライン参照)
Putはどっちですか><
複数判定する場合はAreなんちゃらにすんの?
複数?コードで書いてみて。
C#でフォルダを開くProcessについて質問があります。 (1) this.openProcess = new System.Diagnostics.Process(); this.openProcess.StartInfo.Arguments = @"C:\略\My Documents\"; this.openProcess.StartInfo.FileName = @"C:\Wnidows\explorer.exe"; openProcess.Start(); (2) System.Diagnostics.Process openProcess = System.Diagnostics.Process.Start(@"C:\略\My Documents\"); (3) System.Diagnostics.Process.Start(@"C:\略\My Documents\"); (2)と(3)では、My Documentsを開くことができます。 (1)の場合は、引数をうまくとれず、C:\が開いてしまいます。 この理由と、引数としてフォルダを指定する方法を教えてください。
○ is △? → ○.Is△で○が複数になることって無いんだよね ○がコレクションの場合は一つのコレクションとみなす
>>488 半角空白を含む引数は" "で括る
基本だよ
>>490 えっ?
this.openProcess.StartInfo.Arguments = @"C:\略\My Documents\";
と""でくくってあると思うんですけど…。
違ってたらごめんなさい。
というか、C:\Windowsとかの半角空白を含まないフォルダも開けないのです。
>>491 そのダブルクォーテーションはC#の文字列を作る意味しかない。
その中身の文字列にダブルクォーテーションを入れないといけない。
"\"C:\\略\\My Documents\\\""のように。
>>492 なるほど!
そうでしたか。できました。ありがとうございました。
>>484 BegunかBeganか迷った末にStartedでお茶を濁すのですね。わかります。
文字列の定義にstaticクラスを使ってるんですが public static const Define{ public const string Type0 = "hoge0"; public const string Type1 = "hoge1"; .... } これだと文字列と比較するときにで string temp = "bar"; if( bar == Define.Type0){ ... } else if( bar == Define.Type1){ ... } といちいち書かなくちゃならんのです。 かといって public static const Define{ public const int numofNames = 10; public const string[numofNames] Names = { "hoge0", "hoge1", ...., "hoge9"}; } みたいな定義はstaticクラスないでは出来ないみたいだし・・・ 何か良い方法ないですかね
「かといって」以前と以後で話がまるでつながってないんだが?
constを諦めて、static readonlyにしたらだめなの?
配列にしたいけどなんかできないみたいだから Type0, Type1, ... みたいにしてるけど、 何かいい方法ない? って聞いてる、 と、よく分かるけど
500 :
デフォルトの名無しさん :2009/02/02(月) 00:17:42
>>499 497 じゃないけどお前の説明でやっと意味がわかった。
それなら、
public static readonly ReadOnlyCollection<string> Type =
new ReadOnlyCollection<string>(new [] {
"hoge01",
"hoge02",
});
こういうことかな?ReadOnlyCollection<string> は本当は継承したクラスにしたほうがいいんだけども
public static const Define{ public static readonly string[] Names = { "hoge0", "hoge1", ...., "hoge9"}; } じゃだめなのか? これだと、文字列との比較は if(bar == Define.Names[ "hoge0" ]) のように書くことになる。
>500-501 おー、どっちもできました。 constだとnewできなくて、readonlyだとnewできるんですね。
Visual C# 2008をインストールして使い始めたんですが、 テキストエディタでコーディング中に表示されるポップアップヘルプの中身が英語なんです。 前使ってたヴァージョンでは日本語だった気がしますが、どうやったら日本語化できますか。 ちなみにメニュー等は全て日本語です。
Visual C# 2008環境のデバッグについて質問があります。 開発環境をインストールしていないターゲットマシン(XP)で、 エラーメッセージをファイルに落とすには、 どのようにコンパイルしたらよいのでしょう?
506 :
デフォルトの名無しさん :2009/02/02(月) 04:05:05
Visual Studio C# 2008で質問があります。 コンパイルをしてexeファイルが出来上がるのですが、 これの会社名や著作権の情報を変更するにはどうすれば良いのでしょうか?
propertiesのAssemblyInfo.csを修正
ありがとうございました。
どういたしまして。
DirectryクラスのGetFilesより早く一覧を取得する方法ないすか 再帰で一覧取得しようとしてるんだけど たかだか3000ファイル程度でもAPIのFind***Fileに比べて遅くてたまらねえっす
ならAPI使えばー
身も蓋も無いこと言わないで下さい>< …最終的に解決しなきゃそうします多分
データベースからとってきたdatetime型の日付形式の時間部分だけを抜き取って、 XX:XXではなくXX時XX分と表示させたいのですが、簡単な方法ありますでしょうか?
MessageBox.Show(DateTime.Now.ToString("HH時mm分")); ってやってみ
515 :
デフォルトの名無しさん :2009/02/02(月) 10:27:10
XmlsAa.AaRow B =(XmlsAa.AaRow)C.Rows[0]; って何をやっているんですかね?Rowってのはテーブル1行分使う意味らしいのですが ()とかRows、[0]がわかりません。配列?
(XmlsAa.AaRow)はキャスト [0]はインデクサ 元が何型かは知らんけど Rowsコレクションの最初の要素をXmlsAa.AaRow型にキャストしてるだけ 分からんならキャストとインデクサでググれ
517 :
513 :2009/02/02(月) 10:34:17
普通に抜き出して置換することにしました。 無駄な書き込み申し訳なかったです。
ええ!? 514ガン無視!?
エエエエエエ(AA略)
520 :
514 :2009/02/02(月) 10:37:15
____ / \ / _ノ ヽ、_ \ / o゚⌒ ⌒゚o \ | (__人__) | \ ` ⌒´ /
>>510 >DirectryクラスのGetFilesより早く一覧を取得する方法
>再帰で
DirectoryInfoクラスのGetFiles使ってるよね?
再帰で取得することよくあるけど、そんなに差はなかったような気がするが
522 :
513 :2009/02/02(月) 10:45:00
MessageBoxに表示したいわけではありませんので。
エエエエエエエエエエエエエ(AA略)
何この流れ・・・
525 :
デフォルトの名無しさん :2009/02/02(月) 11:07:55
>>516 ぐぐったけどよくわかりませんでした。ぐぐり続けてみます。C#というかプログラムは単語が理解できなくてつまずくなぁ
526 :
デフォルトの名無しさん :2009/02/02(月) 11:43:29
環境 WinXP SP3 C# 2.0 今度デルファイで作られたソフトkらソケット通信(TCP)を利用してデータの受信を行うことになりました。 相手は1情報を512バイト固定で送信してくるそうです。 例えば相手が以下のようなデータを送信してきて受信完了した場合 どのように受信したデータを展開すればよいのでしょうか? 形式はなんでもかまわないので受信データをひとまず展開できれば構わないのですが・・・ 一応受け取ったデータを同じような構造をもったクラスに展開して内部で処理用と考えています。 i1 integer; i2 ・ ・ 25回(100バイト分) d1 double d2 ・ ・ 8回(72バイト分) yobi : array[0..339] of shortint (340バイト分) 計512バイト こんな感じなのですが、なにかこういう展開のヒントや情報でも構わないのでお教え願えませんか?
構造体にしといてbyte[]からMemoryStream作ってBinaryFormatterでDeserializeとか?
C#でゲーム作って配布すると、 ソースコードを見られてしまうの?
それがなにか?
みんなで公開羞恥プレイですよ さああなたも御開帳
531 :
デフォルトの名無しさん :2009/02/02(月) 12:55:11
>>527 そんな感じで出来るんならやってみようと思います。
ありがとうございました。
>>526 形式は何でも構わないってことはDelphiで作られたソフトってのも変更可能なわけ?
その割に512バイト固定とか言ってるけど
.NET的にはバイナリの塊を処理するのは
BinaryReaderで読み取っていったり一つずつBitConverterで変換していくのが基本
nslookup.exeで調べた相手のSMTPサーバーに直接メールを送る事って出来なくなったのね・・・
何年前の話だよ
さすが初心者スレだ
まあ取り敢えず独り言はチラシの裏に書いてろ 質問したいなら質問の体裁を取れ みたいな
538 :
デフォルトの名無しさん :2009/02/02(月) 14:47:43
>>532 変更は可能と言えば可能なんですが・・・
出来るだけデルファイ側は変更しないようにとのことなので…orz
例えばa1,a2辺りを処理するのは
おとなしく受け取ったバイト配列を BitConverter.ToInt32
で一個づつ自分用にばらしていくのが妥当という感じでしょうか?
そうだよ 直接構造体に当てはめるなんてメモリイメージに縛られすぎ というのがC#の方針 .NET間ならBinaryFormatterのシリアライズとかで十分だからな
エンディアンやバウンダリの問題もあって テキストベースのプロトコルにすることが多くなった。 固定レコードは流行らなくなったな。
541 :
デフォルトの名無しさん :2009/02/02(月) 15:33:40
Visual Studioやってたら、'private'は無効です。のエラーが 毛テスタ
'private'を削りなさい
前の行の最後にセミコロンが無い
メソッドの中で private 宣言した
24時間働いているなら労働基準監督署へ
546 :
デフォルトの名無しさん :2009/02/02(月) 15:49:38
private 削ると、使ってる変数が全部定義がありませんってエラーきますた。 セミコロンはありまふ メソッドの中で宣言・・・これかもです。ありがとう。 Protected voidなんちゃらの処理の中の変数宣言で、privateはダメなのですかね
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄ ∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄  ̄
ふらっとC# 503です。 ターゲットマシン(XP)でのFormアプリケーションのデバッグ方法、助言お願いします。 いまのところMessageBoxでいくつか変数を表示しようとしているます。 問題はMessageBoxさえ表示されないことで、ということはその前でエラーが起きていることはわかるのです。 かといって頭からぜんぶMessageBoxというのもなかなか途方にくれる話ですし。 デバッグのときに表示されるような情報を、一括してテキストファイルに落とせれば楽だと思うのです。 そういう方法ってあるんですか?
551 :
デフォルトの名無しさん :2009/02/02(月) 18:07:36
>>539 なるほど
その方向で進めていくことにしました。
確かにマネージド同士なら楽なんですが・・・
そうでないものは初めてでちょっと色々 orz
1行目に#define DEBUGと追加して、Debugフォルダにexeファイルができました。 ありがとうございました。 がっ。 エラー情報やいずこ!?
>>552 構成ファイルのapp.configにこれをぶち込んどけ
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="Text" type="System.Diagnostics.TextWriterTraceListener"
initializeData="c:\log\TraceSample.txt" />
<!-- <add name="Text" type="System.Diagnostics.ConsoleTraceListener" /> -->
<!-- <remove name="Default" /> -->
</listeners>
</trace>
</system.diagnostics>
</configuration>
>>552 それじゃDEBUGの意味がないだろ
TraceクラスとTRACE使え
C#ってクラス名に漢字使えたよね?
うん
>>557 やめろ!やめるんだ!
そ、そんなソースは認めないぞ
#define ノシ throw
calss 三旦 : System.Exception {..}
if ( this.Value < this.Min ) ノシ 三旦;
#define がないし。
>>559 C# で define は値を定義できないぞ
abstract class A { public abstract int Hoge { get; } } というクラスがあり、これを継承したBでgetの実装をします。 そしてクラスB内から値をセットするのにprivate setを追加したいのですが CS0546になりできません。 こいうことはできないのでしょうか? class B : A { public override int Hoge { get { 〜 } private set { 〜 } // CS0546 } }
カルス・・・
インターフェイスならできるけどクラスではできません
WindowsXP C# 2008で質問です。 ビューアーを作り、それをデフォルト起動アプリケーションにしました。 string[] args = Environment.GetCommandLineArgs(); if (args.Length != 1) {Title = System.IO.Path.GetFileName(args[1]);} で、ファイル名をタイトルにしてウィンドウに表示しようとしています。 exeファイルにデータファイルのアイコンをドラッグするとファイル名を取得できますが、データファイルを単独でダブルクリック起動する場合には取得できません。 デフォルト起動の場合、データファイルのファイル名は、exeファイルにどのように渡されていて、exeからはどのように取得できるのですか? ご教示願います。
YO, YO, YO. Good midnight, Japanese C# programmer. My name is Charles Petzold.I write one book. That name is Windows programming by C#. This book cover most part of Programming Windows by C#.So if you read this book, you can write many system. By the way, I have three words for Japanese Programmer. [Don't use Linux.] Do you understand? Good bye.
Feel free to write in English.
569 :
デフォルトの名無しさん :2009/02/03(火) 02:57:20
petzoldにはお世話になったなあ でも今見ると古いかもなあ
>>565 レジストリにどういう風に登録されてるかによる。
普通、「アプリのパス "%1"」 なんで、そのまま取れるけどね。
オンラインヘルプを自PCに持ってくるにはどうすればいいのでしょうか? いちいちネットに繋ぎに行くんでウザいのですが…
ローカルで見られるヘルプがあるよ。日本語版と英語版 探せば見つかるだろうけど親切な人が教えてくれるかも
VisualStudioをインストールすればインストール可能 Expressだとサブセット版だけども。 あとはWindowsSDKインスコ。
初めてプログラム言語に触れたのですが intとかparseとかその他もろもろ、何て読むのですか? 読み方サイトみたいのってありますか? 読めなくても構わないんですがなんとなく喉の骨が取れない感じです。
578 :
576 :2009/02/03(火) 11:31:04
>>577 みんなそんなもんなんですね
適当に脳内処理しときます。
今仕事が開店休業状態で暇つぶしにC#ってものを勉強始めたけど
突き詰めたらどんな高度なwindowsアプリでも作れるようになれるのですか?
たとえばosとかofficeとかw
このままだと会社が倒産しそうだから、C#勉強してそっちに働き口みつかるかなぁ・・・
OSの上で動作するフレームワーク(.NETとかMonoとか)のさらに上で動作してるから フレームワークより下にはいけない
580 :
576 :2009/02/03(火) 11:37:12
>>579 たしかにos-.net上で動くって事ですもんね
具体的に言うと、リッピングソフトとかofficeアプリまでなら作れますか?
それはそれは途方も無く努力すれば
C#も極めれば空も飛べるよ! ハ_ハ ('(゚∀゚∩ 飛べるよ! ヽ 〈 ヽヽ_)
583 :
デフォルトの名無しさん :2009/02/03(火) 13:18:52
そうだね・・・ねてなくて浮いてる気分だ
寝ろよ 寝不足は生産性も減退させる
うまく動いてたイベント処理をもうちょっと効率良くしようと思って手を加えて 一週間くらいほったらかしといたら、うまく動いてたときのコード忘れてしまた orz 全く思い出せない
そうかそうか
svn
大規模な改良前にはコード保存しとけば?? おかげさまで「〜〜実装前.txt」が10個以上あるが。
>>575 おそらく、VB6/COMで、setアクセサ相当が値のLetと参照のSetに分かれていた名残。
Letが.NETのsetアクセサで、Setがその他に対応すると思う。
>>575 言語によっては他の種類のアクセサを定義することもできるということじゃないの
プロパティって複数のアクセサメソッドの情報をまとめたメタデータにすぎないから
592 :
デフォルトの名無しさん :2009/02/03(火) 17:26:52
Form1上にSplitContainerを配置して ・Panel1にテキストボックスとボタン ・Panel2にデータグリッドビュー を置いてあるんすけど、テキストボックスとボタンってどのコレクションになるんすかね? this.Controls だとコレクションは SplitContainer しか入ってないし this.SplitContainer.Panel1.Controls だとコレクションは Panel1 しか入ってない this.SplitContainer.Panel2.Controls ってやるとちゃんと DataGridView1 が入ってるのに わけわかめ
593 :
592 :2009/02/03(火) 17:31:47
SplitterPanelにPanelを入れ子にしてた orz
>>592 Panel1.Contols に Panel1 が入ってるわけねーだろ。
さぼてんあわめん
わあさんぼんめて
598 :
風来坊 :2009/02/03(火) 20:48:10
質問です。 C#にて 音声録音の機能を実装したいと思っています。 .NET 1.1,2.0,3.5は問いません。 デフォに設定されている出力(再生)デバイスの音声信号を wav(wavにこだわる必要は無い)ファイルとして保存したいのですが、 どうすれば実現できますか? どなたかご教授ください。お願いします。
ぐぐる
遮断機をくぐる
首をくくる
せっかくC#でAPI直接もなんだし、MCIかMDXあたりでどうかな。
riffを自分で書くなんてどうかしら
DirectShow.NET
DirecxShowは推奨されないらしいですよ
このスレって質問者じゃなくて答える側が初心者っていうオチ?
○×したいんだけど、どうすれば実現できますか? ↓ (´・ω・`)しらんがな こうやったんだけど上手くいきません。どうしたらいいですか? ↓ (´・ω・`)オジサンが教えたるがな
Vista + Visual Studio 2008 Express Edition + C# を使っています。 Debugモードでは問題なく動くのにReleaseモードではフリーズする場合、 どういった原因が考えられますでしょうか? 大量の計算を連続してさせているプログラムで、フリーズする箇所は毎回違うようです。 調べようにも取っ掛かりすらなくて困っています。 よろしくお願いします。
CPU休めてますか
>>609 100万行くらいのtxtファイルを読んできて、数分間延々と処理させてます。
CPUに負荷がかかりすぎるのが問題なんですかね?
ぱそこんもたまにはやすみたがっているんだよ。
612 :
608 :2009/02/03(火) 22:36:59
タスクマネージャで眺めてたら、 処理開始から1〜2分はCPU使用率50%前後で、メモリ使用量が徐々に増加。 メモリが180MBくらいに達したところでCPU使用率が0%になってフリーズしました。 メモリ食いすぎってことでしょうか? debugモードでは動くのに。。。
デッドロックしてない?
そのデバッグモードってデバッグビルド? リリースビルドでデバッグでも同じ?
615 :
デフォルトの名無しさん :2009/02/03(火) 22:44:20
>>603 Thunder Forceの戦闘AI?
616 :
571 :2009/02/03(火) 22:45:47
>>572-574 ありがとうございます。
VMwareでLive版のLinux立ち上げてISOイメージをマウントしてから、
ローカルディスクに全コピーしてみます。
617 :
608 :2009/02/03(火) 23:00:46
>>613 マルチスレッド処理なので可能性はあるかもしれません。
ただ、デバッグで起こらないのでどうやって調べればいいのか。。。
>>614 >リリースビルドでデバッグ なんてことができるんですね。
試してみましたが、問題なく動きました。
\Releaseフォルダ内のexeを直接起動したときだけフリーズします。
一般的には排他処理のところっしょ
排他制御に不備があって、微妙なタイミングの差で動いたり動かなかったりするのかね。 いずれにせよ質の悪いバグだ。詳しく設計がわからないとアドバイスのしようがない。
>>570 レジストリですか。
すこし見てみたものの、まったく手がかりがありませんでした。
情報サンクスです。
別にレジストリ見なくてもわかる エクスプローラのメニューからツール→フォルダ オプションを選択 ファイルの種類タブで、データファイルの拡張子がどう登録されているか確認
622 :
デフォルトの名無しさん :2009/02/04(水) 04:07:18
コンボボックスで質問があります。 コンボボックスに二つの項目があり、項目1を選ぶと変数+変数、 項目2を選ぶと変数-変数といったような処理をしたいのですが if文でどのようにコンボボックスを設定すればそのような処理ができるのでしょうか?
はい
>>622 ComboBox.SelectedIndexChangedでSelectedIndex見て判断しろ
ComboBoxニdelegate突ッ込ンデ自前デ描画シナサイ
>>621 どうやって関連づけやったのよ?
関連づけやってるところのソース見せて
C#2005で開発したアプリをVistaで動かしてみたところ、 パネルに配置したボタン色がパネルの色に同化してしまいました。 xpでは正常に表示されます 対処方法などあれば教えてください。
>>627 おマイには聞いてないってw
レジストリを触ったこと無い人がどうやって関連づけしたのかな〜っと
それに実行パスに空白があるからどうなるの?
普通にファイルを開くプログラムの選択で関連付けしたんで無いの。
>>629 なんで粘着してんの?親切に教えてるだけじゃない
そもそもの質問者も、プログラムで関連付けをしたいなんて書いてないし
回答者も、レジストリを触ったこと無いとも書いてない
実行パスの空白はCUIのOS触ったことあるなら解るだろ
felicaのシステムを作っているのですが、 felicap = felica_polling(pasorip, (ushort)systemcode, 0, 0); この処理でfelicapに値が入るのですが、この処理の意味が根本的にわかりません。 ここではどういった処理が行われているのでしょうか?
felicaのシステムを作っているのですが、 felicap = felica_polling(pasorip, (ushort)systemcode, 0, 0); この処理でfelicapに値が入るのですが、この処理の意味が根本的にわかりません。 ここではどういった処理が行われているのでしょうか? 連続で同じカードの読み取りができなくて困っています。
>>633 すみません。
該当スレに書き込むつもりが同じところに書き込んでしまいました。
生まれて半年の者です。他のクラスの変数に関して質問です。 クラスAとBがあります。 クラスAにStack型stackがあります。 クラスBにString型stringがあります。 クラスBでクラスAをインスタンス化して、stackにstringをpushします。 そして変更されたstackをクラスAに戻して作業を進めたいのですが、 クラスAではstackは元のままになっています。 どのような問題があるのでしょうか?
クラスAに戻すとか言われてもよく分からんのでコード貼ってくれ
AがStackをそのまま外に晒すのはよくない(別のクラスにした意味がない) pushするメソッドをAに定義するべき
Stackを晒してるなら、Pushしたのが反映されてるはずだがな。 たぶんnewして渡してるとかじゃないかw
>>637 戻すじゃなくて戻したいの意味でした。すみません。
ClassA
{
public void ClassA()
{ }
public Stack stack = new Stack();
}
ClassB
{
public String string = 〜;
ClassA a = new ClassA()
a.stack.push(string);
}
これだけだとクラスAでは変更できてないです。
pushしたあとにどのような作業が必要でしょうか?
意味不明すぎる
たぶんクラスとインスタンスの関係が分かってないんじゃない? 生まれて半年だし
staticだな〜説明は誰かに任す
そこでstaticにしろと言うのは教育的じゃないと思う
もうちょっと勉強進めればわかるよ staticにすればいいのかもしれないけど実際は絶対やっちゃダメなパターン
つってもなあ 「○○したいんだ」 って言ってる奴に勉強しろっても回答になってない気がするぜー
ClassB { public String string = 〜; ClassA a = new ClassA() //↓これメソッド内だよね? a.stack.push(string); } ↑でインスタンス化された a の stack にはちゃんとPushされている。 ただそのせっかく作ったClassAのインスタンスaは参照されないまま消えてしまっただけ
C#で質問があります。 timeが11:00と入力されなかった場合(たとえば1100と入力された場合)、コロンを追加しようとしています。 string time; if (!(time.Contains(":"))) { time = time[0] + time[1] + ":" + time[2] + time[3]; } で、この値を見ると、11:00ではなくて98:00になっちゃうのですが、なんでこんな数字になっちゃうんでしょう。 原因と改良方法をご示唆いただけないでしょうか。
windowsフォームのボタンを押したときの動作をプログラムで書きたいときは、 ボタンをダブルクリックすれば、プログラムを書く場所を自動で作ってくれますが、 クラスBにあるボタンを押したときの動作を、クラスAに書くことは可能でしょうか?
>>648 char同士の文字コードの加算になってるから
time = '1' + '1';
でやってみるとわかるよ
time = time[0].ToString() + time[1].ToString() + ":" + time[2].ToString() + time[3].ToString();
にすればいい
>>649 +=を使ったイベントハンドラの登録方法が理解できていればできる
> time[0].ToString() + time[1].ToString() + ":" + time[2].ToString() + time[3].ToString(); くどすぎる。 StringBuilder つかおうぜ。
じゃあString.Format("{0}{1}:{2}{3}", time[0], time[1], time[2], time[3])で
>>650 早速ありがとうございました。
ToString()でできました。
>>651 そこで、StringBuilderは使わないだろ。
time = time.Substring(0, 2) + ":" + time.SubString(2, 2);
>>621 ツール-フォルダオプションは、真っ先に見ました〜。
>>626 、636
というか、ここで手動で関連づけを登録しました。
そうしたら、登録したとたん、「詳細設定」のボタンが消え、「元に戻す」というボタンに変化しちゃったのです。
詳細設定のボタンがあれば、アプリケーションの挙動を見れるかと思ったのですけど。
たとえば、txtの詳細設定のopenアクションを見ると、アクションを実行するアプリケーションの項目に、「C:\Windows\system32\NOTEPAD.EXE %1」とあり、これを修正すればよいことがわかります。
ところがなにしろボタンがないから、手も足もでない…。
空白かな〜。う〜〜む。
アプリケーションじたいはデータファイルのダブルクリックで起動しているのですが…。
ま、C#とはあまり関係なさそうなので、この件はこれで。
お騒がせしました。ありがとうございました。
658 :
デフォルトの名無しさん :2009/02/04(水) 18:57:25
お願いします(゚ω゚) System.Text.RegularExpressions.Regexを使って [ok] 100 [ok] 0.001 [ng] 00 → 0 [ok] 0.1000 前ゼロ入力をReplaceで""に置き換えたいのですが、正規表現が上手く書けませぬ 教えてエロい人
660 :
デフォルトの名無しさん :2009/02/04(水) 19:02:22
>>645 他クラスからアクセスする変数には手当たり次第static使ってるんだが…
何を勉強すればいいんですか?
構造化プログラミング
オブジェクト指向プログラミング
staticフィールドはダメだがstaticメソッドはいいぞ privateなstaticメソッドが最高だ
構造化プログラミングを理解してない奴が、オブジェクト指向を学んでも無駄。 構造化プログラミングを学んだら、中規模以上のプログラムをたくさん書く。 それからでもオブジェクト指向は遅くないよ。
static メンバ変数なんて ただ1個しか存在しないもんな。 2つ作りてええええええええ!!!! と思っても 1つしか存在できない。 不便過ぎ。
C言語等の非OOA出身者はstaticをメモ帳や定数保管庫程度に考えてない
しか が抜けた
オブジェクト指向も関数型プログラミングも 深いとこに行くと実用的じゃない宗教じみたものがうじゃうじゃ出てくるから そこに行ってしまわないように気をつけないと
むしろいきなりOOPでいいと思うよ。
>>665 みたいな意見はありがちだけど、構造化プログラミングなんて
中身のないスカスカな話で馬鹿でなければ「畳の上の水泳」で十分だと思う。
っていうか、俺も含めてたかがOOP理解したぐらいで鬼の首とったように語るのは
とても恥ずかしいよなw
物事をオブジェクトに切り分けるというのは大成功した考え方だと思うけど 継承は失敗だしインターフェースの実装もそんなに上手くない感じだと思う そういった抽象化はクロージャにした方がシンプルで分かりやすい
672 :
デフォルトの名無しさん :2009/02/04(水) 22:19:30
>>636 > 生まれて半年の者です。
おいおい、生後半年でプログラミングかよ。
たいしたもんだな!
どんな天才だよw
>>671 使いこなせない人にとって上手くないだけなんだろ
母国語より先にプログラム言語を覚えたんだな いったいどんな子に育つやら
今さらオブジェクト指向だデザパタだインターフェースだってやるのは 正直違うかなと思うよ 今のC#にはもっとよい道具があるから ただオブジェクト指向の基本的なところは抑えておかないとまずいけど
だまれ若造
お年寄りは静かにしてください
>>676 それはC#が、最近になってより初心者向けの機能を実装をしてるってこと?
>>676 >今のC#にはもっとよい道具があるから
ないってw
知ったようなこというなよ。
クラスベースのOOPが万能じゃないのは確かだけど、現時点でそのオルタナティブが
C#に限らず発案されているとは思えん。
681 :
デフォルトの名無しさん :2009/02/04(水) 22:33:31
>>679 クロージャはインターフェースよりも初心者にとって使いやすいと思うよ
直観的だし
なんでクロージャーとインターフェイスを対置するんだ? クロージャーとインターフェイスって「代替財」か? わけがわからんよ。
覚え方なんて人それぞれだし。 自分が通ってきた道についてしか語れないだろ。
>>680 クロージャは実際には一つのメソッドを持ったインターフェースを
実装したオブジェクトを簡易に作り出す機能だけど
それさえあればオブジェクト指向の抽象化は全部出来る
オブジェクト指向の継承にまつわるややこしいところはすっ飛ばして
そっちに行くのが今は正解なんじゃないかねえ
また変な主義者が来ましたねw
>>684 それって、昔の1ファンクション1機能の構造化プログラミングと同じじゃないの?
静的なメソッドとは何がちがうのけ?
相談があります。 C#でプログラムを作り始めて半年くらいになります。 ようやく身の回りのソフトは、だいぶ自作できるようになってきました。 ところで、それをリリースしようと思うと、プログラムのなかに直接書いてあるパスワードなどを設定ファイルに移動したり、自分用のディレクトリ構造にあわせて作った部分を汎用にする必要が出てきます。 それはまあやる気になればできそうなのですが、設定不要のかんたんなソフトを知人10人ほどにテストしてもらったところ、だれひとりとして.NETを入れていないため、動作しなかった、ということがわかりました。 ひょっとして、.NETやC#って、すごくマイナーなんでしょうか。 このままC#をつづけた方がよいのか(けっこう使いやすくて気に入ってます)、それとも別の言語に移ったほうがよいのか。 移るとしたら、もっとメジャーな言語ってなんですか? Webベースのプログラムとか、Ajaxとかですか? .NETを組み込んだ状態でコンパイルするとかできないんですかね〜?
WebでできるようなことならSiilverlightというのがある イメージ的には「C#で書けるFlash」 ランタイムは超小さいので配布が手軽
だからクロージャとインターフェイスは代替関係にないってw ただ一部の機能が競合関係にあるだけ。 たぶん従来ICompareをわざわざ用意していたようなのがデリゲートでスッキリ 書けるようになった、みたいな例を見て短絡したんだろうけど。
>>687 .netFrameworkをインストールしないって人は多いよね
vista以降は.netはインストされてるから、ある程度は問題なくなると思うけど
なんのインストもなくて利用可能なのは、VisualStudioのC++のネイティブコードか、
Delphiぐらいじゃないのかな。
しつもんです。 クラス内のメンバの初期化はどこでしてますか? 宣言時に初期化してしまうか、コンストラクタ内で初期化するか迷ってます。 ///以下抜粋 internal sealed class 通信 { private UdpClient UDP; private Thread スレッド; private List<byte[]> 受信リスト= new List<byte[]>();///宣言時か private List<IPEndPoint> クライアントリスト= new List<IPEndPoint>(); public 通信(int ポート) { UDP= new UdpClient(ポート);///コンストラクタ内か スレッド = new System.Threading.Thread(new System.Threading.ThreadStart(受信)); ///抜粋以上
>>691 基本は宣言時じゃないかな。
コンストラクタでもいいけど、コンストラクタをオーバーロードしているときには、
複数のコンストラクタで初期化しなくちゃいけなくなるから。
別のメソッドを用意して、そこで初期化してもいいけど、意味ない気がするし。
条件によるけど。
ホスト規制のためNGですた。
>>693 あっちは相談室と名乗りながら、
質問の揚げ足を取って悦に浸っている常連ばかりだから嫌い
>>686 Cとの比較で言うと、クロージャは「状態のある関数ポインタ」といえると思う
Xの値が欲しい時に
void Hoge(Func<int> getX){ int x = getX(); }
C#ならこう書ける。getXにはintを返す関数がなんでも入れられるしその場で作れる
Cで書くと
struct Func_int{
int (*func)(void*);
void* args;
};
void Hoge(Func_int fi)
{
int x = fi.func(fi.args);
}
こんなんだけど引数の型も作らなきゃいけないし関数はvoid*をとらなきゃいけないしで大変だ
オブジェクト指向で書くと
class Func<int> : IFunc<int>
{
int x, y;
public Func(int x, int y){ this.x = x; this.y = y; }
public int Method(){ return x + y; }
}
クロージャだと
Hoge(() => x + y);
こうだ。
これが進化だよ。
>>695 でも作っとかないと、そういう人らがここに常駐されたら困る
>>696 その例だと従来の方法でもStaticなメソッドを使えば
int x = Class.Method(a, b);
で代用がきくから同じことだと思うんだけど。何が違うの?
読解性
>>690 VC++ も今は CRT が DLL 推奨だから配るならインストーラ作るべき
なんやけどな。msm があるしサイズも小さいので格段に楽だから
.NET と比べるレベルじゃないけど。
自分の場合は固定長バッファ持たせる時とか、ソース直書きのデータを持たせる時以外は宣言の所に初期化コードを書かないようにしてる。 基本的にはできるだけコンストラクタに書いたほうが、読みやすいコードになるよ。 #regionと組み合わせるとなお良い。 指すものがコンパイル時点で決まっていて、利用者側のコードに左右されない要素(リテラル的なもの)は宣言と初期化を一緒にしてもいいと思う 上の固定長バッファはあてはまらないけど…
>>687 「.net Frameworksインストールしてね」で終わりじゃないか?
むしろ、Windows Updateで配布されてるんじゃないのか?.netぐらい
>>687 「めんどくせえなぁ・・・なんでこんな糞プログラムを・・・。そうだ!インストールしてない事にすればいいんだ!」
708 :
デフォルトの名無しさん :2009/02/04(水) 23:49:28
>>701 void Hoge()
{
int x = Class.Method(a,b);
}
これだとxはMethod(a,b)から返ってくる値しかとれないでしょ。
void Hoge(Func<int> getX)
こうしておけば
Hoge(() => x + y);
Hoge(() => x * y);
外部から自由な演算を入れられる。
ハッシュテーブルのキーが欲しいということになっても
Dictionary<TKey, TValue> CreateDictionary<TKey, TValue>(TValue[] array, Func<TValue, TKey> getKey)
{
Dictionary<TKey, TValue> dic = new Dictionary<TKey, TValue>();
foreach(var item in array)
{
dic.Add(getKey(item), item);
}
return dic;
}
var dic = CreateDictionary(array, item => item.Name);
その型のKeyにしたいものを自由に選べる
はやくXPが駆逐されればいいんだがなあ
デザインパターンは関数型っぽいことを無理やり手続き型OOPLでやるための工夫が主だから かなり簡単に実装できるよな
>>708 それみると、君の主張するところの直感的でもないし、
初心者にもわかりにくいと思うよ
>>712 じゃあオブジェクト指向や構造化でもっと直感的に、
初心者に分かりやすく書ける?
スレ違い よそで存分に議論してくれ
初心者ではないが、何が書いてあるかさっぱりだw
人の揚げ足取りと議論厨は相談スレにお引き取りください
717 :
デフォルトの名無しさん :2009/02/05(木) 00:07:42
すみませんコレは仕様なんでしょうか 1:public class Foo{ 2: private readonly int[] test = new int[]{1,2,3,4,5}; 3: public Foo(){ 4: int[] test2 = test1; 5: test2[0]=2; 6: Console.WriteLine(@"test[0]=" + test[0].ToString()); 7: } 8:} 上記 2行目readonlyにしてるtestが、5行目で書き換えられてしまいます。
>>708 じゃねーけど知りたいんならレキシカルクロージャとかで
ぐぐった方がいいと思うよ。
>>708 2ch で説明するのはさすがに難しいと思う
4: int[] test2 = test; のまちがいです
配列の要素がreadonlyになるわけではありません
>>718 2chで説明するのが難しいことが、初心者向けなの?
>>718 ググっても関数型言語ユーザーの宗教じみた言論に圧倒されるばかりだと思う
>>701 匿名関数は生成したスコープの変数をそのまま取り込める(環境を渡してるって言うんだっけ?)
副産物的な物だけど、遅延評価的な振る舞いも持ち合わせてる
725 :
723 :2009/02/05(木) 00:21:07
何々、これでいいじゃん? public static class Class { static int i; public static int Method() { return i++; } }
>>726 でもさ、C#でクラスそのものを引数に渡すって面倒事が多いでしょ。
だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。
クラスそのものって引数に渡せるの?
>>727 staticだからclassそのものを渡す必要なんてないよ
どこでも自由に
this.label1.Text = Class.Method().ToString();
でいいんじゃない?
>>728 private void button1_Click(object sender, EventArgs e)
のobjectはクラスじゃん?
objectはインスタンスだろ
ocjectはクラス名だ
object
この場合は話の流れからインスタンスってことじゃねーの?
public class Class { int i; public int Method() { return i++; } } これの方がいいだろ たくさん作れるし
>>729 それだと元のコードの引数を変えれば動作を変えられるという点が失われているじゃないか。
>>737 その引数を、Staticなメソッドで渡してあげればいいじゃない
public static class test
{
static int i;
public static int Method1() { return i++; }
public static void Method2(int k) { i = i + k; }
}
>>739 つまり
>だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。
というのは
>708とか足し算が掛け算になったり、辞書引いたりするような変化なんだけど。
と同義ということ?
C#でCreateToolhelp32Snapshot関数を使いたいのですが、どう書けばいいのか分かりません。 .NET Frameworkに似たようなクラスライブラリはありませんか?
>>740 いや、同義というより1つの具体例と言うべきかな。
>>696 みたいに別の場合だってある。
746 :
デフォルトの名無しさん :2009/02/05(木) 06:18:49
C#でアルファベットをfor文のループにかけてAからZまでを表示したいのですが、うまくいきません。 どのようにすればfor文でアルファベットを数値のようにAからZを表示する事が出来るのでしょうか?
>>746 一番分かりやすいのは配列にすればいいと思うよ
for(int i=0;i<26;i++) Console.WriteLine((char)('A'+i));
for(char c = 'A'; c <= 'Z'; c++) Console.WriteLine(c);
>>740 >
>>739 > つまり
>
> >だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。
>
> というのは
>
> >708とか足し算が掛け算になったり、辞書引いたりするような変化なんだけど。
>
> と同義ということ?
>
>>740 インスタンスを作ることでコンテキストの別な関数オブジェクトができる(イベント処理の時にstaticだとマズいだろう)
値を変えるのと振る舞いを変えるのとでは大違いだし…
デリゲート(委譲)はその名の通り、実行するタイミングを相手に委ねてる
渡すことを意図しているのは値(狭義の)ではなく動作
Form1からForm2をShowDialogした場合、 Formが描画される際に画面の上から順に 貼り付けてあるコントロールが表示される感じで、 Closeする場合も同様にもっさり感があるのだが、回避する方法はある? ちなみにForm2がLoadされるとDataGridViewにMDBから データを読込んで表示させているのだけど。
それはビルドした実行ファイル?デバッグ?
>>753 デバックでも実行ファイルでも描画速度にあまり変化がない感じ・・・
実行環境は?
756 :
デフォルトの名無しさん :2009/02/05(木) 14:20:35
>>752 描画を手動でやる
↓ソース開始↓
[コントロール名].SuspendLayout() //コントロールの描画停止
//(この間に処理を書く)
[コントロール名].ResumeLayout() //コントロールの描画再開
↑ソース終了↑
コントロール名をthisにすればForm全体の描画を停止できる
それはGUIの設計に問題があるね フローレイアウトパネルにコントロール配置してFillしたりAnchorしたり 推奨されてないことやってないだろうね?
素人発言だけどSuspendLayoutとResumeLayoutとか?
759 :
752 :2009/02/05(木) 14:36:21
実行環境はXPでCelelon2G・メモ1G VS2008でつ。 GUIの設計はVB(.Netじゃないヤツ)みたいに Formにコントロールを貼り付けるだけではダメなのかしら? Formにあるのは、DataGridViewとButtonとTextBoxとLabelだけ。 DataGridViewコントロールを外して純粋にFormだけでShowすると 幾分早く描画されるって事はDataGridViewの処理が適切でないのかな? 今から756氏と758氏を参考に試してみます。 みんな優しいな。ありがたい!
760 :
デフォルトの名無しさん :2009/02/05(木) 14:47:04
DataGridViewに対してデータセットをバインドさせると早くなるよ〜 それでも遅いのならSQL文を見直すしかない
761 :
752 :2009/02/05(木) 15:01:31
SuspendLayoutはあまり変化がなかった・・・ _| ̄|○ 今は、OleDbConnection使ってMDBへ接続しているんだけど、 もっと早い方法はあるんですか? SQL文に関しては単なるSELECT文なのでどうにもならないと思われ。。
データのバインドを直接じゃなくBindingSourceに任せてみたらどうだろう こういう症状はあまり経験も聞いたこともないけど
あれ?もしかしてDataSetなし?
764 :
752 :2009/02/05(木) 15:09:40
>>762 早速試してみる!
VB6から移行してきた口なんだが、勝手が違い過ぎて戸惑いすぐる。
DataSetはあります。 コードはこんな感じ(抜粋) strSelectSQL(変数)へSELECT文を入れてます。 dba = new OleDbDataAdapter(strSelectSQL, dbc); OleDbCommandBuilder builder = new OleDbCommandBuilder(dba); dba.Fill(dtset); dataGridView1.DataSource = dtset.Tables[0];
766 :
752 :2009/02/05(木) 15:15:47
CommandBuilderからdatasetまで全部動的か
768 :
752 :2009/02/05(木) 15:36:30
bindingSourceを追加してみたけど、速度は劇的に早くならなかった。 実行速度はこの位って事で満足したことにまつ。 なんか引っかかるけど・・・ ところでbindingSource下記で使い方間違ってない?? dba = new OleDbDataAdapter(strSelectSQL, dbc); OleDbCommandBuilder builder = new OleDbCommandBuilder(dba); dba.Fill(dtset, "TEST"); bindingSource1.DataSource = dtset; bindingSource1.DataMember = "TEST"; dataGridView1.DataSource = bindingSource1; 教えて君で非常に申し訳なかったです。
769 :
760 :2009/02/05(木) 15:36:38
動かしてないんでご両所くださいw すべて妄想ですw ↓ソース開始↓ OleDbConnection odc = new System.Data.OleDb.OleDbConnection(); OleDbDataAdapter odda; DataSet ds = new DataSet("GetData"); //データセットの名称を指定 //接続情報を指定 odc.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source = " + @"\DUMMYDATA.mdb"; //実行SQL文と接続先情報を設定してアダプタを作成 odda = new OleDbDataAdapter("SELECT * FROM DUMMYDATA", odc); //データを取得しテーブルを作成 //テーブル名称を設定(任意) odda.Fill(ds, "tm_DUMMYDATA"); //データソースに設定 dataGridView1.DataSource = ds.Tables["m_DUMMYDATA"]; //インデックス値でもいい ↑ソース終了↑ いろいろ勘違いしてたらごめんね 反省はしないけど
770 :
752 :2009/02/05(木) 15:44:25
>>769 ソースまで書いてもらって、しかもコメント付で!!
ほんとに親切にありがとう。
素直にうれしす。
コンストラクタについての質問です。 クラスが3つあります。クラスBは3つコンストラクタがあります。 ClassA { ClassB b = new ClassB(〜); } ClassB { public ClassB(N n){} public ClassB(N n, M n){} public ClassB(N n, M m, O o){} } ClassC { ClassB b = new ClassB( ); b.〜 } クラスAからクラスBを呼び出すときは、if文で分けてコンストラクタを1つだけ呼び出すことが できたのですが、クラスCからクラスBを呼び出すときはどのように呼び出したら良いでしょうか?
こっちが聞きたい ClassAとClassCは何が違うんだ
>>772 クラスAのwindowフォームからクラスBのwindowフォームを呼び出すんですが、
そのクラスBのフォームの選択欄を別のクラスCで使いたいのです。
だったら class A() { public B b; C c; public A(){b=〜;c=C(this)} } public class C() { public C(A a){} } とかじゃだめ?
>>771 逆に聞く。
ClaaAからClassBを呼んだときと同じように、ClassCからClassBを呼ぶとどうなったんだ?
>>776 コンパイルエラーはでないのですが、
クラスCでは、クラスBの変数を呼び出しても未定義となってしまいます。
いいから失敗したコードを晒せ
>>777 確認だが、同一form(B)の情報をAとCで共有したいってことでいいの?
だったら両方でnewしてるから
今のコードだったら、AとCがそれぞれ別のform(B1,B2みたいな)を持ってることになる。
違うなら、そもそもやりたいことが分からん。
>>779 クラスAで入力したテキストの個数によってクラスBのコンストラクタをShow()を使って
1つ呼び出すだけですが、クラスBではリストボックスなどをSelectedItemで選んで、
その選んだ項をクラスCで使いたいのですが、クラスCでクラスBの変数を使いたいときに、
クラスBのインスタンス化を行うときに、どのコンストラクタを選択すればよいのかが分かりません。
禅問答みたいw
たぶんVB脳、それも極上のやつなんだと思う
小文字は大文字クラスのインスタンスだとする。 (1) a → b1 c → b2 (2) a → b ← c どっちなんだ ちなみに(1)はフォームが2つできる。そしてb1とb2は別物だからリストボックスなんかの情報は共有できない。 俺には(2)を実現したいのに(1)のコードを書いちゃってるように見えるんだが・・・
なんか、他のクラスを呼び出すときはNewしなきゃいかんという間違った固定概念をお持ちなのでしょう
×固定概念 ○固定観念
もう少し勉強しましょう、としか言いようがない。 >クラスBのインスタンス化を行うときに、どのコンストラクタを選択すればよいのかが分かりません クラスBは自分で書いたんでしょう? だったら自分で知ってるはず。 そうじゃなくてたぶんあなたの質問は、 「データをどうやってクラス間で渡したらいいですか?」というやつではないのかい? なんか書いても書いても返答がないので手応えのない質問者だ
馬鹿がバレるのを恐れてるんじゃないの。
きょうもしつもんです。 「時間計るときに、System.Environment.TickCountを良く使うけど、 24.9日たったら一周しちゃうから、なんとかならないかなー」 なんて書き込みがよくありますが、 なんでSystem.Diagnotics.Stopwatchを使わないんでしょうか? 数十日間もパフォーマンスカウンタ取得し続けたら、CPUとかハード的に 負担(たとえばやりすぎたら故障しやすいとか)があるんでしょうか? もしそうだとしたら、なんとかSystem.Environment.TickCountを64bit化する コーディング方法はあるんでしょうか?
>>788 一周したかどうか、チェックすればいいんじゃないでしょうか。
フレームワークのバージョンのせいじゃねーの
じゃあやっぱりSystem.Diagnotics.Stopwatchでもいいんですかね。 なんかCPUのクロックからどうのこうのって言われるとCPUに悪そうなきがして。
はあ?
>>788 Vista/Server2008なら、API関数のGetTickCount64()が使える。
まあ、System.Environment.TickCountで間に合う程度の精度での時間計測なら、
DateTime.Now.Ticks / TimeSpan.TicksPerMillisecondでも問題ないだろうけど。
ローカル時間使うとプロセス起動中にBIOS時計触ったら狂ってしまいますよね。
まあ、NowだとNTPで同期入ったらずれるだろう。 Stopwatchの中身QueryPerformanceCounterだよ。
796 :
デフォルトの名無しさん :2009/02/05(木) 19:58:46
>>788 はいこれ使ってくれ つSystem.Diagnotics.Stopwatch
.NET Framework1.0「おkおk」
.NET Framework2.0「そんな古臭いコード保障できねーからいらねーよ」
ストップウォッチ使ってfor文の処理の時間とかをPCごとに幾らになるか計ったらダメなん?
798 :
デフォルトの名無しさん :2009/02/05(木) 20:35:48
>>796 System.Diagnotics.Stopwatchって2.0からじゃなかったっけ
>>742 遅くなりましたが、ありがとうございました。
800 :
デフォルトの名無しさん :2009/02/05(木) 20:47:57
>>798 ごめん 間違えた
訂正
はいこれ使ってくれ つSystem.Diagnotics.Stopwatch
.NET Framework2.0「おkおk」
.NET Compact2.0「サポートしてませ〜ん」
申し訳」ない
private void catalogDataGridView_CellContextMenuStripNeeded(sender,e) { } DataGridViewCellEventArgs(e.RowIndex,e.ColumnIndex)で どこがクリックされたかは取得できるのはわかるのですが クリックした場所が選択中(SelectedRows)かどうかを調べる方法はないでしょうか? 選択中の行の上でクリックしたときだけカスタムストリップを表示したいのですが と書いてるうちに自己解決しました。ありがとうございます。
どういたしまして。
803 :
デフォルトの名無しさん :2009/02/05(木) 21:36:48
System.Diagnotics.Stopwatchは1年くらいプロセス起動したまま使い続けても大丈夫なの?
パフォーマンスカウンタなんて常に参照されてるんだから気にするなよ タスクマネージャの情報ほぼ全部そっから取ってんだぞ
byte[100]の中から、任意のデータの並び(0x112233とか)を検索するにはどうすればよいですか?
>>803 システムの起動(CPUの電源ON)からのカウント数だから、プロセスの起動時間は関係ない
>>805 byte境界を越えてるのも探したいの?
ビットパターンを頭から見てくしかないんじゃね?
ちょっと、スレ違い気味な事で申し訳無いのですが・・・ 適切なスレがありましたら指摘して下さい。 VisualStudio2005 C# で Webアプリケーション 及び Webサービス を作ろうとしていたのですが、 パケットをキャプチャする為にはIIS上で動かさなければいけないのでしょうか? 「とりあえず動かすのが先だ」と考えて、VSを複数立ち上げて.NET開発サーバー間でやりとりしていたのですが、 いざパケットを見ようと思ったら見方が解らなく、ネットも自分の解る範囲で検索してみたのですがそれらしい情報を 見つける事が出来ませんでした・・・ localhost内でやりとりする(?)パケットを見る事は出来ないのでしょうか・・・?
810 :
デフォルトの名無しさん :2009/02/05(木) 22:04:03
>>805 byte[100]ならBM法でもたいしたコストかからないよ
812 :
805 :2009/02/05(木) 22:11:43
やっぱり自力でやるしかないんですね。 便利なクラスが用意されていればと思ったのですが…
>>809 ローカルじゃ無理じゃね? 無料の VirtualPC でも使いなよ。
815 :
デフォルトの名無しさん :2009/02/05(木) 22:19:02
public int BytesBytes(byte[] src, byte[] target) { StringBuilder sbSrc = new StringBuilder(src.Length); for (int i = 0; i < src.Length; i++) { sbSrc.Append(src[i].ToString(@"X2")); } StringBuilder sbTarget = new StringBuilder(target.Length); for (int i = 0; i < target.Length; i++) { sbTarget.Append(target[i].ToString(@"X2")); } return sbSrc.ToString().IndexOf(sbTarget.ToString()); } (∪^ω^)わんわんお!
818 :
デフォルトの名無しさん :2009/02/05(木) 22:26:55
>>814 Array.Find()だと任意の並びは検索できないんじゃね
原文01122334
↓
検索対象112233
だとヒットしない
public static int Find(byte[] src, byte[] target) { return System.Text.Encoding.ASCII.GetString(src).IndexOf(System.Text.Encoding.ASCII.GetString(target)); }
820 :
815 :2009/02/05(木) 22:33:29
>>819 に負けた・・・
ASCIIにするの思いつかなかった
822 :
デフォルトの名無しさん :2009/02/05(木) 22:36:07
あ、でも
>>819 だと4ビットずれてたら検索できないね
ん、ビット単位でずらして検索するのか?
ASCIIだと0x80以降が0x3Fになっちまうっていう
文字列にして検索してるのは馬鹿?
ネタをネタと(
コストを考慮しなくて良い場合は手抜き実装としてアリだと思う
831 :
809 :2009/02/05(木) 22:55:46
>>810 試してみたいと思います。
>>813 どうも自分も調べていてそうなのかもと思い始めた所でした・・・
OSが内部で処理しているみたいですね。
今日中に解決できなければその方法で行こうと思います。
>>817 ありがとうございます。
そのサイトは自分も行ったのですが、
ARPの追加が出来なくて諦めました(汗
(エントリを追加できませんでした:5って奴です)
もう少し知識があれば色々突っ込んでやりたい所なんですが、
勝手にARPをイジっても大丈夫なのかよくわかってないので、
その方法はやめておきます・・・。
みなさんありがとうございます。
とりあえず今日中は頑張ってみようと思います。
833 :
809 :2009/02/05(木) 23:03:45
class Helper<T> { IEnuemrator<T> e; public Helper(IEnumerable<T> e) { this.e = e.GetEnumerator(); e.MoveNext(); } Result{ Accept, Reject, 保留 } public Result Add(T item) { if(e.Current.Equals(item)) { if(e.MoveNext() == false) return Result.Accept; return Result.保留; } return Result.Reject; } } こんなんを自作して、一つめが合っていたらこれを作って入れるみたいな感じじゃない?
何それ
誤爆?
837 :
817 :2009/02/05(木) 23:40:31
>>831 該当の記事には要点しかなので、そのまま説明内容を打ち込んでも
ダメなのは理解してるのかな?
事前に
http://blogs.yahoo.co.jp/akio_myau/34370200.html とかで説明してるようなMicrosoft Loopback Adapterを追加してやらなければ
ならない
これはローカル通信専用の仮想のネットワークカードのようなもの
するとネットワークが1つ追加されるので、これにIPなどを設定することで、
初めて817の記事内容にあるarpコマンドを受け付けるようになる
デフォルトのローカル通信はキャプチャできないけど、追加した仮想ネットワークは
ローカル通信には違いないけど仕組みが若干違うのでキャプチャできるってことだと思う
なお、arpテーブルはアドレス解決のキャッシュみたいなものなので自分で
設定する分には特に心配はない
誤爆の方がよかったね
ええええ、まさかとは思ったが・・・
こんなに素直なコーディングを見てそんな感想かよ
∩___∩ | | ノ\ ヽ | / ●゛ ● | | | ∪ ( _●_) ミ j 彡、 |∪| | J / ∩ノ ⊃ ヽ ( \ / _ノ | | .\ “ /__| | \ /___ /
揚げ足取りの時間です
どうでもいいけど、バグってんだよなそれ
>>834 IEnumerator<T> が何を実装しているかもう少し見たほうがいい
foreach 使わないと無駄に長くなる理由でもあるんだけど
IDisposableにしろって話? 嫌だよめんどくさい
| | ∩___∩ | | ノ _, ,_ ヽ (( | プラプラ / ● ● | (=) | ( _●_) ミ _ (⌒) J )) 彡、 |∪| ノ ⊂⌒ヽ / ヽノ ヽ /⌒つ \ ヽ / ヽ / \_,,ノ |、_ノ
お取り込み中すいません。 Windows Forms1.1(VS.NET2003)のLabelのTextに "‐"(シフトJISの815D)を設定すると表示されなくて困ってます。 仕様なんでしょうか? WinForms2.0やVB6.0(Label.Caption)では表示されます。 Buttonとか、"&"のアクセスキー処理ができるコントロールでは みんなこの現象が出るようです。.NET1.1はSP1入れています。 "‐"や"815D"で検索しても情報がなくて。。。
849 :
809 :2009/02/06(金) 00:36:08
>>837 ipconfigにloopbackというのが無い事に気づき、インストールしてarpまではたどり着けました。
ただ、routeするとすでに登録されているとの事で、route PRINTで確認したのですが登録されてました。
これでキャプチャできるのかな?と思ったのですが、やはり見れませんでした・・・
これは見ながらやった設定が間違っていたのか、もしくは自分がNetworkMonitorの使い方を正しく把握していからかのどちらかではないかと思います。
ためしにブラウザにloopbackと入れるとIISのページが表示されたので、loopback == localhost???とか、正常にloopbackされているという事?と、色々頭に?が浮かんでます笑
後一息の様な気がするのですが、明日朝もう一度試してみてダメならダメでまた時間のある時に試してみようと思います。
私の様な初心者に細かに解説していただき、本当にありがとうございました。
>>848 これだな。Shift_JISの0x815D == U+2010
Windows Server 2008、Windows Vista、Windows Server 2003、および Windows XP で
GDI+ API 関数を使用するアプリケーションを使用すると、Unicode ハイフン文字 (U+2010) が描画されない
http://support.microsoft.com/kb/956807/ja .NET 1.1はコントロールの描画にGDI+を使う。
.NET 2.0で標準だとそこにはGDI+を使わなくなったので、.NET 2.0だと問題が起こらなかったというわけ。
C#でアマゾンからアイテム情報を取得する方法についての質問をさせてください WEB参照の追加でアマゾンにアクセスしているのですが ItemSearchRequest を使用してキーワードにISBNコードを入力するときちんと対象の書籍情報を得ることが出来ます。 ところが ItemLookupRequest を使用して ItemLookupRequestIdType にどんな指定を行っても ASIN を入力しないと null になってしまいます。 ItemLookupRequest LR = new ItemLookupRequest(); LR.ItemId = new string[] { "4150204845" }; //ASIN これだと取得できますが LR.ItemId = new string[] { "9784150204846" };//ISBN これではnullになります LR.IdType = ItemLookupRequestIdType.ISBN; 指定はISBNにしているのですが関係は内容です LR.Condition = Condition.All; LR.ConditionSpecified = true; LR.MerchantId = "All"; LR.ResponseGroup = new string[] { "Large", "OfferFull" }; どこが間違っているのかをご教授頂ければ幸いです
スレ違いです
プログラムのある地点(イベントの呼び出し側)を通過したら、 他のクラスのディスプレイをクリックするというイベントを起こすことは可能ですか?
なかなかの難文だな
そうだな
>>850-851 2.0でもUseCompatibleTextRendering プロパティをいじったら
再現しました。納得しました。ありがとうございます。
・イベントの呼び出し側 いまいちどっちなのか分からんな。イベントって呼び出すものじゃないから。 consumerなのかproviderなのか? まぁどっちでもいいけど。どうせ分からんから。 ・他のクラス ディスプレイ(笑)があるってことはコントロールなんだろうな。違うかもしれんが。 このクラスのコードには触れるの? 触れるならOnClickを呼ぶメソッドを公開すればいいんじゃない? 触れないななら難しいね。ButtonとかだったらPerformClickすればいいけど。 WM_LBUTTONDOWN / WM_LBUTTONUPをウィンドウにポストするとか
いろいろwindowsフォームを作りすぎてタブ機能でまとめたいと思っているのですが、 タブにする方法を学べるサイトを教えてください。
あるwindowsフォームが存在するかどうかを判定する方法を教えてください。
何したいのか知らんけどFindWindowでも使ってれば
フォームの参照は持ってるんじゃねーの? form.IsHandleCreated && !form.Disposing && !form.IsDisposed とかかね〜? IsWindowを調べたくなるが
きょうはよいしつもんが思い浮かびません。
じゃ、C#は言語仕様の改訂でVBに成り下がるのかどうか論議しようぜ
「初心者です。こうこうこういう仕様でクラス作りました。ソースはこちらです。一応ちゃんと動きます。エロい人添削してください。」 みたいなスレ無いかな
ここ
クラスライブラリ晒せばいいの? .exe?
ソースを晒せばいいの
マイクロソフトがVC#で採用してるdelegateモデルのクラス図が載ってるサイトを どなたかご存知ありませんか? 英語のサイトでも全然構わないんで
でりげーともでるのくらすず?
ドキュメントから生成しなよ
delegateって、イベント発生時に実効されるメソッドのようなイメージの使い方しか 思い浮かばないんだけど、他に便利な使い方ってあんのかな 極端に言えば、イベント発生元に実行させるオブジェクトを渡しておいて そこで実行させればいいだけのような気がするんだが。
LINQを使ったことがあれば そんな感想にはならない
LINQ TO SQL はキャンセルじゃん ENTITYは別物で関係なくね?
LINQはオブジェクトにこそ使うものだ
LINQ to SQLはデリゲート関係ないし
じゃ少なくともLinqの無いC#2.0まではdelegateは無意味ってことは納得なわけだ
>ベント発生元に実行させるオブジェクトを渡しておいて >そこで実行させればいいだけ そもそもこれが面倒だからデリゲートが導入された javaの惨状を見ればわかる
好きして
LINQを使ったことなくてもそんな感想にならないと思うなぁ デリゲートもオブジェクトだよ。 それだけ。
882 :
デフォルトの名無しさん :2009/02/06(金) 23:32:43
Cで関数ポインタ使った事無いの?
>>878 フレームワーク内ではたくさん使われてるから無意味ということはないだろう
俺はGUIにイベントを登録する時ぐらいしか使わなかったが
>>873 君にこれを上げよう
java.beans.EventHandler
Cの関数ポインタは雑魚 参照オブジェクトがないから もうデリゲートとは全然違う
887 :
882 :2009/02/06(金) 23:41:22
Program.csの部分は動作確認用にとってつけたので適当です。
デリゲートは雑魚 参照オブジェクトがあるから もうCの関数ポインタとは全然違う
>>882 ソースファイルの名前に日本語を使わないこと
日本語使うなとは言わないけどクラス名だけに日本語使うのは意味がわからない
891 :
882 :2009/02/06(金) 23:58:24
>>889-890 ソースを見てもらうのに視覚的にわかりやすいかなと思いそうしました。
自分的に気になるというか心配なのは
受信データ.GetBytes()内のreturnValueが開放されるタイミングです。
>>882 おい、catch{}して例外握りつぶすのやめろ
自分で処理しきれないのはrethrowしとけ
>>891 そんなもんガーベジコレクタが適当になんとかしてくれるだろう
894 :
882 :2009/02/07(土) 00:32:20
>>892 書き直します。ありがとうございます。
>>893 そうですね。短時間に数千回処理してもメモリ圧迫しないか検証してみます。
GCの性能をとくと見るといい
>>882 いろいろ雑すぎる
致命的な部分だけでも、
スレッドの無限ループの明示的な終了条件がないとか
Disposeの中でjoinしてるとか
通信パケットの受信タイミングとるのにイベント使ってないとか
人に評価してもらうよりも、まず、本やインターネットで基本を
おさえることを考えたほうがよい
まず、以下のあたりから
- スレッドの生成の仕方、終了判定の基本パターン
- 通信における、受信時の基本パターン(イベントを使うやり方)
- ついでに、C#のコーディング規約をどれでもよいのでインターネットでさがして
それに従って書いてみるのとよい
ついでに
>短時間に数千回処理してもメモリ圧迫しないか検証してみます。
ReadLineのタイミングで受信データ1つ読み出すんじゃ、数千の処理なんで
できないのでは?
>>879 >>881 イベント発生で実行させたいメソッドをIInterfaceで規定して、
イベント発生元で、イベント発生したら、そのメソッドを実行させればいいじゃない
898 :
882 :2009/02/07(土) 00:53:38
確かにDispose()内でjoin()はありえないですね。 でなおします。
>>897 だからそれが面倒なんだよw
インターフェイスだと関連する複数のメソッドをまとめて宣言したくなるけど
そうやると後からメンバを追加できなくなる
だから結局メソッド一つのインターフェイスになって,デリゲートと同じ
同じなら流用できるから新規に作る必要なんてないじゃない それにインスタンスそのものを渡すわけだから、もっと応用が利くじゃない
デリゲートは実際にはインスタンスと関数ポインタを渡している 記述が合理的になるからインスタンスで出来ることよりも幅広い細かいことを やらせられる
むりやりインスタンスでやろうとしたJavaは結局めんどくさくなって 無名内部クラスみたいなキチガイじみたものを産み出したしな
「使用頻度の高い定着したパターンは言語に取り込む」がC#の設計思想の基本 javaでもイテレータやEnumなどは言語に取り込でるだろ
インスタンスを直接渡せたほうが幅広いことができるじゃない 暗黙的な型指定や無名関数は、使用頻度の高い定着したパターンじゃないじゃない
C++は暗黙的な型指定と無名関数 Javaも無名関数を取り込もうとしてるじゃない あって当然のものをC#がまず取り入れたって話でしょ
>>904 インスタンスを直接渡す事もできるのがC#、それしかできないのがJava
あって当然かどうかは、単なる個人の主観じゃない 単に機能の選択肢が多いほうが良いというわけではないじゃない ex 多重継承することもできるのがc++ 多重継承が許されないのが・・C# Java
そして選択肢があった方が良しと考えられたからデリゲートが採用された。 おしまい
C++とC#とJavaにある機能ならあって当然だろうよ で無名関数はこれからそうなる いずれ暗黙の型指定もJavaに入れざるを得なくなるんじゃないか そのころにはScalaがJava VMのメイン言語の座を乗っ取ってるかもな
Directory.SetCurrentDirectoryにマイコンピュータをセットしたいのですが、 どうしたらいいでしょう? プロセスみたいに "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}" ではできませんでした。
無理
無名関数は関数型言語なら必須。 OO言語でもDとか普通に使ってる。
デリゲート等、どんどん言語仕様が複雑になり、 かつコンパイラと人間の間で1:1の意味にとれない書き方が認められて煩雑になってるじゃない 存在理由が他言語にあるからなんてのは単なる思考の放棄じゃない そしてC#は関数型言語じゃないじゃない
デリゲートがない方が言語仕様が複雑になるだろ Javaの無名内部クラスがいい例だ デリゲートは人間に分かりやすくコンパイラにも分かりやすい 無名内部クラスはその逆だ
>かつコンパイラと人間の間で1:1の意味にとれない書き方が認められて煩雑になってるじゃない アセンブラ以外は言語として例外なく煩雑と言ってるのと同じじゃない >存在理由が他言語にあるからなんてのは単なる思考の放棄じゃない >そしてC#は関数型言語じゃないじゃない C#は関数型言語じゃないから他言語からの概念の導入が 適切じゃないというのは単なる思考の放棄じゃない
変数の解釈の曖昧さを述べてるのに、言語全般に解釈して論じるのは論理のすり替えじゃない 関数型言語なら必須だとするのはおかしいといってるだけで、適切じゃないなんて述べて無いじゃない
複雑だと思うならつかわなきゃいいんじゃねーの? なんでアホはあるもの全部使わなきゃ気がすまねーの?
まず変数の解釈のあいまいさについて述べてる文には見えないけど 変数の解釈のあいまいさってどういう意味よ
言語は複雑でも、利用者が個別に使い分ければいいならc++だけを拡張していけばいいじゃない
ひろし追い越すなw
>言語は複雑でも、利用者が個別に使い分ければいいならc++だけを拡張していけばいいじゃない デリゲート仕様の是非について述べてるのに、言語全般に解釈して論じるのは論理のすり替えじゃない
一言語に過ぎないc++を言語全般と解釈するのは論理のすり替えじゃない
>>922 あれ? 使い分けるなら一言語に過ぎないC++だけを拡張して使えばいいとか
大統一宣言してるの誰でしたっけwww
言語仕様が複雑になったc++にかわって、よりスッキリとした仕様のjavaやc#などが 導入されている面もあるということに対するアンチテーゼじゃない
じゃないって肯定なのか否定なのかわからなくなる・・・
わからなくね?
初心者用の相談以外の無用な議論はよそでお願いしたい スレがすぐに埋まってしまう
わからなくならなくね?
こんな低レベルな話ここ以外でどこでやるんだよw
>>910 実際に存在するディレクトリじゃないとカレントにできんです
わからなくなくならなくなくね?
複雑だと思うならつかわなきゃいいんじゃねーの? なんでアホはあるもの全部使わなきゃ気がすまねーの?
>>932 多分、向こうはほんとに複雑だなんて思ってないだろ。
単に、自分の無知をとがめられたのに切れて難癖つけてるだけ。
フォームにpictureBoxがあって、それに画像を表示させるのですが、 表示させた後にフォームの四隅の矢印で大きさを変えたら、 画像が途中で切れたりするのですが、どのような対処法がありますか?
もう一度描く
もういいから
doubleでt=1/-300としたら(実際はtx-xでした)(tx=0,x=300) t=0になってたんですけど これはどうしてでしょう (デバックでちゃんとその値が入っていることは確認しました) 更に試しに↑の式でそのまま入れてみましたがやはり0でした
>>935 画像の表示はどうしてますか。
ImageプロパティやPaintイベントを正しく使ってればおきない現象なのだけど。
もしCreateGraphicsを使ってるなら何か勘違いがあると思う。
>>941 あ、そっか…
1/300だと1/300がintで計算されちゃうんですね
分かりました有り難うございます。
(実際角度が欲しかったのでAtan2にしてしまいました…)
>>940 なんか原因は分かった気がします。ただ解決法が・・・。
フォームのサイズ変更に対して、pictureBoxのサイズが連動してくれないみたいです。
一応Ancher?みたいなのはいじったんですが。
すげー落ちだな・・・
>>944 Dock=Fillで連動するのはpictureboxの枠だけで中の画像の大きさはそのまま。
表示しているのがBitmapやjpegなどのイメージなら、
BackgroundImageに設定してBackGroundImageLayout=Zoomにすればいい。
>>946 ありがとうございます。
if文の判定でtrueかfalseで場合分けすると思いますが、
ある変数が未定義かどうかで場合分けすることは可能でしょうか?
変数そのものが宣言されていないのか,値が代入されていないのかどっち? 前者なら,今のC#では存在しない変数には絶対にアクセスできないので考え方が間違ってる 後者なら,参照型の場合はnullと比較,値型の場合は用意されたEmpty用の値を使うかnullable使う
特定のディレクトリ中でのファイル名の比較はどうやればいいんでしょうか? ファイルシステムによって大文字小文字が区別されたりされなかったりしますよね?
どうやればいいんでしょうかって、あなたの使用目的によりますが。 あなたが自身が大文字小文字の区別をしたいのかしたくないのか。
システムと同じ動作にしたいんだろ
システム見て判断すりゃいいだけじゃん
nullableをつかうべし
>>952 ディレクトリのパス渡すと適切なIComparerを返してくれるものがあればいいんですけど
ないですかね?
C#で、windows liveメッセンジャーにログインしたとき等に画面右下に 表示されるような、画面最前列に表示されるけど、ユーザーの入力を 奪わないようにするような窓を表示させるにはどうすればいいでしょうか?
Form.ShowWithoutActivation
初心者用の相談以外の無用な議論はよそでお願いしたい スレがすぐに埋まってしまう
おまえがしね
じゃ誘導するかスレ立てしろよ 自分は何もしないで言うだけ番長かよ
なるほど ありがとうございました
961 :
デフォルトの名無しさん :2009/02/07(土) 21:06:20
すみません。WPFって言うのの本をかってきたんですが、XPでもできますか?
.NET3.5いれときゃいけると思うけど、糞思いよ
WPFとswingってどっちが優秀?
C++/CLI触ってみたがすげーな C#じゃなくてもいいわ
なにがどう凄いのか書け
>>911 ,
>>930 ありがとうございました
何とかしてマイ コンピュータにあるファイル(?)を取得できませんか?
お前が使ってみろよ 使わなきゃわからんだろ
VSスレで暴れてた奴だ、相手にすんな
質問です。普通のintやstringといった変数の型では、 string moji = "string"; という代入ができますが、自作のクラスで、これと同じようなことができますか? 例えば MyClass myClass = new MyClass(); myClass = "string"; みたいにmyClassのメンバに"string"を渡したいのですが
誘って質問してるだけでは? すこしでも反応すると、そこから情報読み取られるよ (なにがすごいか書けるもんなら書いてみろ!両方わかってる俺が正論でつぶしてやる) CLIがダメだってすごい伝わってくるから気をつけた方がいいよ
自分で正論って言う奴が正論を言った試しがない
ついでに論破といった奴が論破できていたためしがない
>>969 MyClassがStringの派生クラスなら出来るんじゃない?
若しくはStringからMyClassへキャストできるようにするとか。
下手にex/implicitするよりもコンストラクタをもう一つ作って
myClass = new MyClass ("string");
した方が良いと思うけどね。
ローカルスコープを抜けたときにIDisposeパターンを実装したクラスの Disposeが自動的に実行されるのは確かに便利なだ
ぬるぽと言ったヤツがガッされた試しがない
C#よりObjectPascalのほうがわかりやすい
いろんな言語つくられても正直迷惑 学者がおれがおれが、っていいたいだけだろ
というか、Andersが凄いんだな frameworkの開発にも関わってたのかな まんまVCLだからな
List<T>を公開しては行けないとかのガイドラインってどこにありますか?
質問です 戻り値の型がbyte[]のWebServiceのメソッドを SOAPで直に実行してるんですけど、 戻って来たxmlのxsdデータ型がbase64Binaryなんですね。 innertextの文字列をbyte[]に変換したいんですけど Encodingクラスでは無理っぽいし System.Runtime.Remoting.Metadata.W3cXsd2001.SoapBase64Binary を見てみましたがValueプロパティ自体がbyte[]なんですよ。 どうすればいいでしょうか?
なんかよくわからんけどConvert.FromBase64***は使えない?
985 :
982 :2009/02/07(土) 22:11:15
>983 使えました!ありがd!
u
>>971 ありがとう。演算子のオーバーロードで
MyClass myClass = "string";
は実現できましたが、string moji = MyClassは不可能ですか?
>>974 stringやintを継承するとsealなので無理といわれます(´・ω・`)ショボーン
>>987 MyClass:String
でいけなかったっけ?
シール型'string'から派生することはできませんって言われます VisualStudio 2005です (´;ω;`)ブワッ
MyClassにString型メンバ変数を加えるとか
class MyClass { public static implicit operator string( MyClass myclass ) { return myclass.ToString(); //など } }
>>991 んーintでやってみたけど、無理ですね(´Д⊂グスン
MyClass myClass = 1;
int myInt = myClass;
型intを型MyClassに暗黙的に変換できません
>>992 さすがに応用力なさ杉じゃないか?w
っていうか、少しはMSDNライブラリとか読もうよ
ああ、newクラスかw ごめんちょっと勘違いしてた
>>993 MyClass myClass = 1; はできてるんですよ
int myInt = myClass; はできないのかなと思って。
>>995 class MyClass
{
private int i;
public static implicit operator int( MyClass myclass )
{
return myclass.i;
}
public static implicit operator MyClass( int i )
{
return new MyClass();
}
}
>>997 なるほど!そういうことか!!
正確にはこうですね?ありがとう
class MyClass
{
private int mInt = 10;
public MyClass(int i)
{ this.mInt = i; }
public static implicit operator int(MyClass myclass)
{ return myclass.mInt; }
public static implicit operator MyClass(int i)
{ return new MyClass(i); }
}
999 :
998 :2009/02/07(土) 23:41:16
>>995 出来るけど、多用はオススメはしない。
知らない間に情報が欠落してるって事もあるし…
つうか、
>>993 を嫁よ
>>984 サンクス。ブックマークに追加した。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。