ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
511:505
08/03/09 02:30:47
>>508
string name = listView1.Columns[e.Column].Text;

お前の欲しいものはこれか?
最初っからTextって言えよ馬鹿。
本当に向いてないからやめておけ。
そして二度とくるな。



512:499
08/03/09 02:32:42
インデックス番号だけしか取得できないとカラムが動的に追加・削除されたら困ると思うのですが…。
メンバ名を取得する方法はないってことですかね??

513:デフォルトの名無しさん
08/03/09 02:34:09
>>511
さっきから釣りですか?
向いてないんじゃないですか?w

514:デフォルトの名無しさん
08/03/09 02:34:38
>>511はチンコ剥いてろ。

515:デフォルトの名無しさん
08/03/09 02:39:48
>>512
メンバ名ってprivate ColumnHeader hoge; の hoge だろ?
動的に追加削除したらメンバ名も何も無いじゃん

516:デフォルトの名無しさん
08/03/09 02:40:58
>>512
>インデックス番号だけしか取得できないとカラムが動的に追加・削除されたら困ると思うのですが…。
困りません。

>メンバ名を取得する方法はないってことですかね??
日本語でおk

517:デフォルトの名無しさん
08/03/09 02:46:25
死ね

518:デフォルトの名無しさん
08/03/09 02:48:10
>>505=>>511
はチンコ剥いてプログラミングやめて2chもやめた方がいい。
人生だけはやめなくていいから。

519:デフォルトの名無しさん
08/03/09 02:52:59
>>515-516
動的に追加・削除してインデックスがかぶってしまったら困ると思うのですが…。
例えばインデックス1を削除したあとに、新しく追加したカラムもインデックス1にしたら区別がつかなくなると思うのですが。

520:デフォルトの名無しさん
08/03/09 02:59:13
>>518
悔しかったの?w

521:デフォルトの名無しさん
08/03/09 03:00:57
>>519
削除したんならもうインデックス存在しないじゃん

522:デフォルトの名無しさん
08/03/09 03:04:21
>>521
削除した方はもうないから新しい方と区別つかないじゃん。

523:デフォルトの名無しさん
08/03/09 03:06:41
インデックスがわかればカラムのインスタンスそのものを取得できるのに、それ以上何を望む?

524:デフォルトの名無しさん
08/03/09 03:12:36
>>523
まあそうですよね。
冗長でもインデックスとは別に取得出来るんじゃないかと思ってしまってました。
ありがとうございました。

525:デフォルトの名無しさん
08/03/09 03:23:00
>>512>>519で区別できなくて困るのってどんな場合だろ
気になってしょうがないから、思いついた人おせーて

526:デフォルトの名無しさん
08/03/09 03:25:17
ちょっと待て終わらせんなw
インスタンスそのものがわかってもインスタンス名が分からないと困る事あるだろ。

527:デフォルトの名無しさん
08/03/09 03:26:48
インスタンス名ってなに?

528:デフォルトの名無しさん
08/03/09 03:27:16
変数のことかな?

529:デフォルトの名無しさん
08/03/09 03:28:09
カラムを動的に追加するときにNameプロパティをちゃんと設定しておけばOK。

530:デフォルトの名無しさん
08/03/09 03:29:58
例えばあるカラムがstringで数字を表示している時にそのカラムを数値として扱いたくなった時など。
その列以外は数字でもstringで扱いたいのに、その列だけは数値として扱いたい。
そして動的に追加・削除されるものだとしたらインデックスよりインスタンス名が欲しいでしょ?

531:デフォルトの名無しさん
08/03/09 03:32:10
で、インスタンス名ってなに?

532:デフォルトの名無しさん
08/03/09 03:35:57
>>529
Nameプロパティが取得できないからこういう流れになってるんだろ

533:デフォルトの名無しさん
08/03/09 03:36:43
>>505
>>511
>>527
>>528
>>531
もうちょっと勉強して来い

534:デフォルトの名無しさん
08/03/09 03:37:06
>>533
死ね

535:デフォルトの名無しさん
08/03/09 03:40:06
スクリプト脳の弊害ってホント恐ろしいな。

で、インスタンス名って何。

536:デフォルトの名無しさん
08/03/09 03:43:15
スクリプト脳って?

537:デフォルトの名無しさん
08/03/09 03:43:46
池沼はスルーしろよ

538:デフォルトの名無しさん
08/03/09 03:44:28
出た、スルーw

539:デフォルトの名無しさん
08/03/09 03:56:26
>>525
クリックされた列がある特定のデータ群だった時にだけ処理をしたい場合

540:デフォルトの名無しさん
08/03/09 03:59:42
「クリックされた列がある特定のデータ群」ってなに?

541:デフォルトの名無しさん
08/03/09 04:01:21
もう相手すんなよ

542:デフォルトの名無しさん
08/03/09 04:01:52
名前なんて不安定な要素で判定しないなぁ

543:デフォルトの名無しさん
08/03/09 04:01:57
出た、もう相手すんなよw

544:デフォルトの名無しさん
08/03/09 04:10:38
ただの荒らしじゃねえか

545:デフォルトの名無しさん
08/03/09 04:13:52
A B
1 1

AとBの列があったとして、Aの列(1)にだけ特定の処理をしたい場合困るんじゃね?

546:デフォルトの名無しさん
08/03/09 04:16:48
何が困るのか全く分からない。

547:デフォルトの名無しさん
08/03/09 04:18:11
break;

548:545
08/03/09 04:20:31
>>546
俺に聞いてる?
じゃあ逆にAの列をどうやって特定する?
削除される可能性もあるからインデックスからは特定できないよ。
Aの名前も削除された後に追加されるかもしれないから名前でも特定できない。

549:デフォルトの名無しさん
08/03/09 04:34:54
List<ColumnHeader>で管理するなりNumberColumnHeaderクラス作るなりどーとでも。

550:デフォルトの名無しさん
08/03/09 04:36:35
>>548
ColumnClickアクションを拾って、e.Columnでインデックスが取れるよね。
で、アプリはどのカラムが何を意味してるか知ってるはずだよね?
知らないとしたら、それってどういう状況なの??

551:デフォルトの名無しさん
08/03/09 04:45:46
ListViewからカラムを削除するのはアプリ。
ListViewにカラムを追加するのはアプリ。
何番目のカラムに何を格納するかを決めるのもアプリ。

インデックスが分かればカラムを特定できる。
カラムを特定できればあとはアプリが自由に操作できる。

何が困るのか全く分からない。

552:デフォルトの名無しさん
08/03/09 04:49:10
>>548
Tag

単純な処理ならint,enumを入れておいてその値で処遇を決めるとか、
ソートするだけならtype(比較可能)を入れておいてキャスト時に使うというのも

複雑な処理をしたければ>>549-551

553:デフォルトの名無しさん
08/03/09 06:21:56
>>548
削除された列のクリックイベントってどこから発生するの?
動的に追加削除されるカラムの中の特定のカラムに対して特定の処理をしたいってんなら、
そもそもクリックイベントでインデックスを取るまでもなく、そのカラムの変数名でアクセスすればいいだけ。
というよりも、削除されているであろうカラムのインデックスをクリックイベントで取る意味が分からん。

流れ分かってる?発端は>>499だよ

554:デフォルトの名無しさん
08/03/09 11:48:11
タブコントロールでタブを下に配置した時にFlatButtonsにする方法はないのでしょうか?

555:デフォルトの名無しさん
08/03/09 12:52:16
混乱させる忍術の稽古はよそでやれ

556:デフォルトの名無しさん
08/03/09 13:10:38
??columnのインスタンス名(??)の話の流れが全く読めないんだが
あるインスタンスを格納する変数名を取りたいってことか??
変数名なんて単なる箱なんだからスコープ違えば役に立たないと
おもうんだけど…それとは違うの?

557:デフォルトの名無しさん
08/03/09 14:19:01
>>556
何いってるの

558:デフォルトの名無しさん
08/03/09 14:30:22
釣りなのか思い込み野郎なのかは知らないけど、気にするな

559:デフォルトの名無しさん
08/03/09 14:59:37
>>550-551
こういう場合はを想定ごらん。
例えばボタン1を押したらカラム追加、ボタン2を押したらカラム削除するとして、
プログラム上ははじめから配置されているある特定のひとつのカラムだけに操作する必要がある場合。
勿論削除されたら操作しないし、内容も他のカラムと見た目上判断できない。

560:デフォルトの名無しさん
08/03/09 15:01:10
まあ削除するときに特定のカラムかどうかを判定すればいいんだけど、
>>550-551は状況を想定できないようなので言ってみた。

561:デフォルトの名無しさん
08/03/09 16:41:57
>>559
カラムクリックイベントからインデックスを取るという状況の話をしているのに、
なんでボタンのクリックイベントで特定のカラムを操作する話になってんの?
もともとそんな状況の話なんかしてないんだからそんな想定は無意味だ。

562:デフォルトの名無しさん
08/03/09 17:05:24
>>559-560
そんなもんプログラム上で如何様にもできるっての。

563:デフォルトの名無しさん
08/03/09 17:23:08
>>561
なんでインデックスを取る話になるの?
インデックスじゃ区別つかないからインデックス以外の方法はないかって話題だろ?

>>562
如何様に出来てもインデックス以外の要素で一発で判断できるメンバがあれば楽って話だろ。
例えばエクスプローラでよくあるカラム上の▲▼マークだってオーナードロー駆使すれば如何様にも出来るけど
デザイナ上で一発で出来れば楽だろ。
それと同じ。

564:デフォルトの名無しさん
08/03/09 17:25:40
>>561
それと、カラムクリックイベントからそのカラムを操作するのと
ボタンクリックから特定のカラムを操作するのとでは条件同じだろ。
どっちにしろ指定されたカラムが”ある特定のカラムか”判断する術はインデックスからは無理って話なんだけど理解できる?

565:デフォルトの名無しさん
08/03/09 17:35:37
if (numberColumn == listView1.Columns[e.Column]) {
    ....
}
なにが無理なの?

566:デフォルトの名無しさん
08/03/09 17:39:16
お触り禁止

567:デフォルトの名無しさん
08/03/09 17:41:13
つまんないこというなよ

568:デフォルトの名無しさん
08/03/09 17:46:23
>>564
>ボタンクリックから特定のカラムを操作するのとでは条件同じだろ。
イベント引数の中身が全然違う。ゆえに条件は同じとは言えない。

>どっちにしろ指定されたカラムが”ある特定のカラムか”判断する術はインデックスからは無理って話なんだけど理解できる?
何言ってんの?
"ある特定のカラム"というからにはそのカラムオブジェクトとインデックスから導かれたカラムの参照が
同じかどうか判定すればいいじゃん。お前もしかして"その特定のカラム"のインスタンスが分からないと
参照が同じかどうか判定できないとでも言いたいわけ?
比べる対象なんだからそんなもの分かっている前提に決まってるだろ。

お前が>>559で言っている状況の話を理解できないわけないだろうが。
>>559の内容がこの話の流れと全く違っていると言ってるのよ。
この話の発端となった>>499を百回声に出して読むんだな。
お前以外のやつは>>449のアホな質問に対する答えについてどうこう話しているはずだ。
お前だけ流れが読めてない。

569:デフォルトの名無しさん
08/03/09 18:00:01
まあ元の質問を置いてきぼりにして話が膨らむのはよくあること。

570:デフォルトの名無しさん
08/03/09 19:36:28
元の内容自体は>>499が(もう少しマクロな視点で)目的を言うか、
誰かが質問するかすれば、すぐにでも解決できそうなものなのにな

571:499
08/03/09 19:43:02
まーまー^^

572:デフォルトの名無しさん
08/03/09 19:47:47
>>568
そのカラムオブジェクトとインデックスから導かれたカラムの参照が同じかどうか判定
ってどうすればいいの?

573:デフォルトの名無しさん
08/03/09 19:49:06
>>572
>>565

574:デフォルトの名無しさん
08/03/09 19:55:19
必死すぎるやつがいるな

575:デフォルトの名無しさん
08/03/09 21:09:48
そんなことよりGridLineをスクロールした時のバグは直ってないのか

576:デフォルトの名無しさん
08/03/10 08:04:41
エクスプローラでドライブにメディアが入っていないときに表示される
「DVD-RAM ドライブ」 といった文字列を取得する方法は、
.NETのライブラリには用意されていないのでしょうか?
IShellFolder::GetDisplayNameOfを呼び出すよりも楽に取得する方法はありますか?

577:デフォルトの名無しさん
08/03/10 12:15:00
ない。シェルをラップしたライブラリでも作れば商売になりそうな気がする。

578:デフォルトの名無しさん
08/03/10 13:40:18
これをスマートに書くとどうなりますか?

private string GetSpecialFolder(string name)
{
Environment.SpecialFolder esf = new Environment.SpecialFolder();
if (name == "Desktop")
{
esf = Environment.SpecialFolder.Desktop;
}
else if (name == "MyDocuments")
{
esf = Environment.SpecialFolder.MyDocuments;
}
return Environment.GetFolderPath(esf) + @"\";
}

579:デフォルトの名無しさん
08/03/10 13:52:40
>>578
Desktop,MyDocumentsをそこらじゅうで使うなら
class Desktop
class MyDocumentsと作って使うメソッドを定義
そこらじゅうで使わないならメソッド自体いらないと思う

580:デフォルトの名無しさん
08/03/10 14:48:37
>>578
private string GetSpecialFolder(string name)
{
return (Environment.SpecialFolder)TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name);
}

581:デフォルトの名無しさん
08/03/10 14:53:38
GetFolderPath忘れてた。
private string GetSpecialFolder(string name)
{
return Environment.GetFolderPath((Environment.SpecialFolder)TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name)) + @"\";
}

582:デフォルトの名無しさん
08/03/10 15:34:50
>>579-581
ありがとうございます。

ループの中で使うだけなのでソース上で多用するわけではないので短くある必要は
ないのですが色々と勉強になります。

特にこんなものがあるなんて!。
TypeDescriptor.GetConverter(typeof(Environment.SpecialFolder)).ConvertFromString(name))

583:デフォルトの名無しさん
08/03/10 17:21:03
何その裏技w

584:デフォルトの名無しさん
08/03/10 18:15:50
スレ違いなのですがZIP32J.DLLで進行状況のウインドウを出さないようにするコマンドって何かわかりませんか?
HP巡回しても行き着かない・・・

585:デフォルトの名無しさん
08/03/10 18:45:15
>>584
自己解凍しました

586:デフォルトの名無しさん
08/03/11 00:37:58
物凄く初心者な疑問でごめんなさい。
メモリリークってアプリケーションを終了させてもメモリが開放されない状態を言うんですよね?
ガベージコレクタはそうならないように解放してくれるんですよね?
だとしたらOSにガベージコレクタを実装すればメモリリークなんてなくなるんじゃないでしょうか???

587:デフォルトの名無しさん
08/03/11 00:47:49
プロセスが終了したら、そのプロセスが確保したメモリは全てOSが没収して別のプロセスが使えるようにする。

メモリリークってのは、プロセスが動いている間に不要になったメモリをOSに返還し忘れて、溜まっていく状態。

588:デフォルトの名無しさん
08/03/11 00:52:43
>メモリリークってアプリケーションを終了させてもメモリが開放されない状態を言うんですよね?
それもメモリリークに入りますが、C#スレとしてはその定義は間違っています。
>ガベージコレクタはそうならないように解放してくれるんですよね?
違います。
>OSにガベージコレクタを実装すればメモリリークなんてなくなるんじゃないでしょうか???
そうかもしてませんが、現実的ではありません。

589:デフォルトの名無しさん
08/03/11 03:57:57
C++なんかのガベージコレクタがない言語なんかは解放しないとプロセス終了後も残ってるよ。

590:デフォルトの名無しさん
08/03/11 04:07:48
配列じゃなくてもいいのですが・・・。

2つの配列があってその配列には1〜9の数字が記録されています。
そこから、1〜9の数字のうち両方で使われていない数字を抽出したいと思います。

たとえば、
A が 1,2,3,4
B が 3,4,5,6
だったら、
C 7,8,9
という答えを得たいです。
配列でもコレクションでもかまわないのですが、
そういう比較を簡単にできる方法はないでしょうか?
現在は配列をforで回して比較しています。

591:デフォルトの名無しさん
08/03/11 04:20:21
var Universe = Enumerable.Range(1, 9);
int[] A = { 1, 2, 3, 4 }, B = { 3, 4, 5, 6 };
var C = Universe.Except(A).Except(B);

592:590
08/03/11 05:36:03
>>591
ありがとうございます。
LINQはなんとなく避けていたのですが、そろそろ本腰を入れて勉強しないといけないみたいですね。

593:デフォルトの名無しさん
08/03/11 06:55:05
LINQは怖くないよ

594:デフォルトの名無しさん
08/03/11 09:38:49
どこにLINQが出てきたの?

595:デフォルトの名無しさん
08/03/11 09:47:19
Universe.Except(A).Except(B)はLINQのメソッド構文

596:デフォルトの名無しさん
08/03/11 12:20:45
LINQのメソッド構文というかただの拡張メソッドだよな
拡張メソッドがLINQの本体
ごくまれにクエリ式を使った方がシンプルに書けることがあるけど
普通は拡張メソッドを使った方が早いし見やすいし楽だ

597:デフォルトの名無しさん
08/03/11 12:29:12
拡張メソッドで書いてもクエリ式で書いてもLINQだよ
クエリを書けるようにする技術を総称してそう呼ぶだけで
別にC#にLINQっていう機能が付いてるわけじゃない

598:デフォルトの名無しさん
08/03/11 12:32:17
>>589
本当かよそれw

599:デフォルトの名無しさん
08/03/11 12:50:44
それが本当ならCでexit前のfree論争なんて起きるわけがない。

それどころか、WindowsもUnixもファイルハンドルとかの
OSに属するプロセス単位の資源はみんなプロセス終了時に片付けるぞ。

600:デフォルトの名無しさん
08/03/11 15:03:32
URLリンク(e-words.jp)
システムを再起動する=プロセスを終了させても解放されない(?)

601:デフォルトの名無しさん
08/03/11 15:06:11
「OSに属するプロセス単位の資源」でないものが時々問題になるわけだ。
OSの資源管理がタコだったりバグってたりするとその限りじゃなくなるわけだが。

602:デフォルトの名無しさん
08/03/11 15:42:13
なるほど

603:デフォルトの名無しさん
08/03/11 15:47:59
>>589
それは OS による。

>>596
LINQ =
 標準クエリ演算子(こういう(拡張)メソッドを用意しときなさいっていう規約)
 + クエリ式構文(C# / VB の言語拡張)

604:デフォルトの名無しさん
08/03/11 16:46:58
>>600
OSがメモリリークしてたらその通り。

605:デフォルトの名無しさん
08/03/11 16:59:37
アプリ終了時にメモリが解放されない場合はOSのバグであってプログラマに責任無しってことですか?

606:デフォルトの名無しさん
08/03/11 17:23:06
マネージドな世界に限ればyes

607:デフォルトの名無しさん
08/03/11 18:25:13
本当かよそれw
だとしたら「プロセス」ってそもそも何よw

608:デフォルトの名無しさん
08/03/11 20:10:05
Windowsはプロセスが終了したら勝手に解放してくれてる。
COMとかの細かいことはよく知らない。

609:デフォルトの名無しさん
08/03/11 20:27:27
アプリが終了しても、関連するプロセスが全て終了しているとは限らないのだ。
COMで起動したexcel.exeを終了してなくて、いつの間にか数十ものプロセスがメモリを占有してる、
という事例に出くわしたことがある。

610:デフォルトの名無しさん
08/03/11 20:30:32
アウトプロセスサーバなんて糞喰らえ

611:デフォルトの名無しさん
08/03/11 21:29:27
C# の場合でも一部イベントはちゃんとデタッチするように書いてあるね。たとえばこれとか。
URLリンク(msdn2.microsoft.com)(VS.80).aspx

612:デフォルトの名無しさん
08/03/11 21:33:05
それは別の話だよ
staticイベントにイベントハンドラを追加したまま放置すると
呼び出しターゲットのオブジェクトがGCの対象外になってメモリリークする

613:デフォルトの名無しさん
08/03/11 22:48:54
9xはシステムリソース残り何%って、心配したなあ。
プログラムを起動すると減り、終了すると戻るが
プログラムによっては元の値まで戻らないと当時聞いていた。
これがリークしたからなんだろうなと今だから思える。

614:デフォルトの名無しさん
08/03/11 23:24:46
String.Splitのオーバーロードを見てみると引数はChar[]かString[]でなければならない
みたいなんだけど、実際は

string str = "Hoge\tFuga\tFugo";
string[] val1 = str.Split('\t');
string[] val2 = str.Split(new char[]{ '\t' });

どちらも問題なくコンパイル及び実行が通ってしまうのだけどなんで?
また、どっちでも良いとなればみんなはどっちの書き方してる?

new char[]{ '\t' }を渡してやった方が良さそうかなとは思うんだけど、
str.Split('\t');と書く方がスマートにも見えてしまう。
まあどうでもいいことだと言われたらそれまでなんだが、どうも気になってしまう。

615:デフォルトの名無しさん
08/03/11 23:27:05
params

616:デフォルトの名無しさん
08/03/12 01:13:23
params char[]だと可変個の引数が許される
str.Split('a','b','c',...)でもいいし
配列を入れてもいい

617:デフォルトの名無しさん
08/03/12 02:45:15
staticメソッドとそうでないメソッドはどう使い分けるものなのでしょうか?

public class Hoge{
 public int AddOne(int val) {
  return val + 1;
 }
}
のような引数の値を処理して返すだけのメソッドの場合は
staticにするのが普通なのでしょうか?

618:デフォルトの名無しさん
08/03/12 03:01:36
>>616
なるほど。今までparamsの意味が分からなかったけどそういうことだったのね。
勉強になりました。サンクス。

619:デフォルトの名無しさん
08/03/12 03:10:33
monthCalendarで方向キーで日付を移動しても選択したことにならないので
強制的にDateChangedイベントで
monthCalendar1_DateSelected(monthCalendar1, new DateRangeEventArgs(monthCalendar1.SelectionStart, monthCalendar1.SelectionEnd));
のようにDateSelectedを呼び出しました。
期待通りに、方向キーでの移動でもDateSelectedを呼び出せましたが、
方向キーで移動後にマウスで他の日付をクリックすると範囲選択になってしまいます。
期待する動作はドラッグ以外で範囲選択してほしくないのですが、上記の方法自体が間違っている(常套ではない)のでしょうか?
個人的には強制的にイベントを呼び出すのは良くないと思うのですが他に方法が思いつきません。

620:619
08/03/12 03:27:22
問題提起箇所が複雑になってましたので整理させていただきます。
まず、方向キー入力後にマウスで日付をクリックすると範囲指定になるのはもともと仕様のようなので今回は質問から外します。
monthCalendar1_DateSelected(monthCalendar1, new DateRangeEventArgs(monthCalendar1.SelectionStart, monthCalendar1.SelectionEnd));
という強制的にイベントを呼び出す方法は正しいのでしょうか?という質問に絞らせてください。
過去ログを読んでみると>>363のような書き込みがあるのですが、
PerformClickのようなイベントをシミュレートするようなメソッドがどのイベントにも確実にあるのでしょうか?

621:デフォルトの名無しさん
08/03/12 08:26:16
619に書いてあるような「壮大な勘違い」をするのはOOPとイベンドドリブンの意味が
全然わかってないから。

遠回りでもまずOOPを理解することを考えた方がいいんじゃないの?

「イベントを呼び出す」、なんて普通に書いてるけど、
揚げ足取りじゃなくて意味不明だよ。
まあ初心者にはありがちな「勘違い」の類ではあるけど。

622:デフォルトの名無しさん
08/03/12 09:33:11
Guidやstringの場合は、まだ設定されていないという状態を
初期化のときに、Guid.Emptyなどを設定することによって
扱っているんですが、DateTimeのときはどうしたら良いのでしょうか?

DateTime.Emptyは無いですし‥‥
DateTime.MinValueを使っても良いもんでしょうか?

623:デフォルトの名無しさん
08/03/12 10:03:33
DateTime?

624:デフォルトの名無しさん
08/03/12 10:16:22
>>617
基本的にはそんな感じ。

double X = 3.14159265;

string str = X.ToString("F3"); //インスタンスメソッド
double newX = double.Parse(str); //staticメソッド

クラスのインスタンスにより異なる動作をさせたければインスタンスメソッドにする。
double.Parseメソッドがインスタンスメソッドだったらちょっと変でしょ?

625:デフォルトの名無しさん
08/03/12 10:22:09
>>622
623も書いているけどnull許容型。

626:デフォルトの名無しさん
08/03/12 10:24:09
>>619
OOPっていうかイベントはそんなに単純じゃないよ
君がやってるのはイベントハンドラ用のメソッドを呼び出してるだけ
別に問題ないけどイベントハンドラに直接処理を書かずに他のメソッドを作って
それをそれぞれのイベントハンドラから呼び出すようにした方が綺麗

627:デフォルトの名無しさん
08/03/12 10:56:22
>>623
>>625

DateTimeってstructで値型だから、nullにはならないのではないでしょうか?

628:デフォルトの名無しさん
08/03/12 10:57:04
null にならないから Nullable でラップするんだお

629:デフォルトの名無しさん
08/03/12 10:58:21
int?とか書くとintまたはnullな型が出来る
DateTime?でnullになるDateTimeが出来る
値型じゃなくてclassだけど

630:デフォルトの名無しさん
08/03/12 11:01:13
nullableは値が与えられているかどうかのフラグと値をもった値型だよ
==nullで比較できるのは構文糖衣

631:デフォルトの名無しさん
08/03/12 11:01:19
>>627
URLリンク(msdn2.microsoft.com)(VS.80).aspx

>>629
Nullable<T>は構造体だから値型だぞ。

632:デフォルトの名無しさん
08/03/12 11:07:58
VS2005で
URLリンク(uchukamen.com)
このようなメニューを作りたく思い、MenuStripを作り
RenderModeをSystemにしてみましたが出来ません。
VS2005では無理なのでしょうか?
よろしくお願いします。

633:627
08/03/12 11:09:15
皆さんどうも有り難うございます。
nullableって、関数の引数でnullを許容するための構文だと思っていて、
何にでも使えるとは知りませんでした‥‥。びっくり。

どうも有り難うございました。

634:デフォルトの名無しさん
08/03/12 11:11:45
>>632
何が出来ないんだよ。

635:デフォルトの名無しさん
08/03/12 11:22:52
>>634
レス有り難うございます。
URLリンク(sakuratan.ddo.jp)
こうなります。
URLリンク(uchukamen.com)より文字が大きいのでなんとかしたいです。

636:デフォルトの名無しさん
08/03/12 11:40:18
ツールボックスを右クリック→アイテムの選択→MainMenu
お勧めしない

637:デフォルトの名無しさん
08/03/12 11:41:29
>>635
そのサンプルはMenuStripじゃなくてMainMenuなんじゃね?
知らんけど。

MenuStripならToolStripSystemRenderer継承したクラス作って
好きなように描画するようにしたらいい


638:デフォルトの名無しさん
08/03/12 11:42:04
VisualStyleを切ればいいよ

639:デフォルトの名無しさん
08/03/12 11:56:15
>>636
ありがとうございました。
希望の動作を実現することが出来ました。
ところで、どうしてお勧めできないのですか?
>>638
menuStripにVisualStyleというプロパティはありませんでした。

640:デフォルトの名無しさん
08/03/12 11:58:49
MenuStripに取って代わられたから
Obsolete来ても知らないよ

641:デフォルトの名無しさん
08/03/12 14:04:30
拡張メソッドについての質問なんですが、

class Test

   static int GetDigit(this int num)
   {
       return (int)Math.Log(num, 10) + 1;
   }


という拡張メソッドがあったとき、C#3.0からはインスタンスメソッドとして使えますが、ライブラリにしてC#2.0から使うときは
インスタンスメソッドとして使えるのでしょうか?それとも、Testクラスのstaticメソッドとして使うことになるのでしょうか?

642:デフォルトの名無しさん
08/03/12 14:05:11
当然後者

643:デフォルトの名無しさん
08/03/12 15:23:22
あるフォルダにあるファイルの一覧を取得した後に、
そのリストからワイルドカードで検索するにはどうしたら良いのでしょうか。

string[] fileListText = Directory.GetFiles(@"C:\Hoge\", "*.txt");

と同じことを、

string[] fileListAll = Directory.GetFiles(@"C:\Hoge\", "*");

とした後に、fileListAll の中から "*.txt" のファイル名のみ抽出して fileListTex を作成したいのです。


644:デフォルトの名無しさん
08/03/12 15:59:40
fileListText = fileListAll.Where(s => Path.GetExtension(s.ToLower()) == ".txt").ToArray();

645:デフォルトの名無しさん
08/03/12 16:08:17
string[] fileListText = Array.FindAll(fileListAll, item => System.IO.Path.GetExtension(item).ToLower() == ".txt");
でも良い

646:619
08/03/12 16:37:49
>>621
はい、多分そうじゃないかと思ったのでヒントを頂きたく質問しました。

>>626
なるほど。
それだとごく簡単に共通の事が出来ますね。
PerformClickのようなものがあるので他のイベントにも同じような呼び出しでいいのかと思いました。
とすると共通の処理がないときでもイベントハンドラに直接処理を書くのは良くないのですか?
それとも共通の処理が必要になった時にメソッドを分ければいいのでしょうか??

647:デフォルトの名無しさん
08/03/12 17:10:58
>>646
>とすると共通の処理がないときでもイベントハンドラに直接処理を書くのは良くないのですか?
いいえ。直接処理を書いて問題ないです。

>それとも共通の処理が必要になった時にメソッドを分ければいいのでしょうか??
メソッドを外に書いてそれを呼び出す方がスマートになる場合もあるし、
わざわざそんなことせんでも良い場合もある。そんなに気にしなくていいよ。
俺なんかはbutton1_Click(null, null)なんかで呼び出したりするのは別に汚いともなんとも思わんし。
if(result==false)と書くか、if(!result)と書くかみたいなもんで、ただの趣味の問題。
気にするだけ無駄だと思う。


648:デフォルトの名無しさん
08/03/12 17:16:30
さすがにbutton2のイベントハンドラからbutton1_Clickを呼び出すのはちょっと…

649:647
08/03/12 17:45:59
>>648
それも趣味の問題だと俺は思うぞ。
例えば、

void button2_Click(object sender, EventArgs e)
{ button1_Click(null, null); }
void button1_Click(object sender, EventArgs e)
{ /*処理*/ }

こういうように書くより、

void button2_Click(object sender, EventArgs e)
{ SampleMethod(); }
void button1_Click(object sender, EventArgs e)
{ SampleMethod(); }
void SampleMethod()
{ /*処理*/ }

こう書くべきってことを言いたいんだと思うが、
後者の書き方でもまだ汚いと思うやつ(例えば俺)もいるってことだ。

次に俺の書き方を示す。




650:デフォルトの名無しさん
08/03/12 17:52:30
俺だったらこう書く。

public Form1()
{
InitializeComponent();

//イベント
button1.Click += new EventHandler(Button1or2_Click);
button2.Click += new EventHandler(Button1or2_Click);
}

void Button1or2_Click(object sender, EventArgs e)
{
//処理
}

つまり、処理を行うメソッドを外部に記述しても、それを呼び出すためだけのメソッドを記述している時点で
無駄があると感じる人間もいるんだわ。
処理を行うメソッドを直接イベントに紐付けて、デリゲートがメソッドを直接呼び出す方がスマートに感じるということ。

当然反論もあるかもしれん。イベント引数を扱いたいときなどはこの方法ではまずい場合もあり得る。
要するに俺が言いたいことは、最初から言っているとおり趣味の問題だってこと。
自分が綺麗で可読性があると思えるいうコードを書けばいいじゃんって言うだけの話。

コードはこう書くべきなんて他人がどうこう言うもんじゃない。

651:デフォルトの名無しさん
08/03/12 18:18:39
>>647-650
ありがとうございます!
ということは>>620のような書き方でも問題ないということですか??

イベントの引数が違う時は>>650のようには出来ないので>>649のようになると思うのですが、
>>620でも趣味の範囲という解釈でいいんでしょうか。

652:647
08/03/12 18:25:17
>>651
俺はそんなんでいいと思うけどね。

653:デフォルトの名無しさん
08/03/12 18:25:49
>>652
ありがとうございました。

654:デフォルトの名無しさん
08/03/12 18:35:42
>>642
ありがとうございます。

655:デフォルトの名無しさん
08/03/12 18:40:02
>>651
ちなみに、強制的にイベントを発生させるということを厳密に行いたいのであれば、
monthCalendarを継承したカスタムクラスで、イベントデリゲートを呼び出してくれるようなメソッドを公開する。

public PerformDataSelected(object sender, DateRangeEventArgs e){
 if(this.DataSelected != null)
  this.DataSelected(sender, e);
}

ほんで外からそのメソッドを呼び出せばいい...と思う。
もしかしたら俺が何か勘違いしてるかもしれん。
興味あったら試してみて。

656:デフォルトの名無しさん
08/03/12 18:40:52
>>655
OnDataSelectedを呼ぶべき

657:デフォルトの名無しさん
08/03/12 18:40:59
最初は動けば良いのではないかと、そういうものは楽しさの中から築きあげて行けば良いし。

658:655
08/03/12 18:41:32
さっそくミス発見。

public void PerformDataSelected(object sender, DateRangeEventArgs e){
 if(this.DataSelected != null)
  this.DataSelected(sender, e);
}

voidが抜けてたわ

659:655
08/03/12 18:42:43
>>656
ほうほう。
実はmouthCalendarというものを使ったことがないもんでなw
勉強になりますw

>>651
だそうです。

660:デフォルトの名無しさん
08/03/12 18:47:04
MonthCalendarとか関係なくイベントはクラス外から直接呼べない
だから派生クラスから呼び出す手段としてOn**メソッドを用意する

661:デフォルトの名無しさん
08/03/12 18:50:17
>>650
趣味の問題、か。
議論の余地なく間違ってると思うよ。
こういう人は「抽象化」の意味と意義がわかってないんじゃないの。

662:デフォルトの名無しさん
08/03/12 19:00:45
「状況に応じて適切に判断」かな
好みじゃなくて使い分けるもの

663:655
08/03/12 19:08:09
>>660
あらま、やはり勘違いしてたみたいね。
派生クラスからでもイベントは呼べないのか。
失礼しました。
>>655はスルーして下され。

664:デフォルトの名無しさん
08/03/12 19:15:39
そもそもイベントって「呼ぶ」ものじゃないでしょw
英語だとInvokeとかRaiseだから「起こす」とでも言うのが正解じゃないの?

665:デフォルトの名無しさん
08/03/12 19:19:08
>>621 = >>661 だと思うけど反論あるなら具体例を示すべきだと思うよ

666:643
08/03/12 19:34:45
>>644 >>645
そのままでは "=>" が上手く行かなかったのですが、

string[] fileListText = Array.FindAll(
fileListAll,
delegate (string item) { return ( System.IO.Path.GetExtension(item).ToLower() == ".txt" ); }
);

でいけました。

ありがとうございました。


667:デフォルトの名無しさん
08/03/12 19:43:21
匿名メソッドほんとに冗長だな
設計時から経過措置として認識されてて,後で捨てても影響が出ないように
明示的すぎる書き方になってるのかな

668:デフォルトの名無しさん
08/03/12 19:46:02
>>665
ええっと、反論ってのは具体例を挙げて行うものなんでしょうか?
それとも理由を添えろって言いたいの?

まあいいやまず>>661で言いたかったことをはっきりしておくと、要するに
>>649の前者のコードは議論の余地なく×で、これは趣味の問題なんかではないということ。

後者のコードは普通は△だが、確かにこのように書いた方がわかりやすい場合も
稀にあるかもしれないことは認める。

通常は>>650の書き方を選択すべき。

>>649の前者がダメなのは、
(1) button1_Click()が羊頭狗肉になってる。
(2) だからbutton2_Click()の処理内容が把握しづらい。

669:デフォルトの名無しさん
08/03/12 20:21:11
>>668
シグネチャが違うイベントの場合を示せよ。

670:デフォルトの名無しさん
08/03/12 20:28:45
だから,好みの問題じゃないってことだろ
判断基準は人それぞれとしても,場合によって適切に使い分けるもの

671:デフォルトの名無しさん
08/03/12 20:33:14
なんだよ示せよって偉そうにw
なんでこういう日本語も満足に使えないたわけってのは例外なく口調が偉そうなのかね。

シグネチャが違うってどういうこと?
>>668に「通常は」と書いたつもりだけど。
EventHandler<T>と違うシグネチャのイベントを扱うのって通常かな。

672:デフォルトの名無しさん
08/03/12 22:02:39
>>655>>663
OnDateSelected使えって指摘は既出の通りで、
引数として渡すイベントソース・データを外部から取るのはだめ
ソースはthis固定、データはコンストラクタの引数だけ外部から取って自前で生成
その例だとこんな感じ

public PerformDateSelected(DateTime start, DateTime end) {
  OnDateSelected(this, new DateRangeEventArgs(start,end));
}

673:デフォルトの名無しさん
08/03/12 22:50:08
>>670
>判断基準は人それぞれとしても,場合によって適切に使い分けるもの

それこそが、まさしく好みとか趣味という言葉の指し示すものである。

674:655
08/03/12 23:08:50
>>672
なるほど、勉強になった。Thx

675:デフォルトの名無しさん
08/03/12 23:15:51
>>671
普通にあるでしょ。
例えばbutton1が押された時と、textbox1上でエンターキーが押された時に同じ処理をしたい時とか。
この場合は
private void button1_Click(object sender, EventArgs e)
{foo();}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{foo;}
}
のように>>649の後者の書き方になるんじゃない?

676:デフォルトの名無しさん
08/03/12 23:17:25
あほ

677:デフォルトの名無しさん
08/03/12 23:30:09
ばか

678:デフォルトの名無しさん
08/03/12 23:38:10
分布図

679:デフォルトの名無しさん
08/03/13 11:59:03
delegate int Hoge();
Hoge hoge;

hoge += foo1;
hoge += foo2;
hoge();

とするとfoo1, foo2と呼ばれfoo2の返り値だけが返りますが
hogeに登録されているものを個々に呼び出し
それらの返り値を得たいのですが、どうやるのでしょうか?

680:デフォルトの名無しさん
08/03/13 12:03:34
>>679
GetInvocationListでDelegate[]を取得するとか。

681:デフォルトの名無しさん
08/03/13 12:09:24
>>679
素直にrefまたはoutで渡せばいいじゃん。

682:デフォルトの名無しさん
08/03/13 12:28:19
>>680
thx
Delegateクラスのメンバ一覧見てたのに全然気が付かなかった・・・

683:デフォルトの名無しさん
08/03/13 16:31:24
属性の書き方なんですが、下記の2つに違いはあるのでしょうか?

[Description("ほげほげ"), DefaultValue(false)]
public bool HogeHoge {〜}

[Description("ほげほげ")]
[DefaultValue(false)]
public bool HogeHoge {〜}

684:デフォルトの名無しさん
08/03/13 16:42:07
ない

685:デフォルトの名無しさん
08/03/14 01:14:17
Hoge hoge = new Hoge(); // 1
hoge = new Hoge(); // 2
hoge = new Hoge(); // 3
hoge = new Hoge(); // 4
hoge = new Hoge(); // 5

とやったときに1~4までのインスタンス解放を気にする必要が無いってのが
ガーベジコレクト機能を持つ言語の利点という理解でよろしいでしょうか?


686:デフォルトの名無しさん
08/03/14 01:18:05
YES

687:デフォルトの名無しさん
08/03/14 01:48:14
>>671
早く答えろよ

688:685
08/03/14 01:53:09
>>686
ありがとうございました。

689:デフォルトの名無しさん
08/03/14 02:19:53
なんからのネイティブリソースを確保してたらアウトだけどね

690:デフォルトの名無しさん
08/03/14 04:06:28
private void Performed(object sender, EventArgs e)
{
処理;
}
でいいじゃない。
やらないけど。


691:デフォルトの名無しさん
08/03/14 08:30:07
あほ

692:デフォルトの名無しさん
08/03/14 08:32:10
なんであほなのか詳しく

693:デフォルトの名無しさん
08/03/14 08:54:51
テキストを画像に変換したいのですが、
どのように処理したらいいでしょうか?
また、変換後の画像の大きさ(高さ・幅)は取得できるでしょうか?

低レベルですみませんがよろしくお願い致します。

694:デフォルトの名無しさん
08/03/14 09:06:28
>>693
> テキストを画像に変換したいのですが、
意味がわからん

695:デフォルトの名無しさん
08/03/14 09:12:38
GDI+

696:デフォルトの名無しさん
08/03/14 09:17:15
>>694
例えば「abcde」と入力したら、
abcdeと書かれた画像を生成することです

697:デフォルトの名無しさん
08/03/14 09:22:29
System.Drawing

698:デフォルトの名無しさん
08/03/14 09:24:50
>>697
ありがとうございます
生成後のBitmapのサイズは取得できますか?

699:デフォルトの名無しさん
08/03/14 09:40:29
お前には無理。

700:デフォルトの名無しさん
08/03/14 10:05:18
>>698
TextRendere.MeasureTextとかで。

701:デフォルトの名無しさん
08/03/14 10:09:41
>>700
ありがとうございます!
本当に助かりました!

702:デフォルトの名無しさん
08/03/14 10:14:34
マイクロソフトがC#用ネイティブコンパイラの製作を発表
これでC#は事実上最強言語になったわけだ
URLリンク(an.to)

703:デフォルトの名無しさん
08/03/14 10:24:23
皆さん、>>702はクリックしないようにね。

704:デフォルトの名無しさん
08/03/14 10:27:37
>>702
ただの釣り
開くとビルゲイツの若かりしころの写真が出てくるだけ

705:デフォルトの名無しさん
08/03/14 10:32:03
ウィルスバスター2008役にたたねぇorz

706:デフォルトの名無しさん
08/03/14 10:36:19
これって何?
ググってみたらan.to/?で始まるのがあちこちに張りまくられてるみたいだけど。

707:デフォルトの名無しさん
08/03/14 10:51:51
>>704
写真が出てくるだけじゃないんだが、
telnetつかってごにょごにょっしようとする。

708:デフォルトの名無しさん
08/03/14 10:54:09
>>706
「これ」が何を指しているのか分かりかねるが、
URLのことなら書いてる通りの転送サービスじゃないのか
内容のことなら見てないので知らない

709:デフォルトの名無しさん
08/03/14 11:29:51
ProcessStartInfoのArgumentsにスペースを含むファイルを指定しようとしましたが出来ません...

710:デフォルトの名無しさん
08/03/14 11:54:44
""で囲め

711:デフォルトの名無しさん
08/03/14 12:04:00
どうもありがとうございました。

712:デフォルトの名無しさん
08/03/14 12:20:18
GDI+で放射状にグラデーションをかける方法はありますか?
WPFのRadialGradientBrushみたいなことがしたいのですが

713:712
08/03/14 12:28:37
自己解決
using (GraphicsPath path = new GraphicsPath()) {
 path.AddEllipse(0, 0, width, height);
 using (PathGradientBrush brush = new PathGradientBrush(path)) {
 brush.CenterColor = Color.White;
  brush.SurroundColors = new Color[] { Color.Red };
  g.FillEllipse(brush, 0, 0, width, height);
 }
}

714:デフォルトの名無しさん
08/03/14 12:50:20
たびたびの質問申し訳ありません。
SendKeysでスペースキーを送信したいのですがどのようにすればよいのでしょうか。
よろしくお願いします。

715:デフォルトの名無しさん
08/03/14 13:08:58
>>714
半角スペースをSendすればいい予感がしました

716:デフォルトの名無しさん
08/03/14 13:13:59
>>715
10回連続で送信したく思い、
SendKeys.SendWait("{ 10}");
のそうにやってみたわけですが出来ないのでここに書き込みました。

717:デフォルトの名無しさん
08/03/14 13:18:52
>>716
10回forを回すとか10個の半角スペースをSendすればいい予感がしました

718:デフォルトの名無しさん
08/03/14 13:19:33
>>717
それ以外に方法が無いのならばそれでしますが...

719:デフォルトの名無しさん
08/03/14 13:24:04
それ以外に方法がないんだが。

720:デフォルトの名無しさん
08/03/14 13:26:37
どうもありがとうございました。

721:デフォルトの名無しさん
08/03/14 15:25:46
このスレの流れを見てるとなんか面白い

722:sage
08/03/15 00:46:41
くだらない質問ですが、ゲームをつくりたいとおもって
とりあえずC#でゲームをつくりたいとおもうのですが、
どのようにして習得(勉強)したほうがよいのでしょうか?
ネットでしらべるとC#の手引きのようなものがのってますが、
そういうものでいいのでしょうか?
おしえてください。

723:デフォルトの名無しさん
08/03/15 00:48:38
>>722
諦める マジオヌヌメ


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4333日前に更新/241 KB
担当:undef