ふらっとC#,C♯,C#(初心者用) Part36

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
2デフォルトの名無しさん:2009/01/20(火) 21:57:46
C#, C♯, C#相談室 Part50
http://pc11.2ch.net/test/read.cgi/tech/1229661915/

WPF(XAML,XBAP,.NET3.5)GUIプログラミング
http://pc11.2ch.net/test/read.cgi/tech/1211453941/

初心者のためのプログラミング言語ガイド Part13
http://pc11.2ch.net/test/read.cgi/tech/1232286278/
3デフォルトの名無しさん:2009/01/20(火) 22:00:22
4デフォルトの名無しさん:2009/01/20(火) 22:59:45
ComImportを使って自作のDLLを読み込むのってどうやるの?
5デフォルトの名無しさん:2009/01/20(火) 23:11:00
リモートのファイルサイズ取得方法について質問です

HttpWebResponse.ContentLengthでContent-Lengthヘッダ情報を取得できますが
Content-Lengthが設定されていない場合にリモートファイルサイズをHTTPで取得する方法はありますか?
フリーのダウンローダー(Irvine等)などはHTTPでファイルサイズを取得してるようなのですが
解決方法をご存知の方お願いします。
6デフォルトの名無しさん:2009/01/20(火) 23:19:35
>>4
その自作のDLLとやらはどうやって作った何者?

>>5
HTTPだと一般的なのはContent-Lengthしかないよ
IrvineもContent-Lengthが存在しない場合サイズは0って表示してるだろ
7デフォルトの名無しさん:2009/01/20(火) 23:27:36
bandObjectを使ってタスクバーに表示するツールバーを作成しました。
しかしcodeprojectのコードのままでは表示/非表示状態を記憶してくれません。
ログオンする度に毎度毎度タスクバーを右クリックして、
ツールバーを表示させなければいけません。
これをなんとかしたいです。

ttp://blog.mutantbunny.com/2006/03/ideskband-problems.html
ttp://www.eggheadcafe.com/forumarchives/platformsdkshell/Oct2005/post24484805.asp
このへんを見るとIPersistStreamというのを使って状態を保存しなければならないみたいですが、
LoadやSaveがいつ呼ばれているのかさっぱりわかりません。

どなたか、教えて下さい・・・
84:2009/01/20(火) 23:51:27
>>6
Visual C++で、WindowsSDKのSampVidサンプルを改造して作った
DirectShowのレンダラーフィルタ
2つか3つぐらいメソッドが追加されている。そのメソッドも使いたい。

ComImportではGUIDを指定するみたいだけど、DLLの名前
指定してもいないのにどうやってDLLに定義してあるGUIDがわかるの??
その辺りがちんぷんかんぷん。
9デフォルトの名無しさん:2009/01/20(火) 23:54:23
C++/CLIで作ればいいのに
10デフォルトの名無しさん:2009/01/20(火) 23:58:02
そもそもCOMの仕組みをわかってないんじゃないか。
11デフォルトの名無しさん:2009/01/21(水) 00:01:55
>>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();

後は適当にスレッドモデルに気をつけて
12デフォルトの名無しさん:2009/01/21(水) 00:02:22
>>8
そのDLLがCOMとして公開されてなきゃ使えないよ?
137:2009/01/21(水) 00:07:00
14デフォルトの名無しさん:2009/01/21(水) 00:30:03
データアダプターについて質問です。
データアダプターの使い方がわかりません。普通にSQLを記述するのと違うのでしょうか?
15デフォルトの名無しさん:2009/01/21(水) 12:29:13
       //
     /  /   パカッ
     //⌒)∩__∩
    /.| .| ノ     ヽ
    / | |  ●   ● |     
   /  | 彡  ( _●_) ミ  まピョーん☆
   /  | ヽ  |∪|  /_
  // │   ヽノ  \/
  " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
16デフォルトの名無しさん:2009/01/21(水) 17:12:18
2008ExpressEditionSP1
ヘルプの一部が中国語になっているんですけどこれは直りませんか?
自分が確認できている範囲では以下の部分だけです
開発ツールと開発言語→Visual Studio→Visual C#→C# プログラミング ガイドの下の
「コレクション クラス」と「ファイル システムとレジストリ」の間にある項目です
ヘルプの左側のツリー表示してる目次部分と右側のタイトル部分が中国語になっています
17デフォルトの名無しさん:2009/01/21(水) 17:16:05
前スレで既出
18デフォルトの名無しさん:2009/01/21(水) 22:43:33
C#の質問なんですが、button2を押したときにpictureboxに描画するようにしたいのですがやりかたがよくわかりません。googleなどでも調べてみましたが、検索ワードが悪いのか思っていたようなものが引っかかりませんでした。超初心者ですいませんがお願いします。
19デフォルトの名無しさん:2009/01/21(水) 22:53:48
//コンストラクタかどこかに追加
this.Button2.Click += new System.EventHandler(Button2_Click);
//メソッドを追加
private void Button2_Click(System.Object sender, System.EventArgs e)
{
//pictureboxに描画するコード
}
20デフォルトの名無しさん:2009/01/21(水) 22:55:48
そして再描画で消えますって返ってくると
21デフォルトの名無しさん:2009/01/21(水) 23:04:21
>>19ありがとうございます。

>>20はどういう意味なんでしょうか?
22デフォルトの名無しさん:2009/01/21(水) 23:06:21
いいから先ずはやってみなされ
23デフォルトの名無しさん:2009/01/21(水) 23:14:04
おい! 俺こそは超絶C#プログラマーだ!!っていうやつ出て来い!

俺とメールでソース交換して、どっちがすげえか白黒つけようじゃねえか!
24デフォルトの名無しさん:2009/01/21(水) 23:16:28
いいよ。じゃ、まずお前から送れ。
25デフォルトの名無しさん:2009/01/21(水) 23:19:26
>>23
うpすればいいじゃん
俺よりすごそうだったらちゃんとすごいって認めてやるから
正当な評価をする事を保証するよ
26デフォルトの名無しさん:2009/01/21(水) 23:41:11
/ PictureBoxに直接描画することはできないので、
// コンストラクタかどこかでPictureBox.Imageに適当なImageオブジェクトをセットしておき、
pictureBox1.Image = new Bitmap(400, 400, PixelFormat.Format32bppArgb);

// イベントハンドラで、PictureBox.Imageに描画を行う
using (Graphics g = Graphics.FromImage(pictureBox1.Image))
{

}
2726: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();
28デフォルトの名無しさん:2009/01/22(木) 00:12:56
揚げ足とるようでなんだが、
>// PictureBoxに直接描画することはできないので、
これは違うというかミスリード過ぎだろう。

描画できないんじゃなくて描画した画像を保持できないだけ。
29デフォルトの名無しさん:2009/01/22(木) 01:32:29
ド初心者です。
はずかしい質問です。

オライリーとかを買ってきて勉強してるんだけど、純粋に言語の話ばかりで
初心者なのに、いきなりここまで必要かなあと思うんだけど。

C#を使う場合って、ほとんど、VisualStudio上じゃないの?だったら「VSの使い方」っていう
コンセプトの本が普通だと思うんだけど、そうでもないの?
自動生成されるコードもたくさんあるのに、初心者のうちからそういう仕組みをまったく度外視して
純粋に言語仕様の本を「初めてのC#」として売ってるから怖いんだけど。

そこそこ使う人はIDEに依存しないで使ってるんですか?
初心者にもIDEの使い方より言語そのものの仕様の方が重要だというのは常識なの?
30デフォルトの名無しさん:2009/01/22(木) 01:37:15
>>29
C# がはじめての人対象であってプログラミング初心者対象ではないんだろ。
VS の使い方を目的にした本はいくらでもあるのにそういう本を選ばなかったのが悪いんだろ。
オライリーなんて初心者から見ていかにも難しそうなのによく買ったな。
31デフォルトの名無しさん:2009/01/22(木) 01:51:16
>>30
べつに理解できないわけじゃないし
内容じたいは全然難しくないんだけど、
これをすぐに応用する機会ってあるのかなあ、
というのが疑問で。。
32デフォルトの名無しさん:2009/01/22(木) 01:52:50
www
33デフォルトの名無しさん:2009/01/22(木) 02:06:40
VSというよりそもそもWinに縛られてるような……
34デフォルトの名無しさん:2009/01/22(木) 03:33:57
>>29
オライリーの初心者向けは「プログラミングC#」だが
35デフォルトの名無しさん:2009/01/22(木) 03:55:30
36デフォルトの名無しさん:2009/01/22(木) 04:51:09
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)とすると値を取得できました。
38デフォルトの名無しさん:2009/01/22(木) 06:58:57
>>37
doc.Load(var1) か
doc.Load(mStream); でどう?
3937:2009/01/22(木) 07:21:07
>>38
レスありがとうございます。
Loadメソッドは
XmlDocument.Load(string filename)
なので、やはり使うのはLoadXmlメソッドだと考えています

今回の場合、XMLデータがgzipで圧縮されているファイルがあり、その中身を見るプログラムを書いています。
なので、ファイルを一度gzip解凍してからXMLとして読み込まないといけないので、ファイルの直接指定ができないのです。
40デフォルトの名無しさん:2009/01/22(木) 07:23:35
zipならともかくgzipならGZipStreamで十分だが
Load(Stream)もあるだろ

というかうまくいかないってのは実行できるけどどこかでnullが返るのか
例外が出るのか出るのならどんな例外がどこで出るのか
41プログラム歴2週間:2009/01/22(木) 12:25:09
@キャンセルボタンを押す
Aダイアログを出力して確認 OKかキャンセル
Bキャンセルなら本処理終了 OKなら引数を渡して画面遷移する
プログラムを書きたいのですが、わかりません。よろしくお願いします。
42デフォルトの名無しさん:2009/01/22(木) 12:28:56
何が分からないのかが分からない
43デフォルトの名無しさん:2009/01/22(木) 12:29:51
>>42
いや自己紹介だよ。
>>41
こちらこそよろしくお願いします。
44プログラム歴2週間:2009/01/22(木) 12:39:49
むしろわかっているのが
protected void ButtonCancel_Click(object sender, EventArgs e) //キャンセルボタン押すとき
{
Response.Redirect("遷移先のページ名");           //飛びたいページ
}

だけです。Visual Studio2005を使ってボタンとか配置しました
45デフォルトの名無しさん:2009/01/22(木) 12:46:16
>>42-43
こういうくだらない皮肉をすぐにレスする奴って
何が原因でここまで卑屈になったのか疑問。
46デフォルトの名無しさん:2009/01/22(木) 12:50:50
どっちが卑屈かな?
47デフォルトの名無しさん:2009/01/22(木) 13:00:05
>>45
こういうくだらない皮肉をすぐにレスする奴って
何が原因でここまで卑屈になったのか疑問。
48デフォルトの名無しさん:2009/01/22(木) 13:03:11
>>41
引数ってなんだ?
49デフォルトの名無しさん:2009/01/22(木) 13:27:50
い・・・、引数
50デフォルトの名無しさん:2009/01/22(木) 13:28:36
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詳細画面に戻りたい

初プログラミングで何がなんだかって感じなのですが。
52デフォルトの名無しさん:2009/01/22(木) 13:38:41
引数でなければならない理由がわからない
どこぞの変数にでも放り込んでおけ
53デフォルトの名無しさん:2009/01/22(木) 13:41:32
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 ありがとう。埋め込んでデバックしてみます。
55デフォルトの名無しさん:2009/01/22(木) 13:47:19
SetTexture(out Texture tex)
じゃないか?
56デフォルトの名無しさん:2009/01/22(木) 13:52:46
>>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();
とした方が良いのか
57デフォルトの名無しさん:2009/01/22(木) 13:56:06
おまえは何を言ってるんだ?

内容がさっきと全然違うじゃないか。
58デフォルトの名無しさん:2009/01/22(木) 14:00:35
>>53で作ったテクスチャ(tex)を保持しておいて
そのテクスチャを>>56でgetTexture()で引っ張ってきて(tex1)描画した直後にDispose();すると
最初に作ったテクスチャ(tex)の方が消えてしまうのでしょうか?
59デフォルトの名無しさん:2009/01/22(木) 14:02:40
tex = が入った時点でインスタンスは別のものになってるよ。
60デフォルトの名無しさん:2009/01/22(木) 14:04:59
ということはtex1.Dispose()としても元のtexの方は生きていろということで良いのですか?
61デフォルトの名無しさん:2009/01/22(木) 14:07:17
ソース見てないから順番がよくわからん、、、
疑問ならメッセージ出力するようにしておいて観察してみるといい。
62デフォルトの名無しさん:2009/01/22(木) 14:10:03
分かりましたTraceで頑張ってみます。
63デフォルトの名無しさん:2009/01/22(木) 18:55:40
VC#2008EEでメソッドにかかった時間が表示できるいい感じのプロファイラはないですか?
64デフォルトの名無しさん:2009/01/22(木) 19:40:20
チームエディシオン買えよ。
65デフォルトの名無しさん:2009/01/22(木) 20:31:41
>>49
それも合ってるんだけどね
66デフォルトの名無しさん:2009/01/22(木) 21:00:21
C#最強だな・・今までの中で最強だ・・
67デフォルトの名無しさん:2009/01/22(木) 21:02:02
立ち上がりの速さとかS級だよな
68デフォルトの名無しさん:2009/01/22(木) 21:04:20
これで.netがUNIXで動けば・・・
69デフォルトの名無しさん:2009/01/22(木) 21:06:25
つ mono
70デフォルトの名無しさん:2009/01/22(木) 22:05:04

ttp://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=33131&forum=7&7
ここに、Bitmapの内容を読み書きするときは
Bitmap.LockBits
Marshal.Copy
処理
Marshal.Copy
Bitmap.UnlockBits
とするのが基本と書かれていますが、コピーしないで処理するのは無理でしょうか?
71デフォルトの名無しさん:2009/01/22(木) 22:08:57
>>70
自分で張ったリンク先くらい全部読んでから来い。
72デフォルトの名無しさん:2009/01/22(木) 22:09:44
Marshal.ReadInt32とか使えばコピーしなくて済むけどコピーするよりも大幅に遅くなる
コピーせずに速いのはunsafeでポインタ使う方法
73デフォルトの名無しさん:2009/01/22(木) 22:32:32
unsafe スコープで

T* p = (T*)bitmapData.Scan0.ToPointer();

T は好きな blittable な型で。
7470:2009/01/22(木) 22:55:51
>>71
すいません、読んでいませんでした・・
>>72-73
回答ありがとうございました。
NiVEのサンプルのプラグイン、
Marshal.Copy使っているのをunsafe使ったコードに変えたら速くなるかな
75デフォルトの名無しさん:2009/01/22(木) 23:04:37
処理自体はポインタ使った方が遅くなるよ
コピーのコストが無視できるような重い画像処理なら一回マネージ配列にコピーした方が速い
76デフォルトの名無しさん:2009/01/22(木) 23:09:57
buttonを押すとちゃんとと舞踊になりました。ご教授ありがとうございました。
77デフォルトの名無しさん:2009/01/23(金) 04:17:17
見よう見まねでやっと一つ自分なりの小さなアプリを作ったんだけど、
できあがったファイルに、わけわからんのがあるんだけど。
メインのexeファイルの他に、--.vshost.exeとかいうexeファイルもできてるし
--exe.configとかいうファイルが二つも出来ちゃった。

こんなの全部まとめて一つのexeファイルにするのが本当なんじゃないの?
一応アプリは正常に動作してるみたいだけど、何か気に入らない。
将来もっとスキルがあがってちょい立派なソフトを作って人に使ってもらうときに
なんかこういうのは格好悪い気がするんだけど。
ベクターのソフトとかは、exe以外だとbinとか、なんかいろいろ意味がありそうなファイル
ばかりじゃん。
どうして俺の場合はへんなファイルばかりなの?
何かやり方が間違ってる可能性はない?
78デフォルトの名無しさん:2009/01/23(金) 04:22:47
ない
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);
   }
}
80デフォルトの名無しさん:2009/01/23(金) 05:15:24
>同じクラスから生成されたインスタンス同士なら、privateな部分も見れる
うん
8177:2009/01/23(金) 05:20:26
読み返してみてあまりにバカっぽいので、
少しバカ度を下げて質問しなおします。

ビルドによって--.vshost.exeというようなファイルができるのは正常なんですか?

あと、初心者から脱した人には、生成される各ファイルがどんな働きをするものなのか
たいてい想像できるもんなのですか?

--.vshost.exeとか--exe.configはどういうファイルなんでしょうか?

申し訳ありませんが、できるだけ長い回答をお願いします。
82デフォルトの名無しさん:2009/01/23(金) 05:26:36
>>79
privateはクラスプライベートであってインスタンスプライベートではないから
83デフォルトの名無しさん:2009/01/23(金) 05:33:43
>>81
質問する手間でなぜぐぐらない・・
8479:2009/01/23(金) 05:34:10
>>80
>>82

なるほど、クラスプライベートですか。お二方、どうもありがとうございました。
85デフォルトの名無しさん:2009/01/23(金) 05:39:45
>>81
VSホスト・プロセス(*.vshost.exe)とは何か?
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/410vshost/vshost.html

難しいことは他の人にまかせる。
誰かレスよろ。
86デフォルトの名無しさん:2009/01/23(金) 10:58:23
exe.configはアプリケーション設定のデフォルト設定だったかな
87デフォルトの名無しさん:2009/01/23(金) 10:59:06
public partial class ページ名: System.Web.UI.Page
って何をやっているんですか?
88デフォルトの名無しさん:2009/01/23(金) 11:05:01
class ページ名 … ページ名 という名前のクラスを宣言します
public … クラスがアセンブリ外から参照できます
partial … クラスの定義が複数のファイルにまたがっています
: System.Web.UI.Page … クラスはSystem.Web.UI.Pageクラスを継承します
89デフォルトの名無しさん:2009/01/23(金) 11:12:19
ありがとうございます。おおぉ・・・クラスとかアセンブリとか定義、継承 全部わからない・・・;;
適当にぐぐったのを翻訳すると、
「ページ名という名前のデータと処理を宣言して、コンパイル済みのコード群外から参照でき、複数のファイルのデータと処理を扱い、System.Web.UI.Pageのデータと処理を使えるようにする」
???????頭が壊れる。これがないと何ができなくなるのでしょう?
90デフォルトの名無しさん:2009/01/23(金) 11:15:27
C#ではすべてのコードはクラス(というか型)の中に書かないといけないので
クラス定義がないと何もできない
91デフォルトの名無しさん:2009/01/23(金) 11:21:03
そのページ処理すべて=クラス ということなんですかね?
すみません、「クラス定義」すら理解できていません・・・
92デフォルトの名無しさん:2009/01/23(金) 11:26:18
それくらいは理解できてないとC#は使えないので
入門サイトや入門書読んで勉強しましょう
93デフォルトの名無しさん:2009/01/23(金) 12:02:03
Firefoxのオプションダイアログのようなもの(上部のボタンでウィンドウの中身を
切り替える形のもの)を作成したいのですが、
その実装方法がわからず悩んでいます。

MDIにして子フォームのFormBorderStyleをnoneに設定し
切り替える方法でやってみたところ、ちらつきが出てしまいダメでした。
Firefoxのオプションダイアログにかぎらず、ウィンドウがひとつで中の描画だけ
切り替えるようなアプリの実装方法には、MDIの他にどういったものがありますでしょうか?

長文ですみませんが、よろしくお願いいたします。
94デフォルトの名無しさん:2009/01/23(金) 12:10:41
そんな長文でもないと思うよ

・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ってなんでしょう?ぐぐってもよくわからなかったのですが、そういう処理名ですか?
96デフォルトの名無しさん:2009/01/23(金) 12:20:52
>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が用意していて、それを基盤に動かしたいと。
98デフォルトの名無しさん:2009/01/23(金) 13:17:34
>>97
partialを付けなくても「ページ名.aspx.designer.cs」は生成されるが、
その場合、「同じクラスが2つもあるぞゴルァ!!」と怒られてしまう。

partialを付けることで、二つのファイルに分かれたクラス定義を1つにまとめることが可能になる。

> 1つのクラスを2つのファイルに分けると何かいいことあるのですか
コードジェネレータが生成するコードと、ユーザーが編集するコードを分けることで、
ユーザーが編集したコードがコードジェネレータに上書きされてしまう危険性が無くなるし、
ユーザーが編集するコードに余計なものが混じらないので、コードも見やすくなる。

ところで、本見ても理解できないって、どんな本を読んでるんだ?
99デフォルトの名無しさん:2009/01/23(金) 13:28:56
知り合いの人が、「これからはC#の時代だから一番つぶしがきくのはC#だよ」
と言ってたのですが、同じ人が、「いつまでもWindowsの時代ではない。他の
OSがたくさんでてくるから誰もWindowsなんて使わなくなる」とも言ってました。

これ矛盾してないですか?
C#はWindows上でしかコンパイル(というの?作ること)できないできないですよね?
100デフォルトの名無しさん:2009/01/23(金) 13:33:21
LinuxでもOK
101デフォルトの名無しさん:2009/01/23(金) 13:33:52
全く矛盾してません
102デフォルトの名無しさん:2009/01/23(金) 13:34:02
(´・ω・`)しらんがな。次。
103デフォルトの名無しさん:2009/01/23(金) 13:34:33
Monoってのがあることはあるからぐぐるといいよ
基本的には聞き流しておけばおk
104デフォルトの名無しさん:2009/01/23(金) 13:42:17
>>101
もっと詳しく解説して

>>102
知らないなら黙ってろばか
105デフォルトの名無しさん:2009/01/23(金) 13:53:27
>103で十分だろ

しかし
> 「いつまでもWindowsの時代ではない。他のOSがたくさんでてくるから誰もWindowsなんて使わなくなる」
これはもう10年以上前から聞いてるような台詞だな
106デフォルトの名無しさん:2009/01/23(金) 13:58:48
>>104
失せろゴミ
107デフォルトの名無しさん:2009/01/23(金) 13:59:11
ごめんなさい。
103さんのでよく分かりました。
108デフォルトの名無しさん:2009/01/23(金) 14:00:19
>>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の遺伝情報をもとに生命が形成され、生命は活発に活動することができます。この、実際の生物がオブジェクトに担当します。」
「つまり暮らすを具体化して、物理的な実態となったものがオブジェクトです」

はあ?死ねよって感じでしたね・・・なにいってんだこれ
111デフォルトの名無しさん:2009/01/23(金) 14:38:21
自分が馬鹿だって全世界に向けて叫ばないでいいから
112デフォルトの名無しさん:2009/01/23(金) 14:49:02
>>110
そんな感じの説明って多いよな。
人とか動物とか例えている・・・。実際、人とか動物とかプログラムに関係ないのにな。
113デフォルトの名無しさん:2009/01/23(金) 14:57:03
>>109
ハァ!?!?と思ったら本屋に行くといい。

ハァ!?と思った部分の解説を見比べることで
良い本と悪い本の見分けがつくよ。

全ての本でハァ!?と思うなら・・・ご愁傷様と言うしかないな。
114デフォルトの名無しさん:2009/01/23(金) 15:15:50
変数宣言で
Aaa aaa = new Aaa(Global.WebConfig);
のGlobal.WebConfigってなんですか?
()の中が何もないのは、aaaの箱を作って使えるようにしてるってことだと思うのですが
115デフォルトの名無しさん:2009/01/23(金) 15:20:26
こっちが聞きたいけどおそらくこういうこと
WebApplication webApp = new WebApplication(設定ファイル)
116デフォルトの名無しさん:2009/01/23(金) 15:27:02
Aaa = クラス
aaa = インスタンス変数
Global.WebConfig = 何らかの値

aaaというオブジェクト(インスタンス変数)を作る際にGlobal.WebConfigの値で初期化しているもの。
インスタンスの生成時にコンストラクタが呼び出されるため、そのコンストラクタの引数として渡す。

日本語でわかりやすく説明すると、 赤色で軽自動車を生成するには、こんな感じ。
自動車 自家用車 = new 自動車(赤色,軽自動車);
 

そんなことよりaaaとかいう名称は、つけてはいけない。
今だけではなく、あとからデバッグする時に何これ?になる。

117みんなどっちの書き方が好き?:2009/01/23(金) 15:35:42
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;
}

と書いてる・・・。
119デフォルトの名無しさん:2009/01/23(金) 15:43:13
>>118
自分は
if(〜){
}
でなれた頃にその構文知ったから
ほとんど↑
120デフォルトの名無しさん:2009/01/23(金) 15:44:12
>>115-116 なるほどうありがとう
121デフォルトの名無しさん:2009/01/23(金) 15:46:44
1行でかけるときは { }なしにするが、
たとえ1命令でも2行にまたがるときは{ }をつけることにしてる。
122デフォルトの名無しさん:2009/01/23(金) 15:50:42
取り敢えずネストはできる限り深くしない
123デフォルトの名無しさん:2009/01/23(金) 15:52:58
ループも条件もネストは一回までと決めてる
あとはswitch使う
124デフォルトの名無しさん:2009/01/23(金) 16:00:14
一回まではやりすぎ
125117:2009/01/23(金) 16:39:21
ネストが浅くなるので上のほうが好まれるのかしら?
まあ{つけるかとか{の位置とかは別の話として
126デフォルトの名無しさん:2009/01/23(金) 16:41:47
ネストの深さとはずれるけど
「出口は一つであるべき」とか言って
returnを複数書くのを嫌ったりする人もいるね
127デフォルトの名無しさん:2009/01/23(金) 16:49:22
foreachで使う列挙体の項目をfoeach内でDisposeしたら即刻エラーになるので
該当項目をすべてDisposeするといった便利な使い方が出来ないのは言語的なバグですか?
128デフォルトの名無しさん:2009/01/23(金) 16:49:35
どうも ブロックは、{ } で囲むという癖がついてる。
129デフォルトの名無しさん:2009/01/23(金) 17:00:05
ネスト一回まではさすがに厳しいかもしれないけど
どんどんだらしなくなる性格だし後から読むとき楽なので、あえて決め事してる
コード量増えることもあるのはご愛敬
130デフォルトの名無しさん:2009/01/23(金) 17:08:28
>>127
列挙体って何のこと。俺様用語は止めてくれる?

Disposeすることは例外発生の原因じゃないよ
どうせコントロールコレクションから要素をDisposeしようとしたんでしょ。
DisposeするとコレクションからRemoveされる実装もあるから。

while( collection.Items.Count > 0 ){
 collection.Items[0].Dispose();
}

みたいにしたらどう
131デフォルトの名無しさん:2009/01/23(金) 17:08:38
>>127
>列挙体 
なのか?用語間違ってないか?
132デフォルトの名無しさん:2009/01/23(金) 17:12:25
>言語的なバグですか?
自分の無能は棚上げですか?
133デフォルトの名無しさん:2009/01/23(金) 17:13:28
ずいぶん厳しいインターネッツですねw

察してやれよw
134デフォルトの名無しさん:2009/01/23(金) 17:15:42
>>132->>133
性格に難あり
どういう環境で育ったんですか?
135デフォルトの名無しさん:2009/01/23(金) 17:21:35
>>134
アンカー間違えてんじゃねえよksg
136デフォルトの名無しさん:2009/01/23(金) 17:29:00
>>135
性格に難あり
どういう環境で育ったんですか?
137デフォルトの名無しさん:2009/01/23(金) 17:44:43
>>127
バグがあるのは、おまえだ。
138デフォルトの名無しさん:2009/01/23(金) 19:56:22
脳にバグ持ってる人は大変だねぇ
139デフォルトの名無しさん:2009/01/23(金) 21:20:09
いやバグだな

0
1
2Dispose
3
4Dispose
5

C#ではこういったことが出来ない
140デフォルトの名無しさん:2009/01/23(金) 21:42:09
>>139
分かるように実行可能なソースをアップしてくれんか
141デフォルトの名無しさん:2009/01/23(金) 22:02:00
C#でOS作ったんだけど、フレームワークインストールして無いと動かないんですよね?

どうしたらいいっすか?
142デフォルトの名無しさん:2009/01/23(金) 22:03:46
C#という言語自体は.NET Frameworkとは無関係です
自分でネイティブコンパイラ作るなりCLI実装しちゃうなりすればおk
143デフォルトの名無しさん:2009/01/23(金) 22:05:59
ネイティブで C# が動く、って OS があったな・・・
144デフォルトの名無しさん:2009/01/23(金) 22:07:39
ネイティブでC#が動くというよりCLIを組み込んだOSだったような
145デフォルトの名無しさん:2009/01/23(金) 22:12:18
それWindowsじゃん
146デフォルトの名無しさん:2009/01/23(金) 22:39:52
singularity
147デフォルトの名無しさん:2009/01/23(金) 22:41:03
Type.GetType(string)ではなくてType.GetType(class)って書けないのかな?
""で括ると候補でないし
148デフォルトの名無しさん:2009/01/23(金) 22:41:40
typeof(型名)
149デフォルトの名無しさん:2009/01/23(金) 23:06:04
>>148
ありがとうございます
150デフォルトの名無しさん:2009/01/23(金) 23:07:46
>>141-145

ワラタ
151デフォルトの名無しさん:2009/01/24(土) 03:43:08
NumericUpDownコントロールのMinimumを1に設定してもフォーム起動時には0になってしまいますが何故だろう
152デフォルトの名無しさん:2009/01/24(土) 05:28:05
C#でのExcel操作(自動化)について質問があります。
C#からExcelのセルの幅や高さを変更したり、新しいシートを追加して
そのシートの名前を変更、新しく追加したシートを操作するにはどうすれば良いのでしょうか?
153デフォルトの名無しさん:2009/01/24(土) 09:35:53
"C#でExcel"でぐぐった上の発言であろうな?
154デフォルトの名無しさん:2009/01/24(土) 10:52:01
>>153
色々やってシートの追加と名前の変更はできたのですが、Sheet1しか名前の変更ができない上に
セルの幅、高さの変更、追加したシートの操作ができません。
Sheet1のみの操作と名前の変更だけしかできないです。
155デフォルトの名無しさん:2009/01/24(土) 11:12:33
VBA ではできてんの?
156デフォルトの名無しさん:2009/01/24(土) 11:17:19
VBAは使った事がありません。
157デフォルトの名無しさん:2009/01/24(土) 11:19:04
まず VBA でできることを確認してから、C# に書き直した方が早いよ。
158デフォルトの名無しさん:2009/01/24(土) 11:26:49
>>157
ttp://www.officepro.jp/excelvba/sheet_edit/index1.html
上記ページを読んでいるのですが、このVBAをどのように書き換えたら
C#で使えるようになるのでしょうか?
159デフォルトの名無しさん:2009/01/24(土) 11:29:18
名前付き引数を使わずにやってみたら?
160デフォルトの名無しさん:2009/01/24(土) 11:37:04
>>159
すいません。まったく意味が分かりません…
コードでこのように書き換えたら良いという例を挙げてはいただけないでしょうか?
161デフォルトの名無しさん:2009/01/24(土) 12:15:19
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";
162デフォルトの名無しさん:2009/01/24(土) 12:15:38
質問です。C#でバイト配列から部分バイト配列を探すには
どうしたらいいでしょうか。
Cのstrstr()や、Pythonのbuf.index(sub_buf)のような処理です。
163デフォルトの名無しさん:2009/01/24(土) 14:46:09
>>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;
}
164デフォルトの名無しさん:2009/01/24(土) 14:48:43
IComparable使ったらボックス化が発生しちゃうからジェネリックにした意味がないぞ
IComparable<T>にするんだ
165デフォルトの名無しさん:2009/01/24(土) 14:51:27
というか大小比較する必要はないんだからIEquatable<T>のほうがいいな
それもwhereで指定すると単純に参照比較で探したいときなんかに困るから
EqualityComparer<T>.Default使えば
166デフォルトの名無しさん:2009/01/24(土) 14:53:17
対象がbyte[]と決まっているなら、文字列に変換しておいてIndexOf()という手もある。

string s1 = Encoding.ASCII.GetString(buf);
string s2 = Encoding.ASCII.GetString(sub_buf);
int p = s1.IndexOf(s2, StringComparison.Ordinal);
167デフォルトの名無しさん:2009/01/24(土) 15:05:43
工エエェェ(´д`)ェェエエ工
168162:2009/01/24(土) 15:38:37
>>163
関数丸ごと書いてもらえるとは・・・感謝です。
バカ正直に検索する作業に戻ります。

>>164-165
すいません、マニュアルを読んでみましたが
不勉強でまともなレスが付けられません。
メモしたので後日振り返りたいと思います。

>>166
そういう方法もあるんですね。
byte[]からStringの変換にEncodingを使うとは
思っていなかったので参考になりました。
169デフォルトの名無しさん:2009/01/24(土) 15:41:29
>>166
byte[]の途中に0が入ってたら?
170デフォルトの名無しさん:2009/01/24(土) 15:47:33
>>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 ]))
    { //あとは同じ
171デフォルトの名無しさん:2009/01/24(土) 15:52:15
>>169
無問題
172デフォルトの名無しさん:2009/01/24(土) 16:30:20
だな。今回の場合、むしろASCIIEncoingが0x80-0xffのデータを受け付けないほうが問題だ。
無理矢理でもnew string(a.Cast<char>().ToArray())とか、
a.Aggregate(new StringBuilder(a.Length), (sb, c) => sb.Append((char)c)).ToString()とかで持っていくほうがいい。
173デフォルトの名無しさん:2009/01/24(土) 16:35:14
BitConverter.ToString
174デフォルトの名無しさん:2009/01/24(土) 21:45:07
>>172
受け付けるよ。
175デフォルトの名無しさん:2009/01/24(土) 22:28:03
\u003fに置き換えられるのをもって受け付けるといわれても…
176デフォルトの名無しさん:2009/01/24(土) 22:28:04
Dictionary<AAA, BBB>のコレクション中から、BBBの条件によって要素を削除したいのですが
foreachで列挙しながらRemoveすると、列挙子が無効になって例外が発生します。
あらかじめ削除する要素を全部列挙してから、その後にRemoveするしかないんでしょうか?
177デフォルトの名無しさん:2009/01/24(土) 22:39:52
一旦Keysを配列にコピーするとか
178デフォルトの名無しさん:2009/01/24(土) 22:40:34
>>176
それ以上にスマートな方法は思いつかないなあ。
List<AAA,BBB>に投射しておいてRemoveAll()とか、考えられなくもないけど。
179178:2009/01/24(土) 22:41:06
間違えた、List<KeyValuePair<AAA,BBB>>だ。
180デフォルトの名無しさん:2009/01/24(土) 22:44:29
> あらかじめ削除する要素を全部列挙してから、その後にRemove

を静的クラスに書いておけば拡張メソッドで呼び放題だよ!
181デフォルトの名無しさん:2009/01/24(土) 22:56:48
foreachのin ○○の後に.ToArray()と書けばおk
182デフォルトの名無しさん:2009/01/24(土) 23:02:46
>>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);
  }
}
183176:2009/01/24(土) 23:27:22
列挙しながら削除はできませんか。
削除するのに別途メモリ確保するのは違和感あったのですが、仕方ないんですね。
184デフォルトの名無しさん:2009/01/24(土) 23:33:23
>>183
削除するんじゃなくて最初から条件を満たす要素を Dictionary に入れなければいいんじゃね?
185デフォルトの名無しさん:2009/01/24(土) 23:35:11
(゚ε゚)キニシナイ!!
186デフォルトの名無しさん:2009/01/24(土) 23:35:48
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 
 そんなことよりyahooきっず「どんな''ジャンボ''が食べたい?」に投票しようぜwwwwwwwww
 ジャンボピーマンを一位にして餓鬼共を泣かせようwwwwwwwwww
 現在1位 yahooの工作開始までに2位のたこ焼きを突き放す

 http://kids.yahoo.co.jp/         _人人人人人_
                        >鶴職人募集中<
                         ̄ Y^Y^^Y^Y^ ̄

 ↓本スレ
 http://takeshima.2ch.net/test/read.cgi/news4vip/1232801214/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
187デフォルトの名無しさん:2009/01/25(日) 00:20:01
コピペ君って馬鹿だな、まで読んだ。
188デフォルトの名無しさん:2009/01/25(日) 00:30:05
ThreadPool.QueueUserWorkItemで実行されるスレッドで
Thread.CurrentThread.PriorityをデフォルトのNormal以外に変更してみたところ
問題なく変更でき、優先順位もちゃんと反映されているようです。
終わった後はNormalに戻されてました。

この挙動を期待して書いてもいいのでしょうか?
MSDNをざっと見たところ、この事について書いてないようなのですが…
189デフォルトの名無しさん:2009/01/25(日) 02:50:47
>>188
文書化されてない以上その性質に頼るべきではない。
ちなみに.NET1.1では再利用したスレッドに変更したプライオリティやスレッド名は引き継がれている。
あとMonoの場合はLowestから変更できなかった。いろいろ複雑だ。
190188:2009/01/25(日) 17:50:04
>>189
ガビョ〜ん、そうなんですか。
ありがとうございました
191デフォルトの名無しさん:2009/01/25(日) 21:02:05
VisualStudioが自動で書いたコードなんだけど、

using System;
using System.Windows.Forms;

というのがあったんだけど、一行目だけでよくないですか?
Systemの中にWindowsもあるんでしょ?
192デフォルトの名無しさん:2009/01/25(日) 21:06:29
ないよ
名前空間はそれぞれ独立してる
見易さのためにピリオドで区切ってるだけ
193デフォルトの名無しさん:2009/01/25(日) 21:07:20
名前空間ってその名の通り名前の一部にすぎないんだよ
194デフォルトの名無しさん:2009/01/25(日) 21:09:41
>>191
ダメ。
195デフォルトの名無しさん:2009/01/25(日) 21:15:29
using System; だけで System.* がすべてインポートされるなら、
名前空間を分けた意味がないじゃないか。
196デフォルトの名無しさん:2009/01/25(日) 21:18:25
そもそもグローバル名前空間はすべての名前空間を含んでるんだから
何も書かなくても全てインポートされるはずだな
197デフォルトの名無しさん:2009/01/25(日) 21:20:03
>>195
ごもっとも
198デフォルトの名無しさん:2009/01/25(日) 21:33:05
SystemだけってのはExplorerでいうマイコンピューターみたいなもの?
199デフォルトの名無しさん:2009/01/25(日) 21:35:05
PCのCPUみたいなものでは
200デフォルトの名無しさん:2009/01/25(日) 21:36:57
Systemで指定されるものにSystem.Windows.Formsは入ってないとするなら
Systemだけで指定されてるのって何だとなるわな。
201デフォルトの名無しさん:2009/01/25(日) 21:39:09
ためしにusing System;を抜いてみればわかるお
202デフォルトの名無しさん:2009/01/25(日) 21:55:23
>>198
コレッ。 手元にVSない状態で、妄想で会話するな。
203デフォルトの名無しさん:2009/01/25(日) 21:58:21
これ、自称非初心者の俺様も実はよくわかってない
204デフォルトの名無しさん:2009/01/25(日) 22:10:43
リフレクションは遅いと聞くと
MethodInfoとかを静的フィールドにいちいち持っておきたくなるけど、
システムでキャッシュしてるそうだから効果なかったりする?
使うたびに作り直すのとどっちがいいかな?
205デフォルトの名無しさん:2009/01/25(日) 22:12:25
そこら辺は言語によっていろんな考え方があるよね。
C++だと、using System;相当のものを書けば、Windows.Forms.Hogeと使えるという風に
入れ子の名前空間にもusingの効果が及ぶ。
C++から来た人間としてはそこにはまりそうになった。
206デフォルトの名無しさん:2009/01/25(日) 22:12:47
>>204
CreateDelegateで取得したデリゲートをキャッシュするのが最速
207デフォルトの名無しさん:2009/01/25(日) 22:13:18
だから、System も System.Windows.Forms も System.Collections も、
全部同じレベルなんだよ。
208デフォルトの名無しさん:2009/01/25(日) 22:18:12
なんかフォルダみたいだね。
Systemフォルダの中にWindowsがあってその中にFormsがある。
SystemフォルダにアクセスしたからってFormsにアクセスするわけではない。
209デフォルトの名無しさん:2009/01/25(日) 22:20:50
一応フォルダ状の構成なんだよね?
でも宣言はさらに下位のフォルダの中には及ばないってことなんだろう。
210デフォルトの名無しさん:2009/01/25(日) 22:21:19
違う。C#ではあたかもネストしてるように見せかけてるだけ。
211デフォルトの名無しさん:2009/01/25(日) 22:21:32
>>208
だからマイコンピューターなんだよ
212デフォルトの名無しさん:2009/01/25(日) 22:25:00
namespace System { namespace Windows { この中ではSystemの型にアクセスできる } }
C#でこういう風に書けるのは単なるシンタックスシュガーみたいなもの。
本当に階層になってるわけではない。名前空間はあくまで型の前に付く名前。
213デフォルトの名無しさん:2009/01/25(日) 22:26:28
だから、今、開いてるフォルダの中のファイルしか使えない。

例えば、C:\Windows\System\ を開いてるなら
その中のファイルにしかアクセスできない。
その下のC:\Windows\System\Form\ にあるファイルを開きたいならC:\Windows\System\Form\を開かないといけない。

ただ、わかりやすいようにカテゴリーに分けられているだけ。
極端に言えば
System.Windows.Forms ではなくWindowsForm という名前でも良かった。
・・・しかし、それではわかりにくく管理しにくいことからSystemのWindowsのFormsというように分類したまでの話。
214デフォルトの名無しさん:2009/01/25(日) 22:28:13
どっちなんだよw
ネストしてるのか(フォルダ的)
別もんなのか
215デフォルトの名無しさん:2009/01/25(日) 22:29:04
System_Windows_Forms
なら理解してくれるんじゃまいか?
216デフォルトの名無しさん:2009/01/25(日) 22:29:54
難しく考えずに、フォルダとその中でいいんじゃない?
コンソールでパスを通したことがあるなら、イメージ的にはusingはそれと同等って感じ。
217デフォルトの名無しさん:2009/01/25(日) 22:32:28
フォルダの中にフォルダはあるけど名前空間の中に名前空間は無いの
もっといえば,名前空間なんてものは単なる飾りなの
218デフォルトの名無しさん:2009/01/25(日) 22:35:18
それよりギガ株を自社株買いで半値を割らせないようにしているけど
その評価でBPSを出してくるのは認められているの?。
グレーゾンも粉飾紛いに見えてしまう。
219218:2009/01/25(日) 22:35:50
スマソ、ごばく
220デフォルトの名無しさん:2009/01/25(日) 22:38:07
SystemとSystem.Windowsは同じ列なんだな。
Systemの下にSystem.Windowsがあるのかと思ってた。
221191:2009/01/25(日) 22:38:53
たくさんの方に答えていただきありがとうございました。

というか、ここの人でも議論になるような疑問を持ててちょっとうれしかったです。
222デフォルトの名無しさん:2009/01/25(日) 23:12:57
>>214
C#の概念ではネストしてる(フォルダ的)

MSILの概念(=リフレクションで扱える情報)ではネストしていない
(SystemとSystem.Windowsの間に親子関係はない)
223デフォルトの名無しさん:2009/01/25(日) 23:14:11
usingの効果は、たとえば
using System.Text;と書いておけば毎回System.Text.StringBuilderと
書かなくて済むというだけの話でしょ。

で、using System;とだけ書いても、Text.StringBuilderと書けるようには
ならない、と。
224デフォルトの名無しさん:2009/01/25(日) 23:23:22
>>206
おお
確かにDelegate実行は大分速いみたいですね

だけどこれMethodInfoにしか使えませんね
プロパティだって結局メソッドなのにPropertyInfoに使えないというのは
225デフォルトの名無しさん:2009/01/25(日) 23:26:37
>>224
プロパティにも使えるよ
PropertyInfoのGetGetMethodやGetSetMethodでアクセサのMethodInfoが取れる
フィールドの場合は面倒だけどEmit使ってメソッドを動的に生成してやるしかない
226デフォルトの名無しさん:2009/01/25(日) 23:34:12
EventInfo も同じ感じだな。少しは ILDASM あたりでメンバが
各々どうなっているか眺めてみれ
ちなみに >>225 のフィールドの場合のヒントは DynamicMethod な
227デフォルトの名無しさん:2009/01/25(日) 23:40:36
フィールドの値の取得だけならExpression.Field使えば簡単だけどな
228デフォルトの名無しさん:2009/01/26(月) 04:22:23
.NET製のソフトってそれ自体ではなく、JITコンパイラの起動が遅いの?
229デフォルトの名無しさん:2009/01/26(月) 04:51:02
BinaryFormatterでシリアライズしたデータをデシリアライズしようとすると、
TypeLoadExceptionHolderがなんとかというエラーが出てきてデシリアライズできないのですが、
シリアライズができてデシリアライズができないというのはどんな原因が考えられるのでしょうか?
230デフォルトの名無しさん:2009/01/26(月) 08:22:32
他で開きっぱなしで、開く権限がないとかかなぁ。

それか、テスト用として、保存直後に読み込んでて、
using とか Close とかしてなくてちゃんとフラッシュされてないか。

あとは、保存する時に、
ファイルを Create とか Truncate じゃなくて、
Append とか Open で保存しちゃってて不正なバイナリになってるとか。
231デフォルトの名無しさん:2009/01/26(月) 09:59:07
>>230
多分そこら辺は問題ないと思います。というのも、それが起こるのがこのアセンブリで定義した
型をシリアライズした時のみで、それ以外の本体やプラグインで保存したデータについては全く問題ない
ためです。試しに、

[Serialize]
class TestData { }

というクラスをシリアライズして保存してみましたがそれでも上のエラーが飛んできます orz

BinaryFormatterを使っていてSerializeAttributeをつけ忘れてSerializationExceptionが飛ぶ
ということはありますが、ArgumentExceptionなんて飛んできたことないよ orz
232デフォルトの名無しさん:2009/01/26(月) 10:22:23
>>231

[Serialize]→[Serializable]
でした orz
233デフォルトの名無しさん:2009/01/26(月) 10:27:37
例外を正確に書いてみそ
234デフォルトの名無しさん:2009/01/26(月) 11:09:20
>>233
エラーメッセージは

型 'System.Runtime.Serialization.TypeLoadExceptionHolder' のオブジェクトを
型 'PluginTest.IPluginData' に変換できません

と…
変換先の型名はちょっと変えてますが、それ以外は全く一緒で、SerializationExceptionではなく
ArgumentExceptionで飛んできます。InnerExceptionはnullでした。
235デフォルトの名無しさん:2009/01/26(月) 12:24:02
>>234
そのコードを新しいプロジェクトとかで書いても同じ例外が投げられるの?
だったらそのコードをさらしてくれ。
236デフォルトの名無しさん:2009/01/26(月) 16:26:58
>>235
新しくプロジェクトを作成し、すべて同一にすると同じ例外が飛んできますが、
名前空間を変えると飛ばなくなりました。
プロジェクト全体を確認してみましたが、名前空間とクラス名がダブっている訳でもなかったのですが…
なんだこれ orz
237デフォルトの名無しさん:2009/01/26(月) 16:39:38
よく分からんけど関係するアセンブリをGACに登録してるとかない?
ローカルのアセンブリよりGACのが優先してロードされるので、
期待したのと違う動きをすることがある。
238デフォルトの名無しさん:2009/01/26(月) 17:07:14
>>237
してないです。ngenとかも動かしてないのでキャッシュされたのがロード
されてるわけではないと思います。
.NETのインストールでもミスったんでしょうか…
239デフォルトの名無しさん:2009/01/26(月) 17:12:49
VS2008でソースとかシンボルとか落としてきてSerializeの中追っかけてみたら何か分かるかもね
240デフォルトの名無しさん:2009/01/26(月) 19:22:56
ある別の型(T)に変換できることを表すインターフェイスは無いの?
IConvertible<T>みたいな
241デフォルトの名無しさん:2009/01/26(月) 19:53:38
標準ライブラリには無いな
242デフォルトの名無しさん:2009/01/26(月) 21:12:35
is T じゃだめなのか?ダメだな。
243デフォルトの名無しさん:2009/01/26(月) 23:19:27
クラス名にOfとか使うのってどうなんだろう。
たとえばContainerOfImage、ContainerOf3D、といった感じの名前の付け方。似た機能のクラスの頭文字が統一されて見やすいとは思うんだけど。
244デフォルトの名無しさん:2009/01/26(月) 23:25:42
不自然
英語としてどうかは置いといて,普通は見かけないから激しく違和感を感じる
Ofのかわりにアンダーバー使ったりする方がまだ綺麗な気がする
245デフォルトの名無しさん:2009/01/26(月) 23:25:56
246デフォルトの名無しさん:2009/01/26(月) 23:31:14
○○Of(引数)の形を除けば,メンバ名にもOfってあんまり見かけないよね
247デフォルトの名無しさん:2009/01/26(月) 23:32:15
別に Of なくてもいいと思う。
先にカテゴリを記述する命名スタイルは普通にある。
Of を名前に入れるのは、Of 込みで1つの熟語になってるようなものくらい。
248デフォルトの名無しさん:2009/01/26(月) 23:35:22
DialogColorやStreamStringじゃ全然違う意味になっちゃうよ
249デフォルトの名無しさん:2009/01/26(月) 23:51:31
全部そう言う命名で統一されていれば気にならないもんさ。
250デフォルトの名無しさん:2009/01/27(火) 00:09:30
>>240
変換出来るかどうかを知るだけなら、TypeConverter拾ってきて
CanConvertTo(), CanConvertFrom()で良いと思う
251デフォルトの名無しさん:2009/01/27(火) 00:37:45
C#で複数ファイルを一つに暗号化した上で纏めるツールを作ろうと思っているのですが、
例えば、次の3ファイルを1ファイルに纏めるにはどうすれば良いでしょうか?

※また、一纏めにするだけではなく、パスワードを入力する事により暗号化した上で1ファイルに纏めたい
と思っています。当然複合化もしたいです。

【暗号化_前】
AAA.xls
BBB.xls
CCC.xls

【暗号化_後】
ABC.xls

【パスワード】
abc_dayo


252デフォルトの名無しさん:2009/01/27(火) 00:43:07
7zip32.dllでも呼べば?
253デフォルトの名無しさん:2009/01/27(火) 01:01:41
>>252
あざーす。ぐぐってみます。
254デフォルトの名無しさん:2009/01/27(火) 01:02:41
ふぇ…
255デフォルトの名無しさん:2009/01/27(火) 10:13:08
ふぇっくしょん!
256デフォルトの名無しさん:2009/01/27(火) 12:26:20
if なんらかの条件
{
なんらかの処理
}

ボタン処理



のプログラムでなんらかの条件に当てはまったときにボタン実行が行えないようにするにはどうすればいいでしょう?
プログラム自体わけわかめで日本語でおkは重々承知ですが、エスパーさん助けて;;
257デフォルトの名無しさん:2009/01/27(火) 12:40:25
if なんらかの条件
{
なんらかの処理
}
else
{
ボタン処理
}
258デフォルトの名無しさん:2009/01/27(火) 12:59:42
まさにそのとおりのプログラムなのですが

if なんらかの条件 @

   if なんらかの条件A
   {
     なんらかの処理A
   } 
    else
    {
     なんらかの処理B
    }

ボタン処理

となっていて、なんらかの条件Aのときにボタン処理させないようにしたいので、頭ぐちゃぐちゃーとなっています。
259デフォルトの名無しさん:2009/01/27(火) 13:02:41
なんらかの処理Aの最後でreturn;すればヨイヨイ
260デフォルトの名無しさん:2009/01/27(火) 13:05:03
リターンよくわかってないです。調べてみます。ありがとう
261デフォルトの名無しさん:2009/01/27(火) 13:05:44
if なんらかの条件 @

   if なんらかの条件A
   {
     なんらかの処理A
   } 
    else
    {
     なんらかの処理B
    }

else
{
   if なんらかの条件A
   {
     なんらかの処理A
   }
else
{
     ボタン処理
   }


262デフォルトの名無しさん:2009/01/27(火) 13:20:29
なんらかのがゲシュタルト崩壊した
263デフォルトの名無しさん:2009/01/27(火) 13:38:36
まあreturnで解決できる場合もあるし関数分ける手もあるが、
どんな場合でも対応したいのならば、

bool b = なんらかの条件 @;

if (b)
{
なんらかの処理
とかいろいろ
}

if (b)
{
ボタン処理
}

みたいに保存しておいて後で使ったりできるぞ。
264デフォルトの名無しさん:2009/01/27(火) 13:39:14
if (!b)
{
ボタン処理
}

だった。。。
265デフォルトの名無しさん:2009/01/27(火) 13:48:20
>>258
 bool ボタン処理するフラグ = true;
if なんらかの条件 @

   if なんらかの条件A
   {
     なんらかの処理A
      ボタン処理するフラグ = false;
   } 
    else
    {
     なんらかの処理B
    }

 
 if (ボタン処理するフラグ)
 {
 ボタン処理
 }
266デフォルトの名無しさん:2009/01/27(火) 13:57:51
結局、>>258のやりたいことがなんなのかよく分からんかった。
単純に牡丹を押した時の処理を分岐させたいだけだったのか、
それとも一定条件下ではボタンそのものを押せないようにしたかったのか・・・


なんだっけ、MVCの類似だか発展版みたいなやつで
こういうのをスマートに解決する方法があったような。
267デフォルトの名無しさん:2009/01/27(火) 13:59:42
ご飯行ってました。ありがとうございます。参考にして書いてみます。
268デフォルトの名無しさん:2009/01/27(火) 14:02:57
>>266 一定条件下ではボタン押しても処理させないようにする ですね。
具体的に言うと、保存ボタンなので、データベース更新させないようにする、ですかね。
権限チェックをして、誰々なら見ることはできるけど、保存はできないという。
269デフォルトの名無しさん:2009/01/27(火) 14:12:37
つーか押しても何も起きないんだったら押せなくすべきじゃね?
と思ったら何か起きるのか
でも保存ボタンで保存されないのは嫌ね
270デフォルトの名無しさん:2009/01/27(火) 14:18:52
押せなくする方法がわからんとです
271デフォルトの名無しさん:2009/01/27(火) 14:19:34
権限管理を、そんなあちこちでアドホックにやってたら漏れるぞ。
272デフォルトの名無しさん:2009/01/27(火) 14:37:51
ButtonSubmit.Attributes.Add("onclick", "return confirm('ダイアログに出るメッセージ');");

で、ダイアログに出るメッセージを変数に変えて、変数の中身を表示させるにはどうすればいいのでしょう。

ButtonSubmit.Attributes.Add("onclick", "return confirm('MSG01');");
でMSG01の中身をメッセージとして出したいのですが
273デフォルトの名無しさん:2009/01/27(火) 14:56:00
>>260
do { ... } while(false);
にして、breakすれば良い
274デフォルトの名無しさん:2009/01/27(火) 14:57:36
>>270
ボタンのEnabledプロパティをfalseにするんだ
275デフォルトの名無しさん:2009/01/27(火) 15:09:47
>>272
ButtonSubmit.Attributes.Add( "onclick", "return confirm('" + MSG01 + "');" );
276デフォルトの名無しさん:2009/01/27(火) 15:13:09
おおお
ButtonSubmit.Enabled = false;
たったこれ追加すれば使用不可にできました。ありがとう〜
277デフォルトの名無しさん:2009/01/27(火) 15:17:02
データグリッドビューで質問があります。
データグリッドビューの列を1から10まではユーザーが任意で追加する事ができるが、
それ以上は追加できなく(メッセージなどで「追加できません」と表示)するにはどうすれば良いのでしょうか?
278デフォルトの名無しさん:2009/01/27(火) 15:20:51
void hoge(EventHandler handler) { }

引数で渡されたデリゲートが、匿名メソッド・ラムダ式かそうでないかを判別する方法って無いですよね・・・?
279デフォルトの名無しさん:2009/01/27(火) 15:22:29
>>275 できましたー!ありがとうー!”++”が必要なのかぁ。こういうの載ってる本ないですかねー。
280デフォルトの名無しさん:2009/01/27(火) 15:24:08
C#の解説書で載ってないものは無いだろう
281デフォルトの名無しさん:2009/01/27(火) 15:36:59
>>278
それを判別してどうしたいんだ?
282デフォルトの名無しさん:2009/01/27(火) 15:40:35
>>278
メソッドを持つ型の名前でも見れば
283282:2009/01/27(火) 15:54:54
ああ、型名だとstaticなときに駄目だな
じゃあ、メソッド名の方で
284デフォルトの名無しさん:2009/01/27(火) 16:04:28
>>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 &&・・・・・
みたいな感じでやっていくのですか?
またもうまく説明できない(´ω´)
286デフォルトの名無しさん:2009/01/27(火) 18:05:34
A && B && Cでいい
287デフォルトの名無しさん:2009/01/27(火) 18:10:03
全部False 日付も金額も合ってないときも保存処理行われちゃいません?
288デフォルトの名無しさん:2009/01/27(火) 18:12:06
おまえは何を・・・
&&でつないだら全てtrueの場合だけ条件に一致するよ
289デフォルトの名無しさん:2009/01/27(火) 18:13:25
おまえは全部ここで質問するつもりか
仕事じゃねーのそれ?
本でも買って読めや低能
290デフォルトの名無しさん:2009/01/27(火) 18:25:11
>>288
どうして&で繋ぐとtrueになるかわからないのですが、そういう仕様なのですか?
291デフォルトの名無しさん:2009/01/27(火) 18:28:44
&&は論理積の演算子どれか一つでも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)
ってやれば間違ってた時例外かなんか投げてくれるんじゃないの
296デフォルトの名無しさん:2009/01/27(火) 19:17:14
変数なんか一つも作る必要ないんじゃないか?
297デフォルトの名無しさん:2009/01/27(火) 19:23:26
自分もそう思うのですが、データベースを直接扱うのはよくない。エラー原因やチェックがしやすい。
という理由で、テキストボックスとかで入力した値を変数に入れるそうです。あんまりよくわかってないですが
298デフォルトの名無しさん:2009/01/27(火) 19:55:57
299デフォルトの名無しさん:2009/01/27(火) 20:04:36
>>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 なるほどー。わかりやすいですね。ありがとう。
わからない単語とか検索すると、たいていトップにマイクロソフトのヘルプみたいな解説が出てくるけど、すごいわかりにくいですな
301デフォルトの名無しさん:2009/01/27(火) 20:15:22
MSDNは英語で読むに限る
302デフォルトの名無しさん:2009/01/27(火) 20:50:57
>>299
論理積は論理積だよ
ショートサーキット評価するだけで
303デフォルトの名無しさん:2009/01/27(火) 22:53:39
去年買っておいたデザインパターンの本(C#)を読んでるんだけど目から鱗だ
何でもっと早く読まなかったんだろう
304デフォルトの名無しさん:2009/01/27(火) 22:58:09
>>299
ということは
if(A()&&B()){

}

とあったとき
A()でfalseが帰ってきたら
B()が呼ばれないんですか?
305デフォルトの名無しさん:2009/01/27(火) 23:00:55
そうだよ

if( A() & B() )

ならBも呼ばれる
306デフォルトの名無しさん:2009/01/27(火) 23:02:08
>>304
そのとおり。
if (A()) {
 if (B()) {
  〜
 }
}
と等価です。
307デフォルトの名無しさん:2009/01/27(火) 23:03:07
>>305
成る程
順番によっては値が変わることもあるのか…
ありがとうございます
308デフォルトの名無しさん:2009/01/27(火) 23:03:44
>>303
だからってobserverとかinterpreterとかはそのまま使っちゃダメだよ
イベントやforeachとしてC#に組み込まれてるからな
他にもデリゲート使うと非常に簡単になるパターンは多い
309デフォルトの名無しさん:2009/01/27(火) 23:06:14
A()&&B()の場合、A()の結果次第でB()が呼ばれるかどうか決まる。
A()&B()の場合、両方呼ばれるが、(結合規則とは無関係に)どちらが
先に呼ばれるかは不定。
310308:2009/01/27(火) 23:07:42
×interpreter→○iterator
311デフォルトの名無しさん:2009/01/27(火) 23:08:15
いまさらだけど

A == B
 と
 A.Equals(B)
ってどっちがお勧めなの?
312デフォルトの名無しさん:2009/01/27(火) 23:10:06
>>305
逆じゃないの?
313デフォルトの名無しさん:2009/01/27(火) 23:12:35
&&や||の場合が両表評価するじゃなかったっけ?
314デフォルトの名無しさん:2009/01/27(火) 23:16:14
>>311
目的による
参照比較したいならObject.ReferenceEqualsが確実
値の比較がしたい場合は
==, IEquatable<T>.Equals, Object.Equals (左ほど優先)
の中から実装されているものを使えばいいと思う
315デフォルトの名無しさん:2009/01/27(火) 23:17:00
>>312
>>313
コード書いて確かめりゃ一発だろハゲ
316デフォルトの名無しさん:2009/01/27(火) 23:19:29
>>303
オライリーのやつ?
317デフォルトの名無しさん:2009/01/27(火) 23:20:00
>>315
めんどくさいんじゃチンカス
318デフォルトの名無しさん:2009/01/27(火) 23:20:59
質問です。
開いたウィンドウを閉じたいと思います。
アプリケーションの場合は、
Process hProcess = Process.Start("Notepad");

if (! hProcess.CloseMainWindow()) {hProcess.Kill();}

でできるのですが、エクスプローラの場合、
Process hProcess = Process.Start("explorer");
とすると、ハンドルされていない例外が発生し、「オブジェクト参照がオブジェクトインスタンスに設定されていません。」となります。
どのようにしたらよいか教えてください。
319デフォルトの名無しさん:2009/01/27(火) 23:22:05
>>317
ならばヘルプ読め。あるいは他人の解答を信じるか。
|| http://msdn.microsoft.com/ja-jp/library/6373h346.aspx
&& http://msdn.microsoft.com/ja-jp/library/2a723cdk.aspx
> ただし、x が true の場合、y は評価されません。この場合、OR 演算の結果は y の値にかかわらず true になるためです。
> ただし、x が false の場合、y は評価されません。この場合、AND 演算の結果は y の値にかかわらず false になるためです。
> これは、"ショートサーキット" 評価と呼ばれます
320デフォルトの名無しさん:2009/01/27(火) 23:25:30
>>318
hProcessがnullなんじゃね?

Process.Startの戻り値は

>プロセス リソースに関連付けられた新しい Process コンポーネント。
>プロセス リソースが起動されなかった場合は null (既存のプロセスを再利用した場合など)。

シェル(explorer.exe)の場合、新しいフォルダを新規プロセスで開く設定にしてないと
プロセスは作られないよ
321デフォルトの名無しさん:2009/01/27(火) 23:26:05
だっふんだ!m(__)m
322デフォルトの名無しさん:2009/01/27(火) 23:27:54
2つ以上の評価をするときに使えそうだな
323デフォルトの名無しさん:2009/01/27(火) 23:34:01
324デフォルトの名無しさん:2009/01/27(火) 23:43:52
>>323
たしかにレビューはあれだw
でも書名出してくれてありがとう
325デフォルトの名無しさん:2009/01/27(火) 23:49:35
>>320
おお。なるほど。explorerを新規プロセスで開く方法は?
326デフォルトの名無しさん:2009/01/27(火) 23:53:26
(´・ω・`)しらんがな
327デフォルトの名無しさん:2009/01/28(水) 00:12:24
>>244-250
レスサンクス。参考になった。
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;
329デフォルトの名無しさん:2009/01/28(水) 08:15:48
object[,] tableにしてToString()しなきゃいいんじゃね?
330初心者:2009/01/28(水) 14:28:58
C#.NETについて質問させてください。
MVCアーキテクチャでWebサイトを構築していますが、XMLファイルより、
使用クラス名を読み取り、動的に使用クラスのインスタンスを生成する為に、リフレクション
機能を使用したいのですが、Type.GetType()メソッドやAssembly.GetType()メソッドなどの
戻り値がNULLになってしまいます。GetType()メソッドを使用するクラスと同じファイルに、
インスタンス生成したいクラスのクラス定義を書くとうまくいくのですが、別ファイルにすると、
うまくいきません。
詳しい方ご教授お願いします。
331デフォルトの名無しさん:2009/01/28(水) 14:41:07
完全限定名で書いてないとかそんなんだろ
初心者名乗る奴がリフレクションとかどうよと思うけど
332デフォルトの名無しさん:2009/01/28(水) 15:31:31
Dictionary<Key, Value>と同様な追加/削除/検索が行えて
ValuesプロパティがObservableCollectionみたいに変更通知機能がある
そんなコレクションってありませんか?
333デフォルトの名無しさん:2009/01/28(水) 16:52:04
Dictionary<,>とObservableCollection<>の両方をラップした
IDictionary<,>の実装クラスを作ればいいよ
ほとんど丸投げだからそんなに手間はかからない
334デフォルトの名無しさん:2009/01/28(水) 17:22:34
パラメータをバインドする機構がない
ってどういう意味ですか?初心者にはさっぱり
335デフォルトの名無しさん:2009/01/28(水) 17:31:18
コンテクスト(文脈)って知ってる?
336デフォルトの名無しさん:2009/01/28(水) 17:51:08
文脈って意味じゃないでしょうか?!!!!
337デフォルトの名無しさん:2009/01/28(水) 20:22:00
そういえばインデクサやStreamのサイズ指定はint型だけど
64bit環境だとどうなるの?
アドレス空間が64bitになっても4GBに縛られるの?
338デフォルトの名無しさん:2009/01/28(水) 20:37:22
>>337
uintでないから2Gだな。
しかし、ストリームなら2GBずつRead/Writeすればいいし、
List<T>でもTが例えば16バイトの構造体なら全部で32GBまでいける。

もっとも、そんな大量のメモリを一度に扱おうというのなら、
まだまだネイティブなコードのほうがいいだろうと思うのは俺だけか?
339デフォルトの名無しさん:2009/01/28(水) 20:43:20
インデクサはどんな型でも使えるだろ。
340デフォルトの名無しさん:2009/01/28(水) 21:49:42
配列の添え字はlongでいけなかったっけ?
341デフォルトの名無しさん:2009/01/28(水) 22:02:41
NativeIntなんで64bitプロセスなら可能のはず
342デフォルトの名無しさん:2009/01/29(木) 01:22:12
>>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
引数・・・メソッドを呼び出す際に渡す情報のこと。
なんのことかサッパリわかりません。メソッドもなんかの処理なんだろうなあ位にしかわかってません。
何がなんのために何に何の情報を渡しているのですか????
344デフォルトの名無しさん:2009/01/29(木) 17:04:07
まず@ITのC#入門でも読め
345デフォルトの名無しさん:2009/01/29(木) 17:05:56
釣りでしょ
346デフォルトの名無しさん:2009/01/29(木) 17:41:47
TVのリモコンでチャンネルの上下は引数なしだが、一発選局はチャンネル数が引数といえる。
347デフォルトの名無しさん:2009/01/29(木) 17:46:24
tv.SelectChannel(-1, CURRENT) とか書きうるわけだが
348デフォルトの名無しさん:2009/01/29(木) 17:51:56
せっかくメソッドにしてるのだから Up() Down() だろ。
なんで使いにくくするんだ。
349デフォルトの名無しさん:2009/01/29(木) 17:52:47
リモコンのボタンで、CURRENT、-1、チャンネルチェンジと押すわけですね、その形式だと。
350デフォルトの名無しさん:2009/01/29(木) 17:55:29
ほむほむ。ありがとう。Voidとかで引数を返さないっていうのはどういうメリットがあるというか、どういうときに使うのでしょう?
チャンネルでいうと、8ちゃんボタン押しても数字が入っていないので何も起こらないのかな。
351デフォルトの名無しさん:2009/01/29(木) 17:57:23
voidで値を返さないメリットがあるかじゃなくて
値を返すメリットがないからvoidなんだろ
352デフォルトの名無しさん:2009/01/29(木) 18:04:06
それ引数じゃなくて戻り値では
353デフォルトの名無しさん:2009/01/29(木) 18:10:46
private void CalcButton_click(object sender,EventArgs e)
{
}
作って覚えるC#の本より引用なのですが、これからVoid取っちゃうと何か不具合ありますかね?
354デフォルトの名無しさん:2009/01/29(木) 18:11:34
やってみればわかる
355デフォルトの名無しさん:2009/01/29(木) 18:11:51
イベントから学習しろ
356デフォルトの名無しさん:2009/01/29(木) 18:12:01
>>353
戻り値が分からなくてエラー出る
357デフォルトの名無しさん:2009/01/29(木) 18:15:19
なるなる。ありがとう。やっぱり読むだけじゃ覚えれなそうですね
6年前のPCにVisualStudio入れたら重くなって挫折してしまいました
358デフォルトの名無しさん:2009/01/29(木) 18:17:08
デフォルトのvoidさんは無いのか。
2CHよりひでーな。
359デフォルトの名無しさん:2009/01/29(木) 18:18:33
>>357
csc.exeのあるディレクトリにPATHだけ通せば
あとはコマンドプロンプト+エディタで最低限の環境が揃うぞ
ネットで適当に調べてやってみるといい
360デフォルトの名無しさん:2009/01/29(木) 21:40:32
頻繁に呼ばれる関数で
newを使うのって速度かなり落ちますか?
画像データ用の領域で、一度に640*480*4バイト確保します。
361デフォルトの名無しさん:2009/01/29(木) 21:42:02
関数を呼ぶのに new は必要ない。
362デフォルトの名無しさん:2009/01/29(木) 21:44:47
>>361
日本語読めますか?
363デフォルトの名無しさん:2009/01/29(木) 21:45:07
落ちますか? ってやってみればいいじゃない

newを使うかどうかよりも1MBを頻繁に確保するのは重いかもね
ワーキングセットも大きくなるだろうし
364デフォルトの名無しさん:2009/01/29(木) 21:48:19
コンピュータの性能が良すぎて問題ないという可能性もある。
まずは率直な書き方で作ればいい。
365デフォルトの名無しさん:2009/01/29(木) 21:49:23
キャッシュしても問題ない構造ならとりあえずキャッシュするようにしといてもいいとおもうよ
手間かかるものでもなし
366デフォルトの名無しさん:2009/01/30(金) 01:03:05
>>362
日本語で書いてどうする?
367デフォルトの名無しさん:2009/01/30(金) 01:18:14
>>366
日本語通じてなくてワロタ
368デフォルトの名無しさん:2009/01/30(金) 08:50:41
>>366
アイちゃん乙
369デフォルトの名無しさん:2009/01/30(金) 08:52:34
安価ミス
>>361
370デフォルトの名無しさん:2009/01/30(金) 10:57:19
ArrayListやList<T>において、
list.Add(new T())
といった感じで配列に追加している場合、
削除系メソッド(Clear、Remove、RemoveAllなど)実行したときに配列内のクラスのインスタンスは
開放されないのでしょうか?
371デフォルトの名無しさん:2009/01/30(金) 11:01:05
その要素を他が参照してなかったらGC対象になる
372デフォルトの名無しさん:2009/01/30(金) 11:09:48
>>371
そういうことなのですね。ありがとうございました。
373デフォルトの名無しさん:2009/01/30(金) 15:09:36
"バイト"や"キログラム"のような単位を表す文字列を
設定されたカルチャに応じて取得できるクラスないですか?
374デフォルトの名無しさん:2009/01/30(金) 15:22:26
標準ライブラリには無い
複数形とか考えると多分作るのは不可能に近い
375デフォルトの名無しさん:2009/01/30(金) 18:15:54
不可能ってこたねえだろ
376デフォルトの名無しさん:2009/01/30(金) 18:46:52
>>375
渦中って読めますか?
377デフォルトの名無しさん:2009/01/30(金) 18:51:34
俺もそんなクラスほしい
標準であってもいいよね

関係ないけど「OK」「キャンセル」「適用」 とかも欲しかった
378デフォルトの名無しさん:2009/01/30(金) 19:14:29
ってか、C#おもろいけど、GUI案件がないからモチベあがんないんだよね。言語的にはいいんだけど。

しょうがないから、ASP.NETもじもじやってる。
379デフォルトの名無しさん:2009/01/30(金) 19:47:32
C#とついでにSilverLigitもやったんだけど、案件が全然ねえ(;´д`)俺は馬鹿だったのか?
380デフォルトの名無しさん:2009/01/30(金) 19:54:31
わざわざ.netを指定してくる企業って皆無では・・・
381デフォルトの名無しさん:2009/01/30(金) 20:20:23
おれずっとc#でやってたよ。MSとちょっと関係ある会社だけど
382デフォルトの名無しさん:2009/01/30(金) 20:21:56
VS2008 + .net2.0

dirフォルダ内のサブフォルダの中身も含めたファイルの個数を出したいです。

using System.IO;
string[] files = Directory.GetFiles( dir, "*", SearchOption.AllDirectories);
として、files.Length を数えてるんだけど、ファイル数が5000とかあるフォルダを
検索しなくちゃならないので、さすがに遅いです。

この段階ではファイル名のstringは使わないので、個数だけで良いのですが、
サクっと出せるような方法ありませんか?
383デフォルトの名無しさん:2009/01/30(金) 20:48:30
ないよ
遅いのは結局IOであってファイル名とかはほぼ関係ない
384デフォルトの名無しさん:2009/01/30(金) 20:49:49
>>383
了解しました。
我慢します。
385デフォルトの名無しさん:2009/01/30(金) 21:01:30
Rectangle rect;
rect = null;

としたところ、Rectangle 型なのでnullは入れられないと言われました!
VB.NETだと、どんな型の変数にも Nothing を入れられるのでつい同じかと
思っていました。どうやったら同等の処置が可能でしょうか、よろしくお願いします。

386デフォルトの名無しさん:2009/01/30(金) 21:04:19
VBでも本当にNothingを入れることはできないよ
Rectangle? rect;
rect = null;
※使うときはRectangleにキャストすること
387デフォルトの名無しさん:2009/01/30(金) 21:05:31
>>385
Rectangleは値型だっけか。これでどうだ。
Rectangle? rect = null;
388デフォルトの名無しさん:2009/01/30(金) 21:13:03
>>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){・・・} 
のように使えるでしょうか。そうだ、やってみます。
391デフォルトの名無しさん:2009/01/30(金) 21:19:56
((Rectangle)rect).Contains
>>390
できません
rectG!=default(Rectangle)ならできるけど(0, 0, 0, 0)とは区別できないよ
392デフォルトの名無しさん:2009/01/30(金) 21:23:29
defaultはgenericで使うことを前提に作られているんで若干癖がある。
Rect(0,0,0,0)に初期化することが目的なら
var rect = new Rectangle();
未初期化のRectangleが欲しいのなら
Rectangle rect;
でいい。
393デフォルトの名無しさん:2009/01/30(金) 21:24:41
>>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)ならできる
わかりました。いろいろご教示ありがとうございました!

皆様本当にありがとうございました!またよろしくお願いします!!
395デフォルトの名無しさん:2009/01/30(金) 21:26:18
うぽ!
(rect ?? new Rectangle()).Value.Contains(
396デフォルトの名無しさん:2009/01/30(金) 21:26:39
っていうかVBでも値型をNothingと比較するのはダメだろ
ゼロ初期化されたものと同じとわかっててやるならいいけど,>>394はわかってなさそう
397デフォルトの名無しさん:2009/01/30(金) 21:31:15
>>392
>>393
>>395
C#の凄い表現のバリエーションにびっくりです、またこれから勉強致します。

>>396
わかってなかったです。すみません・・・。

ではまた。
398デフォルトの名無しさん:2009/01/30(金) 21:33:38
Rectangleをnullと初期化したあとにどう使うんだろう・・・
399デフォルトの名無しさん:2009/01/30(金) 21:40:02
フラグ代わりだよ
Rectangle rect;
bool isRectAssigned;
みたいなのってよく出てくるだろ
これを一つにまとめたのがnullable
400デフォルトの名無しさん:2009/01/30(金) 21:43:05
IList<T> list = new List<T>();
とかやってたら、IListの方にはForEach()がなくて涙目なんだけど、そういうもんなの?
401デフォルトの名無しさん:2009/01/30(金) 21:55:52
ForEachぐらい自分で書けばって
402デフォルトの名無しさん:2009/01/30(金) 22:07:07
nullable ってキモいからまだ使ったことがないな
すこし慣れてみるか……
403デフォルトの名無しさん:2009/01/30(金) 22:09:46
拡張メソッドで自作するのは簡単
でもEnumerable.ForEachが無いことを考えると,素直にforeach書けということなんだろうと思う
404デフォルトの名無しさん:2009/01/30(金) 22:26:01
WPFではShowDialogの戻り値がbool?になってたりするね
405デフォルトの名無しさん:2009/01/30(金) 22:48:24
正確に20msで処理をしてFORMのPictureBoxを触りたいときは、
BackgroundWorker+System.Timers+AutoResetEventでいいですか?
他にもっといいやり方があるんなら教えて欲しいのですが…orz
406デフォルトの名無しさん:2009/01/30(金) 22:57:49
>>405
> 正確に20ms
まずこれが難しい。timeBeginPeriod か MMCSS 使えば
ある程度いけるかもしれないけど、あくまである程度。
さらにいいやり方となると Forms 使うのが間違ってる。
407デフォルトの名無しさん:2009/01/30(金) 22:58:20
20msは厳しいんじゃないの
更新間隔は20msよりも長くして,
そのつど経過時間を計測してそれから計算してその結果をもとにしてPictureBoxを更新したほうが
408デフォルトの名無しさん:2009/01/30(金) 23:06:23
コールバック間隔は,Application.Idleイベント使うなり自分でメッセージループ回すなりして
その中でStopwatch使って時間計測すればある程度正確にできるけど
フォームの更新が20msでは絶対無理
409デフォルトの名無しさん:2009/01/30(金) 23:27:55
20msってどこから来たの?
測定機械のタイミングとか?
GUIの更新は後回しにした方がいいんじゃね?
410デフォルトの名無しさん:2009/01/31(土) 00:53:40
20msってWindowsのインターバルタイマーで拾えるの?
割り込み上がっても、処理が間にあわん気がするんだけどね
リアルタイムOSでというのなら分からんでもないけど。
#組み込み用が対象なのかな?
割り込み->データをFIFOQueueに追加->queueのデータをGUI処理
になるんだろうけど(sharedメモリ経由か)
#割り込みコンテキストってWinにはあるのかな?
411デフォルトの名無しさん:2009/01/31(土) 02:40:33
いつも思うんだが、なんか2chって日本語として成立してない質問でも適当にESPを働かせて、
(というより、回答する側も他人の文章を正確に読解する能力がないだけ、という方が
より真相に近いと思うんだが)回答する奴が多すぎないかね。

>>405
「正確に20msで処理をして」とはどういう意味?
正確に20ms間隔でイベント処理をしたい、って意味なの?
いずれにしても、「正確」という表現はもっと定量的な表現にする必要があるだろ?

仮に20ms間隔でGUIを更新したい、って意味だとしたら、
今時のPCなら単純にSystem.Timers.Timer使っても±5ms以内の誤差で可能だと思うけど。

少なくとも、平均速度として50回/秒が実現できればいいということなら
(意味があるかどうかは別として)ほぼ確実に出来ると思う。

もちろん糞重い描画処理をしてたらあっという間に破綻するけど。

いざとなったらスレッドでThread.Sleep(0)と、Stopwatchをポーリングして
20msごとにControl.BeginInvoke()を実行する無限ループで実装したっていいし。
412デフォルトの名無しさん:2009/01/31(土) 04:51:35
えらい自信だからためしに作ってみたけど
System.Timers.Timerなんて無茶苦茶ばらつくじゃないか
413デフォルトの名無しさん:2009/01/31(土) 09:07:32
エスパーで解釈すると、
20msecでコントロールのアップデートはありえないから、
CreateGraphics()で得たGraphicsで直接描こうとしている。
CreateGraphics() + GDI+メソッドは別スレッドからでも使える。
こういう用途にはFormかPanelが適当なのだけどVB6以来の伝統かPictureBoxを使いたがる人が多い。
Timers.Timerはタイマーイベントの処理時間分、間隔がずれてゆくはずだからその分の解消をしたい。
そんなとこだろ。
414デフォルトの名無しさん:2009/01/31(土) 11:17:09
>20msecでコントロールのアップデートはありえないから、
>CreateGraphics()で得たGraphicsで直接描こうとしている。

じゃあオフスクリーンにも20msecで描画する必要ないじゃん
415デフォルトの名無しさん:2009/01/31(土) 11:41:59
へっぽこエスパーばっかりだな
とくに>>411
416デフォルトの名無しさん:2009/01/31(土) 11:52:58
>>414
オフスクリーン
というのはどこから出てきたんだ?
417デフォルトの名無しさん:2009/01/31(土) 11:58:29
まあ>>405が来るのを待とうじゃないか
418デフォルトの名無しさん:2009/01/31(土) 11:58:36
どうやってもGDI+で20msは厳しいでしょ
419デフォルトの名無しさん:2009/01/31(土) 11:59:47
オンでもオフでも問題の本質は一緒でしょ
>20msecでコントロールのアップデートはありえない
のなら20msec間隔で描画する必要がない
420デフォルトの名無しさん:2009/01/31(土) 12:01:13
そのオン、オフというのを説明してもらいたいのだが・・・
421デフォルトの名無しさん:2009/01/31(土) 12:02:12
ダブルバッファリングじゃないの
422デフォルトの名無しさん:2009/01/31(土) 12:06:59
へっぽこエスパーダブルバッファリングも知らないのかよ
423デフォルトの名無しさん:2009/01/31(土) 12:09:33
やっぱりダブルバッファのことね。それを使うとは一言も言ってない。
フォームにパネルと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;
  }
}
424デフォルトの名無しさん:2009/01/31(土) 12:24:11
Direct3Dでも使わないと描画間に合わないだろ
425デフォルトの名無しさん:2009/01/31(土) 12:24:57
へっぽこエスパー
ありえないとか言いながら20msecでコントロール(panel)のアップデートしてんじゃねーよ

426デフォルトの名無しさん:2009/01/31(土) 12:33:10
なんか子供だなぁ。

ありえないのは、Control.Invokeを使うこと。
他のスレッドからだからPanel1.Update()も使えない。
Timers.Timerをフォームに貼り付けてと書いたけど、実際はコードでnewしてる。
フォームに張りつけた場合は、ここだけthisからnullに変更してくれ。
this.timer1.SynchronizingObject = null;
427デフォルトの名無しさん:2009/01/31(土) 12:36:52
WindowsXP、VisualC#2008環境で質問があります。
フォルダの[ツール]-[フォルダオプション]で表示できるフォルダオプションのウィンドウを開くには、なにを呼び出せばいいですか?
可能なら、表示オプションのタブをクリックした状態にしたいです。
どなたかご教示ください。よろしくお願いします。
この中身を編集するということは、レジストリをいじるということかと思いますが、その場合、どのような方法を取ればよいでしょう?
違っていたらご指摘いただけないでしょうか。
428デフォルトの名無しさん:2009/01/31(土) 12:37:52
だから描画間に合わなかったらどうすんの?
>>423くらいの処理なら間に合わないこともないかもしれないけど一時的に遅れることだってあるだろ
429デフォルトの名無しさん:2009/01/31(土) 12:46:55
>>428
それで>>405がAutoResetEventと書いてるのだと思うよ。
つまり間に合わなかった場合は、その分間隔を遅延させるか1回か数回とばすか。
実現する方法はいくつかあるが、AutoResetEventを使うのはとばす方のロジックで使える。
この辺は普通にゲームの描画のアルゴリズムだと思うんだけどな。
430デフォルトの名無しさん:2009/01/31(土) 13:17:19
>>427
Vistaだったら
::{21EC2020-3AEA-1069-A2DD-08002B30309D}\::{6DFD7C5C-2451-11D3-A299-00C04F8EF6AF}
なんだけど。これをShellExecute。
XPはシラネ

あとはRegistryクラスで編集、WM_SETTINGCHANGEDをブロードキャストとかかのう
431デフォルトの名無しさん:2009/01/31(土) 14:38:10
で20ms間隔で描画できたかい?そんなコードだと無理に決まってるけどw
432デフォルトの名無しさん:2009/01/31(土) 14:41:32
Expression Treeで動的生成されたメソッドって一回作ったらそのまま解放されないの?
頻繁に式木作って評価するならインタプリタ作った方がいいのかな
433デフォルトの名無しさん:2009/01/31(土) 14:50:43
クラスデザイナの関連付けってなにしてくれるの?
関連付けされたクラスのコンストラクタが、
関連元クラスに追加されるみたいだけど、何につかうんだべ。
434デフォルトの名無しさん:2009/01/31(土) 14:56:27
System.Threading.Timer使ってConsoleアプリケーションで、

コールバックは、
・1000回呼ばれたら終了イベント上げる
・開始前と最後のコールバック時に時刻表示

メインは
・1秒後から20msecでコールバックするようにタイマーセット
・終了イベントが上がってきたらタイマーをdisposeして終了

という事実上タイマーが使われるだけで何もしないサンプルをためしに
作ってみたが、32秒かかるよ。最初の1秒待ち差し引いても、平均31msec
呼ばれるのにかかってる。
435デフォルトの名無しさん:2009/01/31(土) 15:36:14
>>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;って叩けないですよね?
437デフォルトの名無しさん:2009/01/31(土) 16:37:42
>436
public int this[int key] { get { return _dic[key]; } }
みたいに隠蔽して必要な値を取得できるメソッドとかだけ公開すれば操作はしようがないので堅いよ。
438デフォルトの名無しさん:2009/01/31(土) 16:47:53
>>436
外から叩けちゃうと隠蔽にならないんだが、そのコードなら別に外から叩けるな。
439デフォルトの名無しさん:2009/01/31(土) 16:48:30
内部にラップしてるDictionaryをそのままの型で公開しちゃったら隠蔽にならないから
440デフォルトの名無しさん:2009/01/31(土) 16:58:52
>>435
>ただ1000回で31秒かかるというのはおかしいな。
>長いがコードはるね。Celeron1.4G WinXPで00:00:20.0493193だった。

ハードウェア割り込みタイマーの周期次第じゃないの?
この周期はどこかのアプリがtimeBeginPeriodを使うだけで
簡単に変わるから、単純にOSとCPUだけ並べて
おかしい/おかしくないとは言えないよ。

Windowsだとデフォルトの割り込み間隔が16msecってのはよくある値だし
20msecのタイマーを仕掛けたら32msecごとにコールバックされていた
と考えればむしろ辻褄があう。(32msec×1000で約32s)

>>434 の環境でメディアプレイヤーなんかを同時に起動してるだけで
結果は変わるんじゃないかね。
441デフォルトの名無しさん:2009/01/31(土) 17:05:31
単に終了イベントを待つのにビジーループさせてるんとちゃう
442デフォルトの名無しさん:2009/01/31(土) 17:12:00
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();

上下のどちらがいいのかな。
443デフォルトの名無しさん:2009/01/31(土) 17:13:15
それを踏まえて、さらにコピーの上書不許可時にコピー先にファイル名存在で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();

444デフォルトの名無しさん:2009/01/31(土) 17:13:52
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;

こんな書き方があると思うんだけど、見やすいというか、わかりやすい書き方が思いつかない。
なんかいいアイデアないかな・・
445デフォルトの名無しさん:2009/01/31(土) 17:14:35
引数チェックは上にまとめたいから1
446デフォルトの名無しさん:2009/01/31(土) 17:15:19
bool返す必要があるのか疑問ではある
447デフォルトの名無しさん:2009/01/31(土) 17:18:02
説明がないとわからないようなbool値を返すな
448434: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();
    }
  }
}
449デフォルトの名無しさん:2009/01/31(土) 17:27:03
>>435 のコードを実行してみた

Pentium4@2G WinXP .NET 3.5SP1
結果 00:00:31.2455778

というわけで31秒かかる環境はここにもある。
450434:2009/01/31(土) 17:34:00
>>435のコードは31.193秒だった。同じだね。
Vista Home Premium
Core2 Duo [email protected]
451デフォルトの名無しさん:2009/01/31(土) 17:38:53
>>448
こちらは、21-22秒で完了。起動時の1秒待機があるから20.5秒くらい。
>>440の説が正しいなこりゃ。
452デフォルトの名無しさん:2009/01/31(土) 17:45:43
戻り値と例外モデルが混在してるのがイライラする。
453デフォルトの名無しさん:2009/01/31(土) 17:50:32
リアルタイムOSじゃないんだから無理ってのが出ないのはそこまでの正確さは求めていないってこと?
454434: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
それは、(ひょっとすると元質問者以外は)百も承知でしょ。
455デフォルトの名無しさん:2009/01/31(土) 18:47:05
>>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;

456デフォルトの名無しさん:2009/01/31(土) 18:48:24
それを踏まえて、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;

などあると思うけど、もしわかりやすいアイデアあったら頼みます。
457デフォルトの名無しさん:2009/01/31(土) 19:02:09
うぽ
return (word == "nullpo") ?  ((canAcceptNullpo) ? 1: 0) : 1;
というのは冗談として、
事前条件的なものは早めにチェックして単独でreturnしたほうがいいと思いますよ。
引数の検査、つまりnullチェックのや範囲チェック的なものはそれ。
458デフォルトの名無しさん:2009/01/31(土) 19:05:44
正直、「それを踏まえて」の人が何を主張したいのかよーわからん。
どうでもいいだろそんなの。

そもそも最初の質問者の質問意図と全然違うこと言ってるのに「それを踏まえて」
ってどういう神経?
459デフォルトの名無しさん:2009/01/31(土) 19:11:33
戻り値と例外モデル混ぜるなってアドバイスは
素直に受け止めておいたほうがいいとおも
例外の役割のうちに一貫したエラー処理メカニズムの提供があるんだから
>>455-456よりよほど重要だ
460デフォルトの名無しさん:2009/01/31(土) 19:12:19
エラー処理じゃないか。通知だね
461デフォルトの名無しさん:2009/01/31(土) 21:02:03
Visual Studioで質問

デバックなしで実行。
開いたウィンドウをクリックすると
そのウィンドウが最小化されてしまう。
つまり最大化やら最小化ができない。

複雑でも何でもないんだが教えてくれ…
462デフォルトの名無しさん:2009/01/31(土) 21:03:23
で、どこに質問があるの?
463デフォルトの名無しさん:2009/01/31(土) 21:09:12
>>461
フォームのプロパティを確認しろ
464デフォルトの名無しさん:2009/01/31(土) 22:13:49
みんなありがとう。なんか釈然としなくてね。

>>457
単独で、returnできるうちにしてしまうってのが正解なのかな。やっぱり。

>>458
>どうでもいいだろそんなの。
それならいいんだけどね。なら動けばなんだっていいみたいな感じが自分ではするので、
何か可読性がよく、わかりやすい方法が内かなと思って。

「それを踏まえて」の前はif文によって異なるreturn値を返す方法についての方法論を示したということ。
「それを踏まえて」の後は、その異なるreturn値に、さらに例外がでてきた場合の例なんだけど、
書いていて旨い例が見つからず、何かもっと言い例がないかなと思ったの。

>>459
了解、心にとめておきます。
ただ、手近にあってソースで例を書いたので、戻り値と例外が一緒くたの例になってしまった。
例が悪かった。すまない。よければ、>>455>>456の書き方で、
自分はこうしてるみたいな理由があったら教えてほしい。
465デフォルトの名無しさん:2009/01/31(土) 22:25:50
だからそんなことどうでもいいって。
もう、そんな些細なことに固執して宗教論争してても飯が食えるような
牧歌的な時代じゃないんだから。

もっと他に理解したり習得したりすべきことが山ほどあるだろ。
466デフォルトの名無しさん:2009/01/31(土) 23:21:19
>>464
そういう些細なことまで書いてあるCode Completeって本がある
複数リターンについても記述があったはずだからまずは立ち読みで
467デフォルトの名無しさん:2009/01/31(土) 23:49:29
>>465
どうでも良くないだろ。こういうのは大事だぞ。
生産性や可視性の観点から重要。
最近はPCの性能が良くなったからか、
同じスコープでインスタンスを返すループを伴うメソッドやプロパティを、
何の資源も消費せずに、いくらでもインスタンスが出てくる
打ち出の小槌みたいに簡単に使う傾向があるしな。
468デフォルトの名無しさん:2009/02/01(日) 00:12:10
命名規則で質問ですが

動詞に対する結果を示すbool型変数の名前はどうしてますか

IsCreated IsClosed 等、Is○○○だと英文法的におかしいので
469デフォルトの名無しさん:2009/02/01(日) 00:14:59
おかしくないですよ。
470デフォルトの名無しさん:2009/02/01(日) 00:15:53
IsCreated IsClosedなんて.NET Frameworkのクラスライブラリにいくらでもあるし
英文法的にも別におかしくない
471468:2009/02/01(日) 00:25:58
そうですかありがとうございます
472デフォルトの名無しさん:2009/02/01(日) 02:31:40
473デフォルトの名無しさん:2009/02/01(日) 03:09:39
Process.Startで起動した外部プログラムからの
戻り値を受け取ることは出来ますか?
474デフォルトの名無しさん:2009/02/01(日) 03:10:50
ExitCodeプロパティ
475デフォルトの名無しさん:2009/02/01(日) 05:30:49
>>468
引数やインスタンス名まで含めて一つのセンテンスと捉えると、寧ろ自然なことが多い
476デフォルトの名無しさん:2009/02/01(日) 10:03:38
HashSetがなぜか見つからない言われるなーと思ったら
Genericの中でこいつだけdllが違うのか
しかもSystem.Coreはデフォルトでは参照設定に追加されてないという罠。
477デフォルトの名無しさん:2009/02/01(日) 10:24:45
3.5で追加されたもんだから仕方ない
一応csc.rspには入ってるけどな
478デフォルトの名無しさん:2009/02/01(日) 11:21:44
HashSetってなんに使うんだ?
479デフォルトの名無しさん:2009/02/01(日) 11:30:00
>>476
>しかもSystem.Coreはデフォルトでは参照設定に追加されてないという罠。

プロジェクトテンプレートの設定次第。
デフォルトで参照設定に追加されている人も結構多いはず。
LINQ用のクラスもSystem.Coreに含まれてるから。

LINQを使うのにいちいち参照設定が必要だったって人はあんまり見ないよね?
そういう人ははHashSetも最初からIntelliSenseに表示されるように見えているはず。
480デフォルトの名無しさん:2009/02/01(日) 11:36:44
>>468
bool型のプロパティの名前をisやhasで始まるのは定番中の定番。
isなしで形容詞or過去分詞のみのパターンも、それはそれで定番。
481デフォルトの名無しさん:2009/02/01(日) 11:55:08
過去分詞のみなのはイベントの名前にしていただきたいところだがな
482デフォルトの名無しさん:2009/02/01(日) 12:37:39
Javascriptから来た子は、OnClickとかがイベント名じゃないことに文句言ってた
483デフォルトの名無しさん:2009/02/01(日) 12:39:36
VBAもOnClickってあったな
484デフォルトの名無しさん:2009/02/01(日) 13:18:35
ちなみに.NETでClickedとかClosedみたいな名前のイベントがあったら
過去分詞じゃなくて動詞の過去形(ガイドライン参照)
485デフォルトの名無しさん:2009/02/01(日) 15:50:10
Putはどっちですか><
486デフォルトの名無しさん:2009/02/01(日) 17:28:11
複数判定する場合はAreなんちゃらにすんの?
487デフォルトの名無しさん:2009/02/01(日) 17:49:53
複数?コードで書いてみて。
488デフォルトの名無しさん:2009/02/01(日) 18:15:04
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:\が開いてしまいます。
この理由と、引数としてフォルダを指定する方法を教えてください。
489デフォルトの名無しさん:2009/02/01(日) 18:15:51
○ is △? → ○.Is△で○が複数になることって無いんだよね
○がコレクションの場合は一つのコレクションとみなす
490デフォルトの名無しさん:2009/02/01(日) 18:19:21
>>488
半角空白を含む引数は" "で括る
基本だよ
491デフォルトの名無しさん:2009/02/01(日) 18:28:18
>>490
えっ?
this.openProcess.StartInfo.Arguments = @"C:\略\My Documents\";
と""でくくってあると思うんですけど…。
違ってたらごめんなさい。
というか、C:\Windowsとかの半角空白を含まないフォルダも開けないのです。
492デフォルトの名無しさん:2009/02/01(日) 18:34:02
>>491
そのダブルクォーテーションはC#の文字列を作る意味しかない。
その中身の文字列にダブルクォーテーションを入れないといけない。
"\"C:\\略\\My Documents\\\""のように。
493デフォルトの名無しさん:2009/02/01(日) 18:53:58
>>492
なるほど!
そうでしたか。できました。ありがとうございました。
494デフォルトの名無しさん:2009/02/01(日) 20:46:31
>>484
BegunかBeganか迷った末にStartedでお茶を濁すのですね。わかります。
495デフォルトの名無しさん:2009/02/01(日) 22:18:17
>>494
あるある
496デフォルトの名無しさん:2009/02/02(月) 00:07:25
文字列の定義に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クラスないでは出来ないみたいだし・・・
何か良い方法ないですかね
497デフォルトの名無しさん:2009/02/02(月) 00:10:46
「かといって」以前と以後で話がまるでつながってないんだが?
498デフォルトの名無しさん:2009/02/02(月) 00:11:37
constを諦めて、static readonlyにしたらだめなの?
499デフォルトの名無しさん:2009/02/02(月) 00:11:58
配列にしたいけどなんかできないみたいだから
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> は本当は継承したクラスにしたほうがいいんだけども
501デフォルトの名無しさん:2009/02/02(月) 00:23:04
public static const Define{
public static readonly string[] Names = { "hoge0", "hoge1", ...., "hoge9"};
}
じゃだめなのか?
これだと、文字列との比較は
if(bar == Define.Names[ "hoge0" ])
のように書くことになる。
502デフォルトの名無しさん:2009/02/02(月) 00:29:23
>500-501
おー、どっちもできました。
constだとnewできなくて、readonlyだとnewできるんですね。

503デフォルトの名無しさん:2009/02/02(月) 01:18:52
Visual C# 2008をインストールして使い始めたんですが、
テキストエディタでコーディング中に表示されるポップアップヘルプの中身が英語なんです。
前使ってたヴァージョンでは日本語だった気がしますが、どうやったら日本語化できますか。
ちなみにメニュー等は全て日本語です。
504デフォルトの名無しさん:2009/02/02(月) 01:24:35
505デフォルトの名無しさん:2009/02/02(月) 01:56:30
Visual C# 2008環境のデバッグについて質問があります。
開発環境をインストールしていないターゲットマシン(XP)で、
エラーメッセージをファイルに落とすには、
どのようにコンパイルしたらよいのでしょう?
506デフォルトの名無しさん:2009/02/02(月) 04:05:05
Visual Studio C# 2008で質問があります。
コンパイルをしてexeファイルが出来上がるのですが、
これの会社名や著作権の情報を変更するにはどうすれば良いのでしょうか?
507デフォルトの名無しさん:2009/02/02(月) 04:12:29
propertiesのAssemblyInfo.csを修正
508デフォルトの名無しさん:2009/02/02(月) 05:34:26
ありがとうございました。
509デフォルトの名無しさん:2009/02/02(月) 05:39:50
どういたしまして。
510デフォルトの名無しさん:2009/02/02(月) 06:53:14
DirectryクラスのGetFilesより早く一覧を取得する方法ないすか

再帰で一覧取得しようとしてるんだけど
たかだか3000ファイル程度でもAPIのFind***Fileに比べて遅くてたまらねえっす
511デフォルトの名無しさん:2009/02/02(月) 07:06:31
ならAPI使えばー
512デフォルトの名無しさん:2009/02/02(月) 07:27:01
身も蓋も無いこと言わないで下さい><

…最終的に解決しなきゃそうします多分
513デフォルトの名無しさん:2009/02/02(月) 09:59:53
データベースからとってきたdatetime型の日付形式の時間部分だけを抜き取って、
XX:XXではなくXX時XX分と表示させたいのですが、簡単な方法ありますでしょうか?
514デフォルトの名無しさん:2009/02/02(月) 10:15:19

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]がわかりません。配列?
516デフォルトの名無しさん:2009/02/02(月) 10:33:41
(XmlsAa.AaRow)はキャスト
[0]はインデクサ

元が何型かは知らんけど
Rowsコレクションの最初の要素をXmlsAa.AaRow型にキャストしてるだけ

分からんならキャストとインデクサでググれ
517513:2009/02/02(月) 10:34:17
普通に抜き出して置換することにしました。
無駄な書き込み申し訳なかったです。
518デフォルトの名無しさん:2009/02/02(月) 10:35:49
ええ!? 514ガン無視!?
519デフォルトの名無しさん:2009/02/02(月) 10:36:27
エエエエエエ(AA略)
520514:2009/02/02(月) 10:37:15

       ____
     /      \
   /  _ノ  ヽ、_  \
  /  o゚⌒   ⌒゚o  \
  |     (__人__)    |  
  \     ` ⌒´     /
521デフォルトの名無しさん:2009/02/02(月) 10:44:28
>>510
>DirectryクラスのGetFilesより早く一覧を取得する方法
>再帰で

DirectoryInfoクラスのGetFiles使ってるよね?
再帰で取得することよくあるけど、そんなに差はなかったような気がするが
522513:2009/02/02(月) 10:45:00
MessageBoxに表示したいわけではありませんので。
523デフォルトの名無しさん:2009/02/02(月) 10:48:40
エエエエエエエエエエエエエ(AA略)
524デフォルトの名無しさん:2009/02/02(月) 10:50:20
何この流れ・・・
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バイト

こんな感じなのですが、なにかこういう展開のヒントや情報でも構わないのでお教え願えませんか?
527デフォルトの名無しさん:2009/02/02(月) 12:07:35
構造体にしといてbyte[]からMemoryStream作ってBinaryFormatterでDeserializeとか?
528デフォルトの名無しさん:2009/02/02(月) 12:22:27
C#でゲーム作って配布すると、
ソースコードを見られてしまうの?
529デフォルトの名無しさん:2009/02/02(月) 12:27:34
それがなにか?
530デフォルトの名無しさん:2009/02/02(月) 12:30:01
みんなで公開羞恥プレイですよ

さああなたも御開帳
531デフォルトの名無しさん:2009/02/02(月) 12:55:11
>>527
そんな感じで出来るんならやってみようと思います。
ありがとうございました。 
532デフォルトの名無しさん:2009/02/02(月) 12:58:59
>>526
形式は何でも構わないってことはDelphiで作られたソフトってのも変更可能なわけ?
その割に512バイト固定とか言ってるけど

.NET的にはバイナリの塊を処理するのは
BinaryReaderで読み取っていったり一つずつBitConverterで変換していくのが基本
533デフォルトの名無しさん:2009/02/02(月) 13:21:48
nslookup.exeで調べた相手のSMTPサーバーに直接メールを送る事って出来なくなったのね・・・
534デフォルトの名無しさん:2009/02/02(月) 13:27:35
何年前の話だよ
535デフォルトの名無しさん:2009/02/02(月) 14:34:06
>>534
今日の話ですけど?w
536デフォルトの名無しさん:2009/02/02(月) 14:43:26
さすが初心者スレだ
537デフォルトの名無しさん:2009/02/02(月) 14:45:40
まあ取り敢えず独り言はチラシの裏に書いてろ
質問したいなら質問の体裁を取れ
みたいな
538デフォルトの名無しさん:2009/02/02(月) 14:47:43
>>532
変更は可能と言えば可能なんですが・・・
出来るだけデルファイ側は変更しないようにとのことなので…orz

例えばa1,a2辺りを処理するのは
おとなしく受け取ったバイト配列を BitConverter.ToInt32
で一個づつ自分用にばらしていくのが妥当という感じでしょうか?
539デフォルトの名無しさん:2009/02/02(月) 15:14:40
そうだよ
直接構造体に当てはめるなんてメモリイメージに縛られすぎ
というのがC#の方針
.NET間ならBinaryFormatterのシリアライズとかで十分だからな
540デフォルトの名無しさん:2009/02/02(月) 15:31:15
エンディアンやバウンダリの問題もあって
テキストベースのプロトコルにすることが多くなった。
固定レコードは流行らなくなったな。
541デフォルトの名無しさん:2009/02/02(月) 15:33:40
Visual Studioやってたら、'private'は無効です。のエラーが
毛テスタ
542デフォルトの名無しさん:2009/02/02(月) 15:35:44
'private'を削りなさい
543デフォルトの名無しさん:2009/02/02(月) 15:37:30
前の行の最後にセミコロンが無い
544デフォルトの名無しさん:2009/02/02(月) 15:39:40
メソッドの中で private 宣言した
545デフォルトの名無しさん:2009/02/02(月) 15:43:21
24時間働いているなら労働基準監督署へ
546デフォルトの名無しさん:2009/02/02(月) 15:49:38
private 削ると、使ってる変数が全部定義がありませんってエラーきますた。
セミコロンはありまふ
メソッドの中で宣言・・・これかもです。ありがとう。
Protected voidなんちゃらの処理の中の変数宣言で、privateはダメなのですかね
547デフォルトの名無しさん:2009/02/02(月) 15:53:37
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

548デフォルトの名無しさん:2009/02/02(月) 16:10:49
        ∧∧
       ヽ(・ω・)/   ズコー
      \(.\ ノ
    、ハ,,、  ̄
     ̄

       ∧∧
        ヽ(・ω・)/   ズコー
      \(.\ ノ
     、ハ,,、  ̄
     ̄
549デフォルトの名無しさん:2009/02/02(月) 16:59:36
ふらっとC#
503です。
ターゲットマシン(XP)でのFormアプリケーションのデバッグ方法、助言お願いします。
いまのところMessageBoxでいくつか変数を表示しようとしているます。
問題はMessageBoxさえ表示されないことで、ということはその前でエラーが起きていることはわかるのです。
かといって頭からぜんぶMessageBoxというのもなかなか途方にくれる話ですし。
デバッグのときに表示されるような情報を、一括してテキストファイルに落とせれば楽だと思うのです。
そういう方法ってあるんですか?
550デフォルトの名無しさん:2009/02/02(月) 17:04:05
551デフォルトの名無しさん:2009/02/02(月) 18:07:36
>>539
なるほど
その方向で進めていくことにしました。

確かにマネージド同士なら楽なんですが・・・
そうでないものは初めてでちょっと色々 orz
552デフォルトの名無しさん:2009/02/02(月) 18:26:36
1行目に#define DEBUGと追加して、Debugフォルダにexeファイルができました。
ありがとうございました。
がっ。
エラー情報やいずこ!?
553デフォルトの名無しさん:2009/02/02(月) 18:51:48
>>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>
554デフォルトの名無しさん:2009/02/02(月) 19:19:38
>>522
ワロタ
555デフォルトの名無しさん:2009/02/02(月) 20:10:05
>>535
今日知ったんなら今日の話だよなw
>>534の負けww
556デフォルトの名無しさん:2009/02/02(月) 20:12:09
>>552
それじゃDEBUGの意味がないだろ
TraceクラスとTRACE使え
557デフォルトの名無しさん:2009/02/02(月) 21:59:35
C#ってクラス名に漢字使えたよね?
558デフォルトの名無しさん:2009/02/02(月) 22:01:47
うん
559デフォルトの名無しさん:2009/02/02(月) 23:11:00
>>557
やめろ!やめるんだ!
そ、そんなソースは認めないぞ

#define ノシ throw
calss 三旦 : System.Exception {..}

if ( this.Value < this.Min ) ノシ 三旦;
560デフォルトの名無しさん:2009/02/02(月) 23:14:17
#define がないし。
561デフォルトの名無しさん:2009/02/02(月) 23:14:37
>>559
C# で define は値を定義できないぞ
562デフォルトの名無しさん:2009/02/02(月) 23:19:06
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
 }
}
563デフォルトの名無しさん:2009/02/02(月) 23:19:48
カルス・・・

564デフォルトの名無しさん:2009/02/02(月) 23:29:26
インターフェイスならできるけどクラスではできません
565デフォルトの名無しさん:2009/02/03(火) 01:23:41
WindowsXP C# 2008で質問です。
ビューアーを作り、それをデフォルト起動アプリケーションにしました。

string[] args = Environment.GetCommandLineArgs();
if (args.Length != 1) {Title = System.IO.Path.GetFileName(args[1]);}

で、ファイル名をタイトルにしてウィンドウに表示しようとしています。
exeファイルにデータファイルのアイコンをドラッグするとファイル名を取得できますが、データファイルを単独でダブルクリック起動する場合には取得できません。
デフォルト起動の場合、データファイルのファイル名は、exeファイルにどのように渡されていて、exeからはどのように取得できるのですか?
ご教示願います。
566デフォルトの名無しさん:2009/02/03(火) 01:44:01
>>553
ありがとうございます。
app.configがなかったので、新規項目の追加で構成ファイルを追加してApp.configを作り、そこに追加しました!
で、早速exeを作成し、相変わらずエラーが出ていますが、ログは記述されず…。
ログファイルも作成されていません。
>>556
ありがとうございます。
Traceクラスについて勉強してみます。
いま
http://www.atmarkit.co.jp/fdotnet/dotnettips/757debugview/debugview.html
を読んでます。
567Charles Petzold:2009/02/03(火) 02:36:35
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.
568デフォルトの名無しさん:2009/02/03(火) 02:51:16
Feel free to write in English.
569デフォルトの名無しさん:2009/02/03(火) 02:57:20
petzoldにはお世話になったなあ
でも今見ると古いかもなあ
570デフォルトの名無しさん:2009/02/03(火) 06:07:37
>>565
レジストリにどういう風に登録されてるかによる。

普通、「アプリのパス "%1"」 なんで、そのまま取れるけどね。
571デフォルトの名無しさん:2009/02/03(火) 07:55:20
オンラインヘルプを自PCに持ってくるにはどうすればいいのでしょうか?
いちいちネットに繋ぎに行くんでウザいのですが…
572デフォルトの名無しさん:2009/02/03(火) 08:03:55
ローカルで見られるヘルプがあるよ。日本語版と英語版
探せば見つかるだろうけど親切な人が教えてくれるかも
573デフォルトの名無しさん:2009/02/03(火) 09:34:12
VisualStudioをインストールすればインストール可能
Expressだとサブセット版だけども。
あとはWindowsSDKインスコ。
574デフォルトの名無しさん:2009/02/03(火) 10:09:43
>>571
ヘルプを既にインストールしているならヘルプ(Micorosoft Document Explorer)の
「ツール」->「オプション」->「ヘルプ」->「オンライン」で「オンラインではなくローカルのみで実行」にチェック。

インストールしてなくて、必要最小限で良いなら >>573

全部入れたいならコレ。2GBちょっとあるけどね。
MSDN Library for Visual Studio 2008 SP1 (2008年12月更新版)
http://www.microsoft.com/downloads/details.aspx?FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373&DisplayLang=ja
ISO イメージなのでインストールするには、仮想ドライブが使えるソフト(CloneDrive や DAEMON とか)も必要。
575デフォルトの名無しさん:2009/02/03(火) 11:16:28
http://msdn.microsoft.com/ja-jp/library/afadtey7(VS.80).aspx
PropertyInfo.GetAccessors()を呼び出すと、
getアクセサ、setアクセサ、およびその他のアクセサが返ってくるとありますが
その他のアクセサってなんですかね
576デフォルトの名無しさん:2009/02/03(火) 11:20:19
初めてプログラム言語に触れたのですが
intとかparseとかその他もろもろ、何て読むのですか?
読み方サイトみたいのってありますか?
読めなくても構わないんですがなんとなく喉の骨が取れない感じです。
577デフォルトの名無しさん:2009/02/03(火) 11:24:54
578576:2009/02/03(火) 11:31:04
>>577
みんなそんなもんなんですね
適当に脳内処理しときます。


今仕事が開店休業状態で暇つぶしにC#ってものを勉強始めたけど
突き詰めたらどんな高度なwindowsアプリでも作れるようになれるのですか?
たとえばosとかofficeとかw
このままだと会社が倒産しそうだから、C#勉強してそっちに働き口みつかるかなぁ・・・
579デフォルトの名無しさん:2009/02/03(火) 11:33:04
OSの上で動作するフレームワーク(.NETとかMonoとか)のさらに上で動作してるから
フレームワークより下にはいけない
580576:2009/02/03(火) 11:37:12
>>579
たしかにos-.net上で動くって事ですもんね

具体的に言うと、リッピングソフトとかofficeアプリまでなら作れますか?
581デフォルトの名無しさん:2009/02/03(火) 11:42:16
それはそれは途方も無く努力すれば
582デフォルトの名無しさん:2009/02/03(火) 11:57:21
C#も極めれば空も飛べるよ!

              ハ_ハ
            ('(゚∀゚∩ 飛べるよ!
             ヽ  〈
              ヽヽ_)

583デフォルトの名無しさん:2009/02/03(火) 13:18:52
そうだね・・・ねてなくて浮いてる気分だ
584デフォルトの名無しさん:2009/02/03(火) 13:23:03
寝ろよ
寝不足は生産性も減退させる
585デフォルトの名無しさん:2009/02/03(火) 13:25:25
うまく動いてたイベント処理をもうちょっと効率良くしようと思って手を加えて
一週間くらいほったらかしといたら、うまく動いてたときのコード忘れてしまた orz
全く思い出せない
586デフォルトの名無しさん:2009/02/03(火) 13:27:28
そうかそうか
587デフォルトの名無しさん:2009/02/03(火) 13:38:59
svn
588デフォルトの名無しさん:2009/02/03(火) 16:50:25
大規模な改良前にはコード保存しとけば??
おかげさまで「〜〜実装前.txt」が10個以上あるが。
589デフォルトの名無しさん:2009/02/03(火) 17:01:44
>>575
おそらく、VB6/COMで、setアクセサ相当が値のLetと参照のSetに分かれていた名残。
Letが.NETのsetアクセサで、Setがその他に対応すると思う。
590デフォルトの名無しさん:2009/02/03(火) 17:16:13
>>585>>588
バージョン管理システム使って履歴残せ。
591デフォルトの名無しさん:2009/02/03(火) 17:16:35
>>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 が入ってるのに

わけわかめ
593592:2009/02/03(火) 17:31:47
SplitterPanelにPanelを入れ子にしてた orz
594デフォルトの名無しさん:2009/02/03(火) 17:32:54
>>592
Panel1.Contols に Panel1 が入ってるわけねーだろ。
595デフォルトの名無しさん:2009/02/03(火) 17:38:18
>>593
あわてんぼさんめ
596デフォルトの名無しさん:2009/02/03(火) 19:20:41
さぼてんあわめん
597デフォルトの名無しさん:2009/02/03(火) 19:30:32
わあさんぼんめて
598風来坊:2009/02/03(火) 20:48:10
質問です。
C#にて 音声録音の機能を実装したいと思っています。
.NET 1.1,2.0,3.5は問いません。

デフォに設定されている出力(再生)デバイスの音声信号を
wav(wavにこだわる必要は無い)ファイルとして保存したいのですが、
どうすれば実現できますか?
どなたかご教授ください。お願いします。
599デフォルトの名無しさん:2009/02/03(火) 21:22:40
ぐぐる
600デフォルトの名無しさん:2009/02/03(火) 21:35:08
遮断機をくぐる
601デフォルトの名無しさん:2009/02/03(火) 21:36:45
首をくくる
602デフォルトの名無しさん:2009/02/03(火) 21:42:39
せっかくC#でAPI直接もなんだし、MCIかMDXあたりでどうかな。
603デフォルトの名無しさん:2009/02/03(火) 21:46:32
riffを自分で書くなんてどうかしら
604デフォルトの名無しさん:2009/02/03(火) 21:50:21
DirectShow.NET
605デフォルトの名無しさん:2009/02/03(火) 21:55:42
DirecxShowは推奨されないらしいですよ
606デフォルトの名無しさん:2009/02/03(火) 22:03:05
このスレって質問者じゃなくて答える側が初心者っていうオチ?
607デフォルトの名無しさん:2009/02/03(火) 22:06:26
○×したいんだけど、どうすれば実現できますか?

(´・ω・`)しらんがな

こうやったんだけど上手くいきません。どうしたらいいですか?

(´・ω・`)オジサンが教えたるがな
608デフォルトの名無しさん:2009/02/03(火) 22:21:14
Vista + Visual Studio 2008 Express Edition + C# を使っています。
Debugモードでは問題なく動くのにReleaseモードではフリーズする場合、
どういった原因が考えられますでしょうか?
大量の計算を連続してさせているプログラムで、フリーズする箇所は毎回違うようです。
調べようにも取っ掛かりすらなくて困っています。
よろしくお願いします。
609デフォルトの名無しさん:2009/02/03(火) 22:21:52
CPU休めてますか
610デフォルトの名無しさん:2009/02/03(火) 22:26:04
>>609
100万行くらいのtxtファイルを読んできて、数分間延々と処理させてます。
CPUに負荷がかかりすぎるのが問題なんですかね?
611デフォルトの名無しさん:2009/02/03(火) 22:28:31
ぱそこんもたまにはやすみたがっているんだよ。
612608:2009/02/03(火) 22:36:59
タスクマネージャで眺めてたら、
処理開始から1〜2分はCPU使用率50%前後で、メモリ使用量が徐々に増加。
メモリが180MBくらいに達したところでCPU使用率が0%になってフリーズしました。
メモリ食いすぎってことでしょうか?
debugモードでは動くのに。。。
613デフォルトの名無しさん:2009/02/03(火) 22:38:25
デッドロックしてない?
614デフォルトの名無しさん:2009/02/03(火) 22:38:37
そのデバッグモードってデバッグビルド?
リリースビルドでデバッグでも同じ?
615デフォルトの名無しさん:2009/02/03(火) 22:44:20
>>603
Thunder Forceの戦闘AI?
616571:2009/02/03(火) 22:45:47
>>572-574
ありがとうございます。
VMwareでLive版のLinux立ち上げてISOイメージをマウントしてから、
ローカルディスクに全コピーしてみます。
617608:2009/02/03(火) 23:00:46
>>613
マルチスレッド処理なので可能性はあるかもしれません。
ただ、デバッグで起こらないのでどうやって調べればいいのか。。。

>>614
>リリースビルドでデバッグ なんてことができるんですね。
試してみましたが、問題なく動きました。
\Releaseフォルダ内のexeを直接起動したときだけフリーズします。
618デフォルトの名無しさん:2009/02/03(火) 23:03:37
一般的には排他処理のところっしょ
619デフォルトの名無しさん:2009/02/04(水) 00:49:06
排他制御に不備があって、微妙なタイミングの差で動いたり動かなかったりするのかね。
いずれにせよ質の悪いバグだ。詳しく設計がわからないとアドバイスのしようがない。
620デフォルトの名無しさん:2009/02/04(水) 01:32:14
>>570
レジストリですか。
すこし見てみたものの、まったく手がかりがありませんでした。
情報サンクスです。
621デフォルトの名無しさん:2009/02/04(水) 02:01:40
別にレジストリ見なくてもわかる

エクスプローラのメニューからツール→フォルダ オプションを選択
ファイルの種類タブで、データファイルの拡張子がどう登録されているか確認
622デフォルトの名無しさん:2009/02/04(水) 04:07:18
コンボボックスで質問があります。
コンボボックスに二つの項目があり、項目1を選ぶと変数+変数、
項目2を選ぶと変数-変数といったような処理をしたいのですが
if文でどのようにコンボボックスを設定すればそのような処理ができるのでしょうか?
623デフォルトの名無しさん:2009/02/04(水) 07:57:00
はい
624デフォルトの名無しさん:2009/02/04(水) 08:20:10
>>622
ComboBox.SelectedIndexChangedでSelectedIndex見て判断しろ
625デフォルトの名無しさん:2009/02/04(水) 10:06:23
ComboBoxニdelegate突ッ込ンデ自前デ描画シナサイ
626デフォルトの名無しさん:2009/02/04(水) 10:39:03
>>621
どうやって関連づけやったのよ?
関連づけやってるところのソース見せて
627デフォルトの名無しさん:2009/02/04(水) 10:47:57
>>626
↓でも読んでろ

ttp://dobon.net/vb/dotnet/system/associatedapp.html

どうせ実行ファイルのパスに空白が混じってるとかそういうオチだろうけど
628デフォルトの名無しさん:2009/02/04(水) 11:37:58
C#2005で開発したアプリをVistaで動かしてみたところ、
パネルに配置したボタン色がパネルの色に同化してしまいました。
xpでは正常に表示されます
対処方法などあれば教えてください。
629デフォルトの名無しさん:2009/02/04(水) 12:09:00
>>627
おマイには聞いてないってw
レジストリを触ったこと無い人がどうやって関連づけしたのかな〜っと

それに実行パスに空白があるからどうなるの?
630デフォルトの名無しさん:2009/02/04(水) 12:14:36
普通にファイルを開くプログラムの選択で関連付けしたんで無いの。
631デフォルトの名無しさん:2009/02/04(水) 14:02:29
>>629
なんで粘着してんの?親切に教えてるだけじゃない
そもそもの質問者も、プログラムで関連付けをしたいなんて書いてないし
回答者も、レジストリを触ったこと無いとも書いてない
実行パスの空白はCUIのOS触ったことあるなら解るだろ
632デフォルトの名無しさん:2009/02/04(水) 16:05:30
felicaのシステムを作っているのですが、
felicap = felica_polling(pasorip, (ushort)systemcode, 0, 0);
この処理でfelicapに値が入るのですが、この処理の意味が根本的にわかりません。
ここではどういった処理が行われているのでしょうか?
633デフォルトの名無しさん:2009/02/04(水) 16:09:18
FeliCa でソフトを作りまくるスレ 2ブロック目
http://pc11.2ch.net/test/read.cgi/tech/1210717455/
634デフォルトの名無しさん:2009/02/04(水) 16:18:21
felicaのシステムを作っているのですが、
felicap = felica_polling(pasorip, (ushort)systemcode, 0, 0);
この処理でfelicapに値が入るのですが、この処理の意味が根本的にわかりません。
ここではどういった処理が行われているのでしょうか?

連続で同じカードの読み取りができなくて困っています。
635デフォルトの名無しさん:2009/02/04(水) 16:19:31
>>633
すみません。
該当スレに書き込むつもりが同じところに書き込んでしまいました。
636デフォルトの名無しさん:2009/02/04(水) 17:28:30
生まれて半年の者です。他のクラスの変数に関して質問です。

クラスAとBがあります。
クラスAにStack型stackがあります。
クラスBにString型stringがあります。

クラスBでクラスAをインスタンス化して、stackにstringをpushします。
そして変更されたstackをクラスAに戻して作業を進めたいのですが、
クラスAではstackは元のままになっています。

どのような問題があるのでしょうか?
637デフォルトの名無しさん:2009/02/04(水) 17:30:18
クラスAに戻すとか言われてもよく分からんのでコード貼ってくれ
638デフォルトの名無しさん:2009/02/04(水) 17:32:05
AがStackをそのまま外に晒すのはよくない(別のクラスにした意味がない)
pushするメソッドをAに定義するべき
639デフォルトの名無しさん:2009/02/04(水) 17:34:00
Stackを晒してるなら、Pushしたのが反映されてるはずだがな。
たぶんnewして渡してるとかじゃないかw
640デフォルトの名無しさん:2009/02/04(水) 17:40:32
>>637
戻すじゃなくて戻したいの意味でした。すみません。

ClassA
{
 public void ClassA()
 { }
 public Stack stack = new Stack();
 }

ClassB
{
 public String string = 〜;
 ClassA a = new ClassA()
 a.stack.push(string);
}

これだけだとクラスAでは変更できてないです。
pushしたあとにどのような作業が必要でしょうか?
641デフォルトの名無しさん:2009/02/04(水) 17:41:50
意味不明すぎる
642デフォルトの名無しさん:2009/02/04(水) 17:43:05
たぶんクラスとインスタンスの関係が分かってないんじゃない?
生まれて半年だし
643デフォルトの名無しさん:2009/02/04(水) 17:43:28
staticだな〜説明は誰かに任す
644デフォルトの名無しさん:2009/02/04(水) 17:44:38
そこでstaticにしろと言うのは教育的じゃないと思う
645デフォルトの名無しさん:2009/02/04(水) 17:45:02
もうちょっと勉強進めればわかるよ
staticにすればいいのかもしれないけど実際は絶対やっちゃダメなパターン
646デフォルトの名無しさん:2009/02/04(水) 17:47:02
つってもなあ

「○○したいんだ」

って言ってる奴に勉強しろっても回答になってない気がするぜー
647デフォルトの名無しさん:2009/02/04(水) 17:47:08
ClassB
{
 public String string = 〜;
 ClassA a = new ClassA()
 //↓これメソッド内だよね?
 a.stack.push(string);
}

↑でインスタンス化された a の stack にはちゃんとPushされている。
ただそのせっかく作ったClassAのインスタンスaは参照されないまま消えてしまっただけ
648デフォルトの名無しさん:2009/02/04(水) 18:10:59
C#で質問があります。
timeが11:00と入力されなかった場合(たとえば1100と入力された場合)、コロンを追加しようとしています。
string time;
if (!(time.Contains(":"))) {
time = time[0] + time[1] + ":" + time[2] + time[3];
}
で、この値を見ると、11:00ではなくて98:00になっちゃうのですが、なんでこんな数字になっちゃうんでしょう。
原因と改良方法をご示唆いただけないでしょうか。
649636の者です。:2009/02/04(水) 18:15:02
windowsフォームのボタンを押したときの動作をプログラムで書きたいときは、
ボタンをダブルクリックすれば、プログラムを書く場所を自動で作ってくれますが、
クラスBにあるボタンを押したときの動作を、クラスAに書くことは可能でしょうか?
650デフォルトの名無しさん:2009/02/04(水) 18:17:59
>>648
char同士の文字コードの加算になってるから
time = '1' + '1';
でやってみるとわかるよ
time = time[0].ToString() + time[1].ToString() + ":" + time[2].ToString() + time[3].ToString();
にすればいい

>>649
+=を使ったイベントハンドラの登録方法が理解できていればできる
651デフォルトの名無しさん:2009/02/04(水) 18:23:58
> time[0].ToString() + time[1].ToString() + ":" + time[2].ToString() + time[3].ToString();
くどすぎる。
StringBuilder つかおうぜ。
652デフォルトの名無しさん:2009/02/04(水) 18:27:28
じゃあString.Format("{0}{1}:{2}{3}", time[0], time[1], time[2], time[3])で
653デフォルトの名無しさん:2009/02/04(水) 18:27:30
>>647
あ〜昔同じ失敗したな〜
654デフォルトの名無しさん:2009/02/04(水) 18:27:37
>>650
早速ありがとうございました。
ToString()でできました。
655デフォルトの名無しさん:2009/02/04(水) 18:28:11
>>651
そこで、StringBuilderは使わないだろ。
time = time.Substring(0, 2) + ":" + time.SubString(2, 2);
656636の者です。:2009/02/04(水) 18:31:41
>>650
なんとなくいけそうです。

>>653
お〜友よ〜
657デフォルトの名無しさん:2009/02/04(水) 18:44:37
>>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で""に置き換えたいのですが、正規表現が上手く書けませぬ
教えてエロい人
659デフォルトの名無しさん:2009/02/04(水) 19:00:35
660デフォルトの名無しさん:2009/02/04(水) 19:02:22
あーd>>659 ここで聞きたかったぜっ♪
661デフォルトの名無しさん:2009/02/04(水) 21:49:44
>>645
他クラスからアクセスする変数には手当たり次第static使ってるんだが…

何を勉強すればいいんですか?
662デフォルトの名無しさん:2009/02/04(水) 21:52:53
構造化プログラミング
663デフォルトの名無しさん:2009/02/04(水) 21:55:56
オブジェクト指向プログラミング
664デフォルトの名無しさん:2009/02/04(水) 21:57:38
staticフィールドはダメだがstaticメソッドはいいぞ
privateなstaticメソッドが最高だ
665デフォルトの名無しさん:2009/02/04(水) 21:58:06
構造化プログラミングを理解してない奴が、オブジェクト指向を学んでも無駄。

構造化プログラミングを学んだら、中規模以上のプログラムをたくさん書く。
それからでもオブジェクト指向は遅くないよ。
666デフォルトの名無しさん:2009/02/04(水) 21:59:25
static メンバ変数なんて
ただ1個しか存在しないもんな。
2つ作りてええええええええ!!!! と思っても
1つしか存在できない。
不便過ぎ。
667デフォルトの名無しさん:2009/02/04(水) 22:02:02
C言語等の非OOA出身者はstaticをメモ帳や定数保管庫程度に考えてない
668デフォルトの名無しさん:2009/02/04(水) 22:02:42
しか が抜けた
669デフォルトの名無しさん:2009/02/04(水) 22:02:49
オブジェクト指向も関数型プログラミングも
深いとこに行くと実用的じゃない宗教じみたものがうじゃうじゃ出てくるから
そこに行ってしまわないように気をつけないと
670デフォルトの名無しさん:2009/02/04(水) 22:12:08
むしろいきなりOOPでいいと思うよ。
>>665みたいな意見はありがちだけど、構造化プログラミングなんて
中身のないスカスカな話で馬鹿でなければ「畳の上の水泳」で十分だと思う。

っていうか、俺も含めてたかがOOP理解したぐらいで鬼の首とったように語るのは
とても恥ずかしいよなw
671デフォルトの名無しさん:2009/02/04(水) 22:16:29
物事をオブジェクトに切り分けるというのは大成功した考え方だと思うけど
継承は失敗だしインターフェースの実装もそんなに上手くない感じだと思う
そういった抽象化はクロージャにした方がシンプルで分かりやすい
672デフォルトの名無しさん:2009/02/04(水) 22:19:30
>>636
> 生まれて半年の者です。

おいおい、生後半年でプログラミングかよ。
たいしたもんだな!
673デフォルトの名無しさん:2009/02/04(水) 22:21:38
どんな天才だよw
674デフォルトの名無しさん:2009/02/04(水) 22:24:22
>>671
使いこなせない人にとって上手くないだけなんだろ
675デフォルトの名無しさん:2009/02/04(水) 22:26:16
母国語より先にプログラム言語を覚えたんだな
いったいどんな子に育つやら
676デフォルトの名無しさん:2009/02/04(水) 22:28:11
今さらオブジェクト指向だデザパタだインターフェースだってやるのは
正直違うかなと思うよ
今のC#にはもっとよい道具があるから
ただオブジェクト指向の基本的なところは抑えておかないとまずいけど
677デフォルトの名無しさん:2009/02/04(水) 22:29:44
だまれ若造
678デフォルトの名無しさん:2009/02/04(水) 22:31:19
お年寄りは静かにしてください
679デフォルトの名無しさん:2009/02/04(水) 22:32:17
>>676
それはC#が、最近になってより初心者向けの機能を実装をしてるってこと?
680デフォルトの名無しさん:2009/02/04(水) 22:33:25
>>676
>今のC#にはもっとよい道具があるから
ないってw
知ったようなこというなよ。

クラスベースのOOPが万能じゃないのは確かだけど、現時点でそのオルタナティブが
C#に限らず発案されているとは思えん。
681デフォルトの名無しさん:2009/02/04(水) 22:33:31
>>679
クロージャはインターフェースよりも初心者にとって使いやすいと思うよ
直観的だし
682デフォルトの名無しさん:2009/02/04(水) 22:35:26
なんでクロージャーとインターフェイスを対置するんだ?

クロージャーとインターフェイスって「代替財」か?
わけがわからんよ。
683デフォルトの名無しさん:2009/02/04(水) 22:37:16
覚え方なんて人それぞれだし。

自分が通ってきた道についてしか語れないだろ。
684デフォルトの名無しさん:2009/02/04(水) 22:38:00
>>680
クロージャは実際には一つのメソッドを持ったインターフェースを
実装したオブジェクトを簡易に作り出す機能だけど
それさえあればオブジェクト指向の抽象化は全部出来る
オブジェクト指向の継承にまつわるややこしいところはすっ飛ばして
そっちに行くのが今は正解なんじゃないかねえ
685デフォルトの名無しさん:2009/02/04(水) 22:39:36
また変な主義者が来ましたねw
686デフォルトの名無しさん:2009/02/04(水) 22:44:52
>>684
それって、昔の1ファンクション1機能の構造化プログラミングと同じじゃないの?
静的なメソッドとは何がちがうのけ?
687デフォルトの名無しさん:2009/02/04(水) 22:53:45
相談があります。
C#でプログラムを作り始めて半年くらいになります。
ようやく身の回りのソフトは、だいぶ自作できるようになってきました。
ところで、それをリリースしようと思うと、プログラムのなかに直接書いてあるパスワードなどを設定ファイルに移動したり、自分用のディレクトリ構造にあわせて作った部分を汎用にする必要が出てきます。
それはまあやる気になればできそうなのですが、設定不要のかんたんなソフトを知人10人ほどにテストしてもらったところ、だれひとりとして.NETを入れていないため、動作しなかった、ということがわかりました。
ひょっとして、.NETやC#って、すごくマイナーなんでしょうか。
このままC#をつづけた方がよいのか(けっこう使いやすくて気に入ってます)、それとも別の言語に移ったほうがよいのか。
移るとしたら、もっとメジャーな言語ってなんですか?
Webベースのプログラムとか、Ajaxとかですか?
.NETを組み込んだ状態でコンパイルするとかできないんですかね〜?
688デフォルトの名無しさん:2009/02/04(水) 22:55:38
WebでできるようなことならSiilverlightというのがある
イメージ的には「C#で書けるFlash」
ランタイムは超小さいので配布が手軽
689デフォルトの名無しさん:2009/02/04(水) 22:57:55
だからクロージャとインターフェイスは代替関係にないってw
ただ一部の機能が競合関係にあるだけ。

たぶん従来ICompareをわざわざ用意していたようなのがデリゲートでスッキリ
書けるようになった、みたいな例を見て短絡したんだろうけど。
690デフォルトの名無しさん:2009/02/04(水) 23:03:14
>>687
.netFrameworkをインストールしないって人は多いよね
vista以降は.netはインストされてるから、ある程度は問題なくなると思うけど

なんのインストもなくて利用可能なのは、VisualStudioのC++のネイティブコードか、
Delphiぐらいじゃないのかな。
691デフォルトの名無しさん:2009/02/04(水) 23:13:21
しつもんです。

クラス内のメンバの初期化はどこでしてますか?
宣言時に初期化してしまうか、コンストラクタ内で初期化するか迷ってます。

///以下抜粋
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(受信));
///抜粋以上
692デフォルトの名無しさん:2009/02/04(水) 23:18:16
>>691
基本は宣言時じゃないかな。
コンストラクタでもいいけど、コンストラクタをオーバーロードしているときには、
複数のコンストラクタで初期化しなくちゃいけなくなるから。

別のメソッドを用意して、そこで初期化してもいいけど、意味ない気がするし。
条件によるけど。
693デフォルトの名無しさん:2009/02/04(水) 23:18:50
C#, C♯, C#相談室 Part50
http://pc11.2ch.net/test/read.cgi/tech/1229661915/

埋まったけど立てられなかった。
誰か頼む。
694デフォルトの名無しさん:2009/02/04(水) 23:22:33
ホスト規制のためNGですた。
695デフォルトの名無しさん:2009/02/04(水) 23:22:51
>>693
あっちは相談室と名乗りながら、
質問の揚げ足を取って悦に浸っている常連ばかりだから嫌い
696デフォルトの名無しさん:2009/02/04(水) 23:23:14
>>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);

こうだ。
これが進化だよ。
697デフォルトの名無しさん:2009/02/04(水) 23:25:53
>>695
でも作っとかないと、そういう人らがここに常駐されたら困る
698デフォルトの名無しさん:2009/02/04(水) 23:31:25
>>691
その前になんちゅうソースだコレ。
699デフォルトの名無しさん:2009/02/04(水) 23:31:36
>>697
心配無用
既に常駐してる
700デフォルトの名無しさん:2009/02/04(水) 23:36:15
まあとりあえず立てた。
C#, C♯, C#相談室 Part51
http://pc11.2ch.net/test/read.cgi/tech/1233757615/l50
701デフォルトの名無しさん:2009/02/04(水) 23:36:42
>>696
その例だと従来の方法でもStaticなメソッドを使えば
int x = Class.Method(a, b);
で代用がきくから同じことだと思うんだけど。何が違うの?
702デフォルトの名無しさん:2009/02/04(水) 23:37:33
読解性
703デフォルトの名無しさん:2009/02/04(水) 23:40:36
>>690
VC++ も今は CRT が DLL 推奨だから配るならインストーラ作るべき
なんやけどな。msm があるしサイズも小さいので格段に楽だから
.NET と比べるレベルじゃないけど。
704デフォルトの名無しさん:2009/02/04(水) 23:42:54
自分の場合は固定長バッファ持たせる時とか、ソース直書きのデータを持たせる時以外は宣言の所に初期化コードを書かないようにしてる。
基本的にはできるだけコンストラクタに書いたほうが、読みやすいコードになるよ。
#regionと組み合わせるとなお良い。

指すものがコンパイル時点で決まっていて、利用者側のコードに左右されない要素(リテラル的なもの)は宣言と初期化を一緒にしてもいいと思う
上の固定長バッファはあてはまらないけど…
705デフォルトの名無しさん:2009/02/04(水) 23:44:00
>>687
「.net Frameworksインストールしてね」で終わりじゃないか?
むしろ、Windows Updateで配布されてるんじゃないのか?.netぐらい
706デフォルトの名無しさん:2009/02/04(水) 23:45:31
>>700
707デフォルトの名無しさん:2009/02/04(水) 23:47:58
>>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にしたいものを自由に選べる
709デフォルトの名無しさん:2009/02/04(水) 23:52:03
.NET Frameworkは再頒布可能だからその自作ソフトとやらに含めて配布すればいいんだよ。

http://msdn.microsoft.com/ja-jp/library/xak0tsbd.aspx

ちなみにWindows Server 2003、Windows Vista、Windows 7にはリリース時点で最新の.NET Frameworkが入っている。(より新しいバージョンが出て、それが必要な場合は更に入れる必要がある)
710デフォルトの名無しさん:2009/02/04(水) 23:53:57
はやくXPが駆逐されればいいんだがなあ
711デフォルトの名無しさん:2009/02/04(水) 23:57:24
デザインパターンは関数型っぽいことを無理やり手続き型OOPLでやるための工夫が主だから
かなり簡単に実装できるよな
712デフォルトの名無しさん:2009/02/04(水) 23:58:26
>>708
それみると、君の主張するところの直感的でもないし、
初心者にもわかりにくいと思うよ
713デフォルトの名無しさん:2009/02/05(木) 00:02:11
>>712
じゃあオブジェクト指向や構造化でもっと直感的に、
初心者に分かりやすく書ける?
714デフォルトの名無しさん:2009/02/05(木) 00:04:46
スレ違い
よそで存分に議論してくれ
715デフォルトの名無しさん:2009/02/05(木) 00:05:14
初心者ではないが、何が書いてあるかさっぱりだw
716デフォルトの名無しさん:2009/02/05(木) 00:07:06
人の揚げ足取りと議論厨は相談スレにお引き取りください
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行目で書き換えられてしまいます。
718デフォルトの名無しさん:2009/02/05(木) 00:09:03
>>708 じゃねーけど知りたいんならレキシカルクロージャとかで
ぐぐった方がいいと思うよ。

>>708
2ch で説明するのはさすがに難しいと思う
719デフォルトの名無しさん:2009/02/05(木) 00:09:15
4:  int[] test2 = test;
のまちがいです
720デフォルトの名無しさん:2009/02/05(木) 00:09:37
配列の要素がreadonlyになるわけではありません
721デフォルトの名無しさん:2009/02/05(木) 00:14:31
>>718
2chで説明するのが難しいことが、初心者向けなの?
722デフォルトの名無しさん:2009/02/05(木) 00:15:02
>>718
ググっても関数型言語ユーザーの宗教じみた言論に圧倒されるばかりだと思う
723デフォルトの名無しさん:2009/02/05(木) 00:18:22
>>701
匿名関数は生成したスコープの変数をそのまま取り込める(環境を渡してるって言うんだっけ?)
副産物的な物だけど、遅延評価的な振る舞いも持ち合わせてる
724デフォルトの名無しさん:2009/02/05(木) 00:19:56
この辺の議論からもう13年か。
ttp://java-house.jp/ml/archive/j-h-b/001955.html
ttp://www.google.co.jp/search?hl=ja&q=%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3+interface+site%3Ajava-house.jp

>>718
むしろ近年のクロージャブームはLLの方が先に火をつけた気もするけどね。
JavaScriptの無名関数とかやっぱり初心者泣かせなのかねぇ?
725723:2009/02/05(木) 00:21:07
ごめんさっきの >>718 あてじゃなくて >>722
726デフォルトの名無しさん:2009/02/05(木) 00:31:46
何々、これでいいじゃん?

public static class Class
{
 static int i;
 public static int Method() { return i++; }
}
727デフォルトの名無しさん:2009/02/05(木) 00:37:50
>>726
でもさ、C#でクラスそのものを引数に渡すって面倒事が多いでしょ。
だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。
728デフォルトの名無しさん:2009/02/05(木) 00:41:24
クラスそのものって引数に渡せるの?
729デフォルトの名無しさん:2009/02/05(木) 00:41:29
>>727
staticだからclassそのものを渡す必要なんてないよ
どこでも自由に

this.label1.Text = Class.Method().ToString();

でいいんじゃない?
730デフォルトの名無しさん:2009/02/05(木) 00:43:56
>>728
private void button1_Click(object sender, EventArgs e)
のobjectはクラスじゃん?
731デフォルトの名無しさん:2009/02/05(木) 00:48:04
objectはインスタンスだろ
732デフォルトの名無しさん:2009/02/05(木) 00:48:56
ocjectはクラス名だ
733デフォルトの名無しさん:2009/02/05(木) 00:49:27
object
734デフォルトの名無しさん:2009/02/05(木) 00:50:41
この場合は話の流れからインスタンスってことじゃねーの?
735デフォルトの名無しさん:2009/02/05(木) 00:51:26
public class Class
{
 int i;
 public int Method() { return i++; }
}

これの方がいいだろ
たくさん作れるし
736デフォルトの名無しさん:2009/02/05(木) 00:54:51
>>734
この流れって話の本筋なわけ?
737デフォルトの名無しさん:2009/02/05(木) 00:56:27
>>729
それだと元のコードの引数を変えれば動作を変えられるという点が失われているじゃないか。
738デフォルトの名無しさん:2009/02/05(木) 01:34:39
>>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デフォルトの名無しさん:2009/02/05(木) 01:36:47
>>738
いや、>>708とか足し算が掛け算になったり、辞書引いたりするような変化なんだけど。
740デフォルトの名無しさん:2009/02/05(木) 01:45:46
>>739
つまり

>だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。

というのは

>708とか足し算が掛け算になったり、辞書引いたりするような変化なんだけど。

と同義ということ?
741デフォルトの名無しさん:2009/02/05(木) 01:58:26
C#でCreateToolhelp32Snapshot関数を使いたいのですが、どう書けばいいのか分かりません。
.NET Frameworkに似たようなクラスライブラリはありませんか?
742デフォルトの名無しさん:2009/02/05(木) 02:41:42
743デフォルトの名無しさん:2009/02/05(木) 02:43:11
744デフォルトの名無しさん:2009/02/05(木) 03:24:45
>>740
いや、同義というより1つの具体例と言うべきかな。
>>696みたいに別の場合だってある。
745デフォルトの名無しさん:2009/02/05(木) 04:17:38
>>732
objectはキーワードだ
746デフォルトの名無しさん:2009/02/05(木) 06:18:49
C#でアルファベットをfor文のループにかけてAからZまでを表示したいのですが、うまくいきません。
どのようにすればfor文でアルファベットを数値のようにAからZを表示する事が出来るのでしょうか?
747デフォルトの名無しさん:2009/02/05(木) 06:20:05
>>746
一番分かりやすいのは配列にすればいいと思うよ
748デフォルトの名無しさん:2009/02/05(木) 06:22:37
for(int i=0;i<26;i++)
Console.WriteLine((char)('A'+i));
749デフォルトの名無しさん:2009/02/05(木) 06:47:26
for(char c = 'A'; c <= 'Z'; c++) Console.WriteLine(c);
750デフォルトの名無しさん:2009/02/05(木) 09:26:15
>>740

>>739
> つまり

> >だからデリゲートでもインタフェースでもインスタンスを生成して引数に渡していたのに。

> というのは

> >708とか足し算が掛け算になったり、辞書引いたりするような変化なんだけど。

> と同義ということ?
751デフォルトの名無しさん:2009/02/05(木) 09:31:27
>>740
インスタンスを作ることでコンテキストの別な関数オブジェクトができる(イベント処理の時にstaticだとマズいだろう)
値を変えるのと振る舞いを変えるのとでは大違いだし…

デリゲート(委譲)はその名の通り、実行するタイミングを相手に委ねてる
渡すことを意図しているのは値(狭義の)ではなく動作
752デフォルトの名無しさん:2009/02/05(木) 14:00:29
Form1からForm2をShowDialogした場合、
Formが描画される際に画面の上から順に
貼り付けてあるコントロールが表示される感じで、
Closeする場合も同様にもっさり感があるのだが、回避する方法はある?
ちなみにForm2がLoadされるとDataGridViewにMDBから
データを読込んで表示させているのだけど。
753デフォルトの名無しさん:2009/02/05(木) 14:15:24
それはビルドした実行ファイル?デバッグ?
754デフォルトの名無しさん:2009/02/05(木) 14:17:26
>>753
デバックでも実行ファイルでも描画速度にあまり変化がない感じ・・・
755デフォルトの名無しさん:2009/02/05(木) 14:20:02
実行環境は?
756デフォルトの名無しさん:2009/02/05(木) 14:20:35
>>752
描画を手動でやる

↓ソース開始↓

[コントロール名].SuspendLayout()   //コントロールの描画停止

//(この間に処理を書く)

[コントロール名].ResumeLayout()  //コントロールの描画再開

↑ソース終了↑

コントロール名をthisにすればForm全体の描画を停止できる
757デフォルトの名無しさん:2009/02/05(木) 14:20:44
それはGUIの設計に問題があるね
フローレイアウトパネルにコントロール配置してFillしたりAnchorしたり
推奨されてないことやってないだろうね?
758デフォルトの名無しさん:2009/02/05(木) 14:21:41
素人発言だけどSuspendLayoutとResumeLayoutとか?
759752: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文を見直すしかない
761752:2009/02/05(木) 15:01:31
SuspendLayoutはあまり変化がなかった・・・ _| ̄|○

今は、OleDbConnection使ってMDBへ接続しているんだけど、
もっと早い方法はあるんですか?
SQL文に関しては単なるSELECT文なのでどうにもならないと思われ。。
762デフォルトの名無しさん:2009/02/05(木) 15:02:32
データのバインドを直接じゃなくBindingSourceに任せてみたらどうだろう
こういう症状はあまり経験も聞いたこともないけど
763デフォルトの名無しさん:2009/02/05(木) 15:08:40
あれ?もしかしてDataSetなし?
764752:2009/02/05(木) 15:09:40
>>762
早速試してみる!
VB6から移行してきた口なんだが、勝手が違い過ぎて戸惑いすぐる。
765デフォルトの名無しさん:2009/02/05(木) 15:14:45
DataSetはあります。
コードはこんな感じ(抜粋)
strSelectSQL(変数)へSELECT文を入れてます。

dba = new OleDbDataAdapter(strSelectSQL, dbc);
OleDbCommandBuilder builder = new OleDbCommandBuilder(dba);
dba.Fill(dtset);
dataGridView1.DataSource = dtset.Tables[0];
766752:2009/02/05(木) 15:15:47
>>765 
名前入れ忘れたが、752です。
767デフォルトの名無しさん:2009/02/05(木) 15:18:28
CommandBuilderからdatasetまで全部動的か
768752: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;

教えて君で非常に申し訳なかったです。
769760: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"];  //インデックス値でもいい

↑ソース終了↑

いろいろ勘違いしてたらごめんね
反省はしないけど
770752:2009/02/05(木) 15:44:25
>>769
ソースまで書いてもらって、しかもコメント付で!!
ほんとに親切にありがとう。
素直にうれしす。
771636の者です。:2009/02/05(木) 16:40:08
コンストラクタについての質問です。
クラスが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を呼び出すときはどのように呼び出したら良いでしょうか?
772デフォルトの名無しさん:2009/02/05(木) 16:42:45
こっちが聞きたい
ClassAとClassCは何が違うんだ
773636の者です。:2009/02/05(木) 16:47:41
>>772
クラスAのwindowフォームからクラスBのwindowフォームを呼び出すんですが、
そのクラスBのフォームの選択欄を別のクラスCで使いたいのです。
774デフォルトの名無しさん:2009/02/05(木) 16:49:37
それがどうした
>>772の答えになってないだろ
775デフォルトの名無しさん:2009/02/05(木) 16:51:35
だったら
class A()
{
public B b;
C c;
public A(){b=〜;c=C(this)}
}

public class C()
{ public C(A a){} }
とかじゃだめ?
776デフォルトの名無しさん:2009/02/05(木) 16:52:32
>>771
逆に聞く。
ClaaAからClassBを呼んだときと同じように、ClassCからClassBを呼ぶとどうなったんだ?
777636の者です。:2009/02/05(木) 16:59:15
>>776
コンパイルエラーはでないのですが、
クラスCでは、クラスBの変数を呼び出しても未定義となってしまいます。
778デフォルトの名無しさん:2009/02/05(木) 17:02:16
いいから失敗したコードを晒せ
779デフォルトの名無しさん:2009/02/05(木) 17:03:42
>>777
確認だが、同一form(B)の情報をAとCで共有したいってことでいいの?
だったら両方でnewしてるから
今のコードだったら、AとCがそれぞれ別のform(B1,B2みたいな)を持ってることになる。

違うなら、そもそもやりたいことが分からん。
780636の者です。:2009/02/05(木) 17:13:57
>>779
クラスAで入力したテキストの個数によってクラスBのコンストラクタをShow()を使って
1つ呼び出すだけですが、クラスBではリストボックスなどをSelectedItemで選んで、
その選んだ項をクラスCで使いたいのですが、クラスCでクラスBの変数を使いたいときに、
クラスBのインスタンス化を行うときに、どのコンストラクタを選択すればよいのかが分かりません。
781デフォルトの名無しさん:2009/02/05(木) 17:25:00
禅問答みたいw
782デフォルトの名無しさん:2009/02/05(木) 17:33:58
たぶんVB脳、それも極上のやつなんだと思う
783デフォルトの名無しさん:2009/02/05(木) 17:47:52
小文字は大文字クラスのインスタンスだとする。

(1)
a → b1
c → b2

(2)
a → b ← c

どっちなんだ
ちなみに(1)はフォームが2つできる。そしてb1とb2は別物だからリストボックスなんかの情報は共有できない。
俺には(2)を実現したいのに(1)のコードを書いちゃってるように見えるんだが・・・
784デフォルトの名無しさん:2009/02/05(木) 18:16:59
なんか、他のクラスを呼び出すときはNewしなきゃいかんという間違った固定概念をお持ちなのでしょう
785デフォルトの名無しさん:2009/02/05(木) 18:32:58
×固定概念
○固定観念
786デフォルトの名無しさん:2009/02/05(木) 18:46:17
もう少し勉強しましょう、としか言いようがない。

>クラスBのインスタンス化を行うときに、どのコンストラクタを選択すればよいのかが分かりません

クラスBは自分で書いたんでしょう? だったら自分で知ってるはず。
そうじゃなくてたぶんあなたの質問は、
「データをどうやってクラス間で渡したらいいですか?」というやつではないのかい?

なんか書いても書いても返答がないので手応えのない質問者だ
787デフォルトの名無しさん:2009/02/05(木) 18:54:38
馬鹿がバレるのを恐れてるんじゃないの。
788デフォルトの名無しさん:2009/02/05(木) 18:54:43
きょうもしつもんです。

「時間計るときに、System.Environment.TickCountを良く使うけど、
24.9日たったら一周しちゃうから、なんとかならないかなー」
なんて書き込みがよくありますが、
なんでSystem.Diagnotics.Stopwatchを使わないんでしょうか?

数十日間もパフォーマンスカウンタ取得し続けたら、CPUとかハード的に
負担(たとえばやりすぎたら故障しやすいとか)があるんでしょうか?

もしそうだとしたら、なんとかSystem.Environment.TickCountを64bit化する
コーディング方法はあるんでしょうか?
789デフォルトの名無しさん:2009/02/05(木) 18:59:27
>>788
一周したかどうか、チェックすればいいんじゃないでしょうか。
790デフォルトの名無しさん:2009/02/05(木) 19:01:24
フレームワークのバージョンのせいじゃねーの
791デフォルトの名無しさん:2009/02/05(木) 19:05:27
じゃあやっぱりSystem.Diagnotics.Stopwatchでもいいんですかね。
なんかCPUのクロックからどうのこうのって言われるとCPUに悪そうなきがして。
792デフォルトの名無しさん:2009/02/05(木) 19:05:45
はあ?
793デフォルトの名無しさん:2009/02/05(木) 19:09:02
>>788
Vista/Server2008なら、API関数のGetTickCount64()が使える。
まあ、System.Environment.TickCountで間に合う程度の精度での時間計測なら、
DateTime.Now.Ticks / TimeSpan.TicksPerMillisecondでも問題ないだろうけど。
794デフォルトの名無しさん:2009/02/05(木) 19:10:39
ローカル時間使うとプロセス起動中にBIOS時計触ったら狂ってしまいますよね。
795デフォルトの名無しさん:2009/02/05(木) 19:23:05
まあ、NowだとNTPで同期入ったらずれるだろう。
Stopwatchの中身QueryPerformanceCounterだよ。
796デフォルトの名無しさん:2009/02/05(木) 19:58:46
>>788
はいこれ使ってくれ つSystem.Diagnotics.Stopwatch

.NET Framework1.0「おkおk」
.NET Framework2.0「そんな古臭いコード保障できねーからいらねーよ」
797デフォルトの名無しさん:2009/02/05(木) 20:05:51
ストップウォッチ使ってfor文の処理の時間とかをPCごとに幾らになるか計ったらダメなん?
798デフォルトの名無しさん:2009/02/05(木) 20:35:48
>>796
System.Diagnotics.Stopwatchって2.0からじゃなかったっけ
799デフォルトの名無しさん:2009/02/05(木) 20:42:39
>>742
遅くなりましたが、ありがとうございました。
800デフォルトの名無しさん:2009/02/05(木) 20:47:57
>>798
ごめん 間違えた

訂正

はいこれ使ってくれ つSystem.Diagnotics.Stopwatch

.NET Framework2.0「おkおk」
.NET Compact2.0「サポートしてませ〜ん」

申し訳」ない
801デフォルトの名無しさん:2009/02/05(木) 21:31:23
private void catalogDataGridView_CellContextMenuStripNeeded(sender,e)
{

}

DataGridViewCellEventArgs(e.RowIndex,e.ColumnIndex)で
どこがクリックされたかは取得できるのはわかるのですが
クリックした場所が選択中(SelectedRows)かどうかを調べる方法はないでしょうか?
選択中の行の上でクリックしたときだけカスタムストリップを表示したいのですが

と書いてるうちに自己解決しました。ありがとうございます。
802デフォルトの名無しさん:2009/02/05(木) 21:33:57
どういたしまして。
803デフォルトの名無しさん:2009/02/05(木) 21:36:48
System.Diagnotics.Stopwatchは1年くらいプロセス起動したまま使い続けても大丈夫なの?
804デフォルトの名無しさん:2009/02/05(木) 21:38:17
パフォーマンスカウンタなんて常に参照されてるんだから気にするなよ

タスクマネージャの情報ほぼ全部そっから取ってんだぞ
805デフォルトの名無しさん:2009/02/05(木) 21:55:05
byte[100]の中から、任意のデータの並び(0x112233とか)を検索するにはどうすればよいですか?
806デフォルトの名無しさん:2009/02/05(木) 21:57:20
>>803
システムの起動(CPUの電源ON)からのカウント数だから、プロセスの起動時間は関係ない
807デフォルトの名無しさん:2009/02/05(木) 21:59:57
>>805
BM法
808デフォルトの名無しさん:2009/02/05(木) 22:01:24
>>805
byte境界を越えてるのも探したいの?
ビットパターンを頭から見てくしかないんじゃね?
809デフォルトの名無しさん:2009/02/05(木) 22:02:42
ちょっと、スレ違い気味な事で申し訳無いのですが・・・
適切なスレがありましたら指摘して下さい。

VisualStudio2005 C# で Webアプリケーション 及び Webサービス を作ろうとしていたのですが、
パケットをキャプチャする為にはIIS上で動かさなければいけないのでしょうか?

「とりあえず動かすのが先だ」と考えて、VSを複数立ち上げて.NET開発サーバー間でやりとりしていたのですが、
いざパケットを見ようと思ったら見方が解らなく、ネットも自分の解る範囲で検索してみたのですがそれらしい情報を
見つける事が出来ませんでした・・・

localhost内でやりとりする(?)パケットを見る事は出来ないのでしょうか・・・?
810デフォルトの名無しさん:2009/02/05(木) 22:04:03
>>805
byte[100]ならBM法でもたいしたコストかからないよ
811デフォルトの名無しさん:2009/02/05(木) 22:05:53
>>809
WinPCap
812805:2009/02/05(木) 22:11:43
やっぱり自力でやるしかないんですね。
便利なクラスが用意されていればと思ったのですが…
813デフォルトの名無しさん:2009/02/05(木) 22:13:34
>>809
ローカルじゃ無理じゃね? 無料の VirtualPC でも使いなよ。
814デフォルトの名無しさん:2009/02/05(木) 22:18:46
>>812
Array.Find()
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());
    }
(∪^ω^)わんわんお!
816デフォルトの名無しさん:2009/02/05(木) 22:24:33
>>814
勘違い
817デフォルトの名無しさん:2009/02/05(木) 22:26:12
818デフォルトの名無しさん:2009/02/05(木) 22:26:55
>>814
Array.Find()だと任意の並びは検索できないんじゃね

原文01122334

検索対象112233

だとヒットしない
819デフォルトの名無しさん:2009/02/05(木) 22:31:58
public static int Find(byte[] src, byte[] target)
{
return System.Text.Encoding.ASCII.GetString(src).IndexOf(System.Text.Encoding.ASCII.GetString(target));
}
820815:2009/02/05(木) 22:33:29
>>819に負けた・・・

ASCIIにするの思いつかなかった
821デフォルトの名無しさん:2009/02/05(木) 22:36:00
>>820
いや、君の見て思いついた。
822デフォルトの名無しさん:2009/02/05(木) 22:36:07
あ、でも>>819だと4ビットずれてたら検索できないね
823デフォルトの名無しさん:2009/02/05(木) 22:37:47
ん、ビット単位でずらして検索するのか?
824デフォルトの名無しさん:2009/02/05(木) 22:45:45
ASCIIだと0x80以降が0x3Fになっちまうっていう
825デフォルトの名無しさん:2009/02/05(木) 22:47:21
文字列にして検索してるのは馬鹿?
826デフォルトの名無しさん:2009/02/05(木) 22:49:51
ネタをネタと(
827デフォルトの名無しさん:2009/02/05(木) 22:50:39
コストを考慮しなくて良い場合は手抜き実装としてアリだと思う
828デフォルトの名無しさん:2009/02/05(木) 22:51:47
>>524
そうか
UTF7でどうだ?
829デフォルトの名無しさん:2009/02/05(木) 22:52:30
>>828はアンカミス
>>824へのレス
830デフォルトの名無しさん:2009/02/05(木) 22:52:43
>>524
まったくだ・・・
831809:2009/02/05(木) 22:55:46
>>810
試してみたいと思います。

>>813
どうも自分も調べていてそうなのかもと思い始めた所でした・・・
OSが内部で処理しているみたいですね。
今日中に解決できなければその方法で行こうと思います。

>>817
ありがとうございます。
そのサイトは自分も行ったのですが、
ARPの追加が出来なくて諦めました(汗
(エントリを追加できませんでした:5って奴です)
もう少し知識があれば色々突っ込んでやりたい所なんですが、
勝手にARPをイジっても大丈夫なのかよくわかってないので、
その方法はやめておきます・・・。



みなさんありがとうございます。
とりあえず今日中は頑張ってみようと思います。
832デフォルトの名無しさん:2009/02/05(木) 22:58:06
>>805>>809
833809:2009/02/05(木) 23:03:45
>>805 != >>809 です。
834デフォルトの名無しさん:2009/02/05(木) 23:11:10
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;
 }
}
こんなんを自作して、一つめが合っていたらこれを作って入れるみたいな感じじゃない?
835デフォルトの名無しさん:2009/02/05(木) 23:15:34
何それ
836デフォルトの名無しさん:2009/02/05(木) 23:37:16
誤爆?
837817:2009/02/05(木) 23:40:31
>>831
該当の記事には要点しかなので、そのまま説明内容を打ち込んでも
ダメなのは理解してるのかな?
事前に
http://blogs.yahoo.co.jp/akio_myau/34370200.html
とかで説明してるようなMicrosoft Loopback Adapterを追加してやらなければ
ならない
これはローカル通信専用の仮想のネットワークカードのようなもの
するとネットワークが1つ追加されるので、これにIPなどを設定することで、
初めて817の記事内容にあるarpコマンドを受け付けるようになる

デフォルトのローカル通信はキャプチャできないけど、追加した仮想ネットワークは
ローカル通信には違いないけど仕組みが若干違うのでキャプチャできるってことだと思う
なお、arpテーブルはアドレス解決のキャッシュみたいなものなので自分で
設定する分には特に心配はない
838デフォルトの名無しさん:2009/02/06(金) 00:02:27
>>835-836
>>805へのレスだよ
839デフォルトの名無しさん:2009/02/06(金) 00:03:35
誤爆の方がよかったね
840デフォルトの名無しさん:2009/02/06(金) 00:07:11
ええええ、まさかとは思ったが・・・
841デフォルトの名無しさん:2009/02/06(金) 00:08:23
こんなに素直なコーディングを見てそんな感想かよ
842デフォルトの名無しさん:2009/02/06(金) 00:17:39
   ∩___∩         |
   | ノ\     ヽ        |
  /  ●゛  ● |        |
  | ∪  ( _●_) ミ       j
 彡、   |∪|   |        J
/     ∩ノ ⊃  ヽ
(  \ / _ノ |  |
.\ “  /__|  |
  \ /___ /
843デフォルトの名無しさん:2009/02/06(金) 00:19:15
じゃあ>>805の解をもっと素直に書いてくれや
844デフォルトの名無しさん:2009/02/06(金) 00:20:41
揚げ足取りの時間です
845デフォルトの名無しさん:2009/02/06(金) 00:21:58
どうでもいいけど、バグってんだよなそれ >>834
IEnumerator<T> が何を実装しているかもう少し見たほうがいい
foreach 使わないと無駄に長くなる理由でもあるんだけど
846デフォルトの名無しさん:2009/02/06(金) 00:29:48
IDisposableにしろって話?
嫌だよめんどくさい
847デフォルトの名無しさん:2009/02/06(金) 00:32:39
                             |
                             |
      ∩___∩             |
      | ノ  _,  ,_ ヽ        ((  | プラプラ
     /  ●   ● |         (=)
     |    ( _●_)  ミ _ (⌒)   J  ))
    彡、   |∪|  ノ
⊂⌒ヽ /    ヽノ  ヽ /⌒つ
  \ ヽ  /         ヽ /
   \_,,ノ      |、_ノ
848デフォルトの名無しさん:2009/02/06(金) 00:34:56
お取り込み中すいません。
Windows Forms1.1(VS.NET2003)のLabelのTextに
"‐"(シフトJISの815D)を設定すると表示されなくて困ってます。
仕様なんでしょうか?
WinForms2.0やVB6.0(Label.Caption)では表示されます。
Buttonとか、"&"のアクセスキー処理ができるコントロールでは
みんなこの現象が出るようです。.NET1.1はSP1入れています。
"‐"や"815D"で検索しても情報がなくて。。。
849809:2009/02/06(金) 00:36:08
>>837
ipconfigにloopbackというのが無い事に気づき、インストールしてarpまではたどり着けました。
ただ、routeするとすでに登録されているとの事で、route PRINTで確認したのですが登録されてました。
これでキャプチャできるのかな?と思ったのですが、やはり見れませんでした・・・
これは見ながらやった設定が間違っていたのか、もしくは自分がNetworkMonitorの使い方を正しく把握していからかのどちらかではないかと思います。
ためしにブラウザにloopbackと入れるとIISのページが表示されたので、loopback == localhost???とか、正常にloopbackされているという事?と、色々頭に?が浮かんでます笑

後一息の様な気がするのですが、明日朝もう一度試してみてダメならダメでまた時間のある時に試してみようと思います。
私の様な初心者に細かに解説していただき、本当にありがとうございました。
850デフォルトの名無しさん:2009/02/06(金) 00:46:46
>>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だと問題が起こらなかったというわけ。
851デフォルトの名無しさん:2009/02/06(金) 00:48:28
852デフォルトの名無しさん:2009/02/06(金) 13:02:06
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" };

どこが間違っているのかをご教授頂ければ幸いです
853デフォルトの名無しさん:2009/02/06(金) 13:06:22
スレ違いです
854デフォルトの名無しさん:2009/02/06(金) 16:50:10
プログラムのある地点(イベントの呼び出し側)を通過したら、
他のクラスのディスプレイをクリックするというイベントを起こすことは可能ですか?
855デフォルトの名無しさん:2009/02/06(金) 17:02:35
なかなかの難文だな
856デフォルトの名無しさん:2009/02/06(金) 17:39:31
そうだな
857デフォルトの名無しさん:2009/02/06(金) 17:43:01
>>850-851
2.0でもUseCompatibleTextRendering プロパティをいじったら
再現しました。納得しました。ありがとうございます。
858デフォルトの名無しさん:2009/02/06(金) 17:43:58
>>854
可能です
859デフォルトの名無しさん:2009/02/06(金) 17:53:33
・イベントの呼び出し側
いまいちどっちなのか分からんな。イベントって呼び出すものじゃないから。
consumerなのかproviderなのか? まぁどっちでもいいけど。どうせ分からんから。

・他のクラス
ディスプレイ(笑)があるってことはコントロールなんだろうな。違うかもしれんが。
このクラスのコードには触れるの?
触れるならOnClickを呼ぶメソッドを公開すればいいんじゃない?
触れないななら難しいね。ButtonとかだったらPerformClickすればいいけど。
WM_LBUTTONDOWN / WM_LBUTTONUPをウィンドウにポストするとか
860デフォルトの名無しさん:2009/02/06(金) 19:18:35
いろいろwindowsフォームを作りすぎてタブ機能でまとめたいと思っているのですが、
タブにする方法を学べるサイトを教えてください。
861デフォルトの名無しさん:2009/02/06(金) 20:17:49
あるwindowsフォームが存在するかどうかを判定する方法を教えてください。
862デフォルトの名無しさん:2009/02/06(金) 20:30:47
何したいのか知らんけどFindWindowでも使ってれば
863デフォルトの名無しさん:2009/02/06(金) 20:33:03
フォームの参照は持ってるんじゃねーの?

form.IsHandleCreated && !form.Disposing && !form.IsDisposed

とかかね〜? IsWindowを調べたくなるが
864デフォルトの名無しさん:2009/02/06(金) 21:01:35
きょうはよいしつもんが思い浮かびません。
865デフォルトの名無しさん:2009/02/06(金) 21:05:05
じゃ、C#は言語仕様の改訂でVBに成り下がるのかどうか論議しようぜ
866デフォルトの名無しさん:2009/02/06(金) 21:12:38
「初心者です。こうこうこういう仕様でクラス作りました。ソースはこちらです。一応ちゃんと動きます。エロい人添削してください。」
みたいなスレ無いかな
867デフォルトの名無しさん:2009/02/06(金) 21:15:38
ここ
868デフォルトの名無しさん:2009/02/06(金) 21:27:49
クラスライブラリ晒せばいいの?
.exe?
869デフォルトの名無しさん:2009/02/06(金) 21:32:28
ソースを晒せばいいの
870デフォルトの名無しさん:2009/02/06(金) 22:27:07
マイクロソフトがVC#で採用してるdelegateモデルのクラス図が載ってるサイトを
どなたかご存知ありませんか?
英語のサイトでも全然構わないんで
871デフォルトの名無しさん:2009/02/06(金) 22:32:23
でりげーともでるのくらすず?
872デフォルトの名無しさん:2009/02/06(金) 22:49:59
ドキュメントから生成しなよ
873デフォルトの名無しさん:2009/02/06(金) 22:54:36
delegateって、イベント発生時に実効されるメソッドのようなイメージの使い方しか
思い浮かばないんだけど、他に便利な使い方ってあんのかな
極端に言えば、イベント発生元に実行させるオブジェクトを渡しておいて
そこで実行させればいいだけのような気がするんだが。
874デフォルトの名無しさん:2009/02/06(金) 22:57:03
LINQを使ったことがあれば
そんな感想にはならない
875デフォルトの名無しさん:2009/02/06(金) 23:05:12
LINQ TO SQL はキャンセルじゃん
ENTITYは別物で関係なくね?
876デフォルトの名無しさん:2009/02/06(金) 23:10:50
LINQはオブジェクトにこそ使うものだ
877デフォルトの名無しさん:2009/02/06(金) 23:18:01
LINQ to SQLはデリゲート関係ないし
878デフォルトの名無しさん:2009/02/06(金) 23:29:47
じゃ少なくともLinqの無いC#2.0まではdelegateは無意味ってことは納得なわけだ
879デフォルトの名無しさん:2009/02/06(金) 23:31:49
>ベント発生元に実行させるオブジェクトを渡しておいて
>そこで実行させればいいだけ
そもそもこれが面倒だからデリゲートが導入された
javaの惨状を見ればわかる
880デフォルトの名無しさん:2009/02/06(金) 23:32:13
好きして
881デフォルトの名無しさん:2009/02/06(金) 23:32:25
LINQを使ったことなくてもそんな感想にならないと思うなぁ
デリゲートもオブジェクトだよ。
それだけ。
882デフォルトの名無しさん:2009/02/06(金) 23:32:43
初心者です。

UDP受信クラスと受信データクラスを作りました。
UDP受信クラスでバイト配列を受信し、受信データクラスにデータをセットし、キューに登録する仕様です。

ソースはこちらです。
ttp://www3.uploda.org/uporg1995578.zip.html

一応ちゃんと動きます。
エロい人添削してください。
883デフォルトの名無しさん:2009/02/06(金) 23:35:48
Cで関数ポインタ使った事無いの?
884デフォルトの名無しさん:2009/02/06(金) 23:37:04
>>878
フレームワーク内ではたくさん使われてるから無意味ということはないだろう
俺はGUIにイベントを登録する時ぐらいしか使わなかったが
885デフォルトの名無しさん:2009/02/06(金) 23:37:28
>>873
君にこれを上げよう
java.beans.EventHandler
886デフォルトの名無しさん:2009/02/06(金) 23:39:27
Cの関数ポインタは雑魚
参照オブジェクトがないから
もうデリゲートとは全然違う
887882:2009/02/06(金) 23:41:22
Program.csの部分は動作確認用にとってつけたので適当です。
888デフォルトの名無しさん:2009/02/06(金) 23:42:33
デリゲートは雑魚
参照オブジェクトがあるから
もうCの関数ポインタとは全然違う
889デフォルトの名無しさん:2009/02/06(金) 23:52:24
>>882
ソースファイルの名前に日本語を使わないこと
890デフォルトの名無しさん:2009/02/06(金) 23:56:13
日本語使うなとは言わないけどクラス名だけに日本語使うのは意味がわからない
891882:2009/02/06(金) 23:58:24
>>889-890
ソースを見てもらうのに視覚的にわかりやすいかなと思いそうしました。

自分的に気になるというか心配なのは
受信データ.GetBytes()内のreturnValueが開放されるタイミングです。
892デフォルトの名無しさん:2009/02/07(土) 00:18:07
>>882
おい、catch{}して例外握りつぶすのやめろ
自分で処理しきれないのはrethrowしとけ
893デフォルトの名無しさん:2009/02/07(土) 00:18:53
>>891
そんなもんガーベジコレクタが適当になんとかしてくれるだろう
894882:2009/02/07(土) 00:32:20
>>892
書き直します。ありがとうございます。

>>893
そうですね。短時間に数千回処理してもメモリ圧迫しないか検証してみます。
895デフォルトの名無しさん:2009/02/07(土) 00:37:09
GCの性能をとくと見るといい
896デフォルトの名無しさん:2009/02/07(土) 00:42:05
>>882
いろいろ雑すぎる
致命的な部分だけでも、
スレッドの無限ループの明示的な終了条件がないとか
Disposeの中でjoinしてるとか
通信パケットの受信タイミングとるのにイベント使ってないとか

人に評価してもらうよりも、まず、本やインターネットで基本を
おさえることを考えたほうがよい
まず、以下のあたりから
- スレッドの生成の仕方、終了判定の基本パターン
- 通信における、受信時の基本パターン(イベントを使うやり方)
- ついでに、C#のコーディング規約をどれでもよいのでインターネットでさがして
 それに従って書いてみるのとよい

ついでに
>短時間に数千回処理してもメモリ圧迫しないか検証してみます。
ReadLineのタイミングで受信データ1つ読み出すんじゃ、数千の処理なんで
できないのでは?
897デフォルトの名無しさん:2009/02/07(土) 00:46:34
>>879
>>881
イベント発生で実行させたいメソッドをIInterfaceで規定して、
イベント発生元で、イベント発生したら、そのメソッドを実行させればいいじゃない
898882:2009/02/07(土) 00:53:38
確かにDispose()内でjoin()はありえないですね。
でなおします。
899デフォルトの名無しさん:2009/02/07(土) 00:55:49
>>897
だからそれが面倒なんだよw
インターフェイスだと関連する複数のメソッドをまとめて宣言したくなるけど
そうやると後からメンバを追加できなくなる
だから結局メソッド一つのインターフェイスになって,デリゲートと同じ
900デフォルトの名無しさん:2009/02/07(土) 01:05:03
同じなら流用できるから新規に作る必要なんてないじゃない
それにインスタンスそのものを渡すわけだから、もっと応用が利くじゃない
901デフォルトの名無しさん:2009/02/07(土) 01:08:22
デリゲートは実際にはインスタンスと関数ポインタを渡している
記述が合理的になるからインスタンスで出来ることよりも幅広い細かいことを
やらせられる
902デフォルトの名無しさん:2009/02/07(土) 01:10:19
むりやりインスタンスでやろうとしたJavaは結局めんどくさくなって
無名内部クラスみたいなキチガイじみたものを産み出したしな
903デフォルトの名無しさん:2009/02/07(土) 01:13:55
「使用頻度の高い定着したパターンは言語に取り込む」がC#の設計思想の基本
javaでもイテレータやEnumなどは言語に取り込でるだろ
904デフォルトの名無しさん:2009/02/07(土) 01:25:00
インスタンスを直接渡せたほうが幅広いことができるじゃない
暗黙的な型指定や無名関数は、使用頻度の高い定着したパターンじゃないじゃない
905デフォルトの名無しさん:2009/02/07(土) 01:30:50
C++は暗黙的な型指定と無名関数
Javaも無名関数を取り込もうとしてるじゃない
あって当然のものをC#がまず取り入れたって話でしょ
906デフォルトの名無しさん:2009/02/07(土) 01:34:21
>>904
インスタンスを直接渡す事もできるのがC#、それしかできないのがJava
907デフォルトの名無しさん:2009/02/07(土) 01:46:14
あって当然かどうかは、単なる個人の主観じゃない
単に機能の選択肢が多いほうが良いというわけではないじゃない
ex 多重継承することもできるのがc++ 多重継承が許されないのが・・C# Java
908デフォルトの名無しさん:2009/02/07(土) 01:54:22
そして選択肢があった方が良しと考えられたからデリゲートが採用された。

おしまい

909デフォルトの名無しさん:2009/02/07(土) 01:56:48
C++とC#とJavaにある機能ならあって当然だろうよ
で無名関数はこれからそうなる
いずれ暗黙の型指定もJavaに入れざるを得なくなるんじゃないか
そのころにはScalaがJava VMのメイン言語の座を乗っ取ってるかもな
910デフォルトの名無しさん:2009/02/07(土) 02:13:48
Directory.SetCurrentDirectoryにマイコンピュータをセットしたいのですが、
どうしたらいいでしょう?
プロセスみたいに "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}"
ではできませんでした。
911デフォルトの名無しさん:2009/02/07(土) 02:56:47
無理
912デフォルトの名無しさん:2009/02/07(土) 02:58:01
無名関数は関数型言語なら必須。
OO言語でもDとか普通に使ってる。
913デフォルトの名無しさん:2009/02/07(土) 03:14:06
デリゲート等、どんどん言語仕様が複雑になり、
かつコンパイラと人間の間で1:1の意味にとれない書き方が認められて煩雑になってるじゃない
存在理由が他言語にあるからなんてのは単なる思考の放棄じゃない
そしてC#は関数型言語じゃないじゃない
914デフォルトの名無しさん:2009/02/07(土) 03:28:48
デリゲートがない方が言語仕様が複雑になるだろ
Javaの無名内部クラスがいい例だ
デリゲートは人間に分かりやすくコンパイラにも分かりやすい
無名内部クラスはその逆だ
915デフォルトの名無しさん:2009/02/07(土) 03:33:02
>かつコンパイラと人間の間で1:1の意味にとれない書き方が認められて煩雑になってるじゃない

アセンブラ以外は言語として例外なく煩雑と言ってるのと同じじゃない

>存在理由が他言語にあるからなんてのは単なる思考の放棄じゃない
>そしてC#は関数型言語じゃないじゃない

C#は関数型言語じゃないから他言語からの概念の導入が
適切じゃないというのは単なる思考の放棄じゃない
916デフォルトの名無しさん:2009/02/07(土) 03:38:14
変数の解釈の曖昧さを述べてるのに、言語全般に解釈して論じるのは論理のすり替えじゃない
関数型言語なら必須だとするのはおかしいといってるだけで、適切じゃないなんて述べて無いじゃない
917デフォルトの名無しさん:2009/02/07(土) 03:39:19
複雑だと思うならつかわなきゃいいんじゃねーの?
なんでアホはあるもの全部使わなきゃ気がすまねーの?
918デフォルトの名無しさん:2009/02/07(土) 03:42:43
まず変数の解釈のあいまいさについて述べてる文には見えないけど
変数の解釈のあいまいさってどういう意味よ
919デフォルトの名無しさん:2009/02/07(土) 03:45:23
言語は複雑でも、利用者が個別に使い分ければいいならc++だけを拡張していけばいいじゃない
920デフォルトの名無しさん:2009/02/07(土) 03:46:06
ひろし追い越すなw
921デフォルトの名無しさん:2009/02/07(土) 04:01:35
>言語は複雑でも、利用者が個別に使い分ければいいならc++だけを拡張していけばいいじゃない

デリゲート仕様の是非について述べてるのに、言語全般に解釈して論じるのは論理のすり替えじゃない
922デフォルトの名無しさん:2009/02/07(土) 04:06:48
一言語に過ぎないc++を言語全般と解釈するのは論理のすり替えじゃない
923デフォルトの名無しさん:2009/02/07(土) 04:11:14
>>922
あれ? 使い分けるなら一言語に過ぎないC++だけを拡張して使えばいいとか
大統一宣言してるの誰でしたっけwww
924デフォルトの名無しさん:2009/02/07(土) 04:30:54
言語仕様が複雑になったc++にかわって、よりスッキリとした仕様のjavaやc#などが
導入されている面もあるということに対するアンチテーゼじゃない
925デフォルトの名無しさん:2009/02/07(土) 05:55:30
じゃないって肯定なのか否定なのかわからなくなる・・・
926デフォルトの名無しさん:2009/02/07(土) 07:24:54
わからなくね?
927デフォルトの名無しさん:2009/02/07(土) 08:12:57
初心者用の相談以外の無用な議論はよそでお願いしたい
スレがすぐに埋まってしまう
928デフォルトの名無しさん:2009/02/07(土) 12:48:51
わからなくならなくね?
929デフォルトの名無しさん:2009/02/07(土) 12:54:04
こんな低レベルな話ここ以外でどこでやるんだよw
930デフォルトの名無しさん:2009/02/07(土) 13:25:27
>>910
実際に存在するディレクトリじゃないとカレントにできんです
931デフォルトの名無しさん:2009/02/07(土) 13:28:25
わからなくなくならなくなくね?
932デフォルトの名無しさん:2009/02/07(土) 14:21:55
複雑だと思うならつかわなきゃいいんじゃねーの?
なんでアホはあるもの全部使わなきゃ気がすまねーの?
933デフォルトの名無しさん:2009/02/07(土) 14:26:51
>>932
多分、向こうはほんとに複雑だなんて思ってないだろ。
単に、自分の無知をとがめられたのに切れて難癖つけてるだけ。
934デフォルトの名無しさん:2009/02/07(土) 14:37:57
>>933
>>932はなんか知らないがマルチ。

くだすれPython(超初心者用) その3
http://pc11.2ch.net/test/read.cgi/tech/1232055225/332

Rubyについて Part 34
http://pc11.2ch.net/test/read.cgi/tech/1233686068/91
935デフォルトの名無しさん:2009/02/07(土) 14:58:43
フォームにpictureBoxがあって、それに画像を表示させるのですが、
表示させた後にフォームの四隅の矢印で大きさを変えたら、
画像が途中で切れたりするのですが、どのような対処法がありますか?
936デフォルトの名無しさん:2009/02/07(土) 14:59:54
もう一度描く
937デフォルトの名無しさん:2009/02/07(土) 15:12:52
938デフォルトの名無しさん:2009/02/07(土) 15:14:08
もういいから
939デフォルトの名無しさん:2009/02/07(土) 15:21:38
doubleでt=1/-300としたら(実際はtx-xでした)(tx=0,x=300)
t=0になってたんですけど
これはどうしてでしょう
(デバックでちゃんとその値が入っていることは確認しました)
更に試しに↑の式でそのまま入れてみましたがやはり0でした
940デフォルトの名無しさん:2009/02/07(土) 15:21:55
>>935
画像の表示はどうしてますか。
ImageプロパティやPaintイベントを正しく使ってればおきない現象なのだけど。
もしCreateGraphicsを使ってるなら何か勘違いがあると思う。
941デフォルトの名無しさん:2009/02/07(土) 15:25:00
>>939
t = 1.0 / -300
942デフォルトの名無しさん:2009/02/07(土) 15:27:48
>>941
あ、そっか…
1/300だと1/300がintで計算されちゃうんですね
分かりました有り難うございます。
(実際角度が欲しかったのでAtan2にしてしまいました…)
943デフォルトの名無しさん:2009/02/07(土) 15:28:13
>>939
int / int = int
944デフォルトの名無しさん:2009/02/07(土) 15:36:02
>>940
なんか原因は分かった気がします。ただ解決法が・・・。
フォームのサイズ変更に対して、pictureBoxのサイズが連動してくれないみたいです。
一応Ancher?みたいなのはいじったんですが。
945デフォルトの名無しさん:2009/02/07(土) 15:37:03
すげー落ちだな・・・
946デフォルトの名無しさん:2009/02/07(土) 15:46:02
>>944
Dock=Fillで連動するのはpictureboxの枠だけで中の画像の大きさはそのまま。
表示しているのがBitmapやjpegなどのイメージなら、
BackgroundImageに設定してBackGroundImageLayout=Zoomにすればいい。
947デフォルトの名無しさん:2009/02/07(土) 15:51:18
>>946
ありがとうございます。

if文の判定でtrueかfalseで場合分けすると思いますが、
ある変数が未定義かどうかで場合分けすることは可能でしょうか?
948デフォルトの名無しさん:2009/02/07(土) 15:58:55
変数そのものが宣言されていないのか,値が代入されていないのかどっち?
前者なら,今のC#では存在しない変数には絶対にアクセスできないので考え方が間違ってる
後者なら,参照型の場合はnullと比較,値型の場合は用意されたEmpty用の値を使うかnullable使う
949デフォルトの名無しさん:2009/02/07(土) 17:30:41
特定のディレクトリ中でのファイル名の比較はどうやればいいんでしょうか?
ファイルシステムによって大文字小文字が区別されたりされなかったりしますよね?
950デフォルトの名無しさん:2009/02/07(土) 18:08:48
どうやればいいんでしょうかって、あなたの使用目的によりますが。
あなたが自身が大文字小文字の区別をしたいのかしたくないのか。
951デフォルトの名無しさん:2009/02/07(土) 18:10:29
システムと同じ動作にしたいんだろ
952デフォルトの名無しさん:2009/02/07(土) 18:11:40
システム見て判断すりゃいいだけじゃん
953デフォルトの名無しさん:2009/02/07(土) 18:44:50
nullableをつかうべし
954デフォルトの名無しさん:2009/02/07(土) 18:55:56
>>952
ディレクトリのパス渡すと適切なIComparerを返してくれるものがあればいいんですけど
ないですかね?
955デフォルトの名無しさん:2009/02/07(土) 19:00:57
C#で、windows liveメッセンジャーにログインしたとき等に画面右下に
表示されるような、画面最前列に表示されるけど、ユーザーの入力を
奪わないようにするような窓を表示させるにはどうすればいいでしょうか?
956デフォルトの名無しさん:2009/02/07(土) 19:15:26
Form.ShowWithoutActivation
957デフォルトの名無しさん:2009/02/07(土) 19:34:28
初心者用の相談以外の無用な議論はよそでお願いしたい
スレがすぐに埋まってしまう
958デフォルトの名無しさん:2009/02/07(土) 19:42:23
おまえがしね
959デフォルトの名無しさん:2009/02/07(土) 19:43:56
じゃ誘導するかスレ立てしろよ
自分は何もしないで言うだけ番長かよ
960デフォルトの名無しさん:2009/02/07(土) 19:56:07
なるほど
ありがとうございました
961デフォルトの名無しさん:2009/02/07(土) 21:06:20
すみません。WPFって言うのの本をかってきたんですが、XPでもできますか?
962デフォルトの名無しさん:2009/02/07(土) 21:15:01
.NET3.5いれときゃいけると思うけど、糞思いよ
963デフォルトの名無しさん:2009/02/07(土) 21:23:42
WPFとswingってどっちが優秀?
964デフォルトの名無しさん:2009/02/07(土) 21:26:07
C++/CLI触ってみたがすげーな
C#じゃなくてもいいわ
965デフォルトの名無しさん:2009/02/07(土) 21:30:11
なにがどう凄いのか書け
966デフォルトの名無しさん:2009/02/07(土) 21:32:11
>>911, >>930
ありがとうございました

何とかしてマイ コンピュータにあるファイル(?)を取得できませんか?
967デフォルトの名無しさん:2009/02/07(土) 21:32:18
お前が使ってみろよ 使わなきゃわからんだろ
968デフォルトの名無しさん:2009/02/07(土) 21:33:22
VSスレで暴れてた奴だ、相手にすんな
969デフォルトの名無しさん:2009/02/07(土) 21:34:07
質問です。普通のintやstringといった変数の型では、
string moji = "string";
という代入ができますが、自作のクラスで、これと同じようなことができますか?
例えば
MyClass myClass = new MyClass();
myClass = "string";
みたいにmyClassのメンバに"string"を渡したいのですが
970デフォルトの名無しさん:2009/02/07(土) 21:34:52
誘って質問してるだけでは?
すこしでも反応すると、そこから情報読み取られるよ

(なにがすごいか書けるもんなら書いてみろ!両方わかってる俺が正論でつぶしてやる)

CLIがダメだってすごい伝わってくるから気をつけた方がいいよ
971デフォルトの名無しさん:2009/02/07(土) 21:38:37
>>969
演算子オーバーロード
972デフォルトの名無しさん:2009/02/07(土) 21:38:53
自分で正論って言う奴が正論を言った試しがない
973デフォルトの名無しさん:2009/02/07(土) 21:40:31
ついでに論破といった奴が論破できていたためしがない
974デフォルトの名無しさん:2009/02/07(土) 21:42:47
>>969
MyClassがStringの派生クラスなら出来るんじゃない?
若しくはStringからMyClassへキャストできるようにするとか。

下手にex/implicitするよりもコンストラクタをもう一つ作って
myClass = new MyClass ("string");
した方が良いと思うけどね。
975デフォルトの名無しさん:2009/02/07(土) 21:42:54
ローカルスコープを抜けたときにIDisposeパターンを実装したクラスの
Disposeが自動的に実行されるのは確かに便利なだ
976デフォルトの名無しさん:2009/02/07(土) 21:43:02
>>966
IShellFolder
977デフォルトの名無しさん:2009/02/07(土) 21:47:49
ぬるぽと言ったヤツがガッされた試しがない
978デフォルトの名無しさん:2009/02/07(土) 21:50:04
C#よりObjectPascalのほうがわかりやすい
979デフォルトの名無しさん:2009/02/07(土) 21:52:28
いろんな言語つくられても正直迷惑
学者がおれがおれが、っていいたいだけだろ
980デフォルトの名無しさん:2009/02/07(土) 21:52:35
というか、Andersが凄いんだな
frameworkの開発にも関わってたのかな まんまVCLだからな
981デフォルトの名無しさん:2009/02/07(土) 21:57:52
List<T>を公開しては行けないとかのガイドラインってどこにありますか?
982デフォルトの名無しさん:2009/02/07(土) 21:59:41
質問です
戻り値の型がbyte[]のWebServiceのメソッドを
SOAPで直に実行してるんですけど、
戻って来たxmlのxsdデータ型がbase64Binaryなんですね。
innertextの文字列をbyte[]に変換したいんですけど

Encodingクラスでは無理っぽいし
System.Runtime.Remoting.Metadata.W3cXsd2001.SoapBase64Binary
を見てみましたがValueプロパティ自体がbyte[]なんですよ。

どうすればいいでしょうか?
983デフォルトの名無しさん:2009/02/07(土) 22:05:28
なんかよくわからんけどConvert.FromBase64***は使えない?
984デフォルトの名無しさん:2009/02/07(土) 22:06:06
>>981
http://msdn.microsoft.com/ja-jp/library/ms182142.aspx

公開の範囲が微妙なんだけどね
自分で開発してる範囲内でなら渡しても問題無いと思う
ArrayListなら別に問題ないっぽいし
985982:2009/02/07(土) 22:11:15
>983
使えました!ありがd!
986デフォルトの名無しさん:2009/02/07(土) 22:15:25
u
987デフォルトの名無しさん:2009/02/07(土) 23:04:49
>>971
ありがとう。演算子のオーバーロードで
MyClass myClass = "string";
は実現できましたが、string moji = MyClassは不可能ですか?

>>974
stringやintを継承するとsealなので無理といわれます(´・ω・`)ショボーン
988デフォルトの名無しさん:2009/02/07(土) 23:06:50
>>987
MyClass:String
でいけなかったっけ?
989デフォルトの名無しさん:2009/02/07(土) 23:08:46
シール型'string'から派生することはできませんって言われます
VisualStudio 2005です (´;ω;`)ブワッ
990デフォルトの名無しさん:2009/02/07(土) 23:10:28
MyClassにString型メンバ変数を加えるとか
991デフォルトの名無しさん:2009/02/07(土) 23:13:06
class MyClass
{
 public static implicit operator string( MyClass myclass )
 {
  return myclass.ToString(); //など
 }
}
992デフォルトの名無しさん:2009/02/07(土) 23:21:30
>>991
んーintでやってみたけど、無理ですね(´Д⊂グスン

MyClass myClass = 1;
int myInt = myClass;

型intを型MyClassに暗黙的に変換できません
993デフォルトの名無しさん:2009/02/07(土) 23:24:34
>>992
さすがに応用力なさ杉じゃないか?w
っていうか、少しはMSDNライブラリとか読もうよ
994デフォルトの名無しさん:2009/02/07(土) 23:24:45
ああ、newクラスかw
ごめんちょっと勘違いしてた
995デフォルトの名無しさん:2009/02/07(土) 23:27:10
>>993
MyClass myClass = 1; はできてるんですよ
int myInt = myClass; はできないのかなと思って。
996デフォルトの名無しさん:2009/02/07(土) 23:28:06
>>949
Windowsなんだから大文字・小文字の違いは常に無視でいいと思う。
ファイルシステムが区別して、お前のプログラムが区別するとしても、
Windowsカーネル・シェルが区別してくれなければ意味がない。

というわけでStringComparison.OrdinalIgnoreCaseを使いましょうという話。
http://blogs.msdn.com/michkap/archive/2005/10/17/481600.aspx
http://blogs.msdn.com/michkap/archive/2006/08/12/696284.aspx
997デフォルトの名無しさん:2009/02/07(土) 23:31:11
>>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();
    }
}
998デフォルトの名無しさん:2009/02/07(土) 23:38:02
>>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); }
}
999998:2009/02/07(土) 23:41:16
お礼

ふらっとC#,C♯,C#(初心者用) Part37
http://pc11.2ch.net/test/read.cgi/tech/1234017654/l50
1000デフォルトの名無しさん:2009/02/07(土) 23:41:53
>>995
出来るけど、多用はオススメはしない。
知らない間に情報が欠落してるって事もあるし…
つうか、>>993 を嫁よ

>>984
サンクス。ブックマークに追加した。
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。