トップページ⇒tech
1001コメント308KB

C♯, C#相談室 Part35

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/03(金) 03:07:45
(#゚ー゚)つ < C#、.NETの話題はこちらでどうぞ。

前スレ
C♯, C#相談室 Part34
http://pc8.2ch.net/test/read.cgi/tech/1157549657/

過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0486デフォルトの名無しさん2006/11/22(水) 21:29:33
だな
0487デフォルトの名無しさん2006/11/22(水) 21:39:42
>>485
GetDCしてデバコンに自前で描画すればイイだけのことでは?
0488デフォルトの名無しさん2006/11/22(水) 21:55:17
>>485
ListViewGroup ってコントロールじゃないし

ListViewのオーナー泥でアイテムのグループみて自前でやる。
0489デフォルトの名無しさん2006/11/22(水) 22:04:15
DrawItem イベントはあるけど DrawGroup イベントがないのよ
0490デフォルトの名無しさん2006/11/23(木) 10:39:26
ToolStripMenuItem の派生クラスをデザイナで貼り付けるときに
DesignMode プロパティが true にならない現象がおきます

[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.All)]
public class ToolStripMenuItemDerived : ToolStripMenuItem{
  public ToolStripMenuItemDerived() : base(){
    base.Text = "aaa";
    if (base.DesignMode) return;
    base.Text = "bbb";
  }
}

上記の ToolStripMenuItemDerived をデザイナで貼り付けたときには
aaa と表示されずに bbb と表示されてしまいます
仕方がないので
base.Text = "aaa";
#if ! DEBUG
base.Text = "bbb";
#endif
としデザイナを使うときはコンフィギュレーションを Debug にしています
もっとスマートな方法はないものでしょうか
0491デフォルトの名無しさん2006/11/23(木) 10:40:36
>>490
ワロタw
0492デフォルトの名無しさん2006/11/23(木) 10:49:01
>>490
そんなコーディングがまず必要なのかが(ry

ttp://support.microsoft.com/kb/839202/ja
0493デフォルトの名無しさん2006/11/23(木) 13:14:10
必要な場合もあるでしょ。
LicenseManager.CurrentContext.UsageMode == LicenseUsageMode.Designtimeとかでうまくいかない?
0494デフォルトの名無しさん2006/11/24(金) 12:11:23
3.0のスケジュールについて情報ないですか?
0495デフォルトの名無しさん2006/11/24(金) 12:38:22
C#3.0のことだとしてOrcasと一緒に出すとMSは主張
0496デフォルトの名無しさん2006/11/24(金) 12:58:31
ここにかいてるんだからC#3.0のことでしょ。でOrcasいつ?
0497デフォルトの名無しさん2006/11/24(金) 14:32:01
protected TcpListener _tcpListener;


// TCPリスナーを生成する
_tcpListener = new TcpListener(ip, portnb);

// TCPリスナーを開く
_tcpListener.Start();

// 保留中の接続要求があるかどうかを確認する
if (_tcpListener.Pending() == true)
{
// クライアントからの接続要求を受け入れる
_tcpClient = _tcpListener.AcceptTcpClient();

// KeepAliveの設定
_tcpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, 30000);
}

上記のようにサーバー側でクライアントの接続を受け入れて
TCPにて伝文の送受信を行っています。

中継装置(HUB)を経由して接続している時、クライアントのLANケーブル
が抜けた(切断)されたことを検出する為、KeepAliveの機能を用いる
方向で実装していますが・・・検出できませんでした。
おそらくKeepAliveの使い方が悪いと思うのですが・・・どなたかご存知ないでしょうか?
0498デフォルトの名無しさん2006/11/24(金) 15:19:15
Reflectionをつかうとprivateだろうがinternalだろうが値を設定・取得できるってことでOKですか?
0499デフォルトの名無しさん2006/11/24(金) 18:24:14
>>497です。自己解決しますた。

byte[] inBuffer = new byte[12];

BitConverter.GetBytes(1).CopyTo(inBuffer, 0); // スイッチ
BitConverter.GetBytes(30000).CopyTo(inBuffer, 4); // Interval

_tcpClient.Client.IOControl(IOControlCode.KeepAliveValues, inBuffer, null);

上記の方法で30秒後に切断を検出できました。
DOS窓のnetstatでもidolになりました。
0500デフォルトの名無しさん2006/11/24(金) 18:43:36
ListやDictionaryなどのGeneric型のタイプを持ってくる場合、FullNameはどのように指定したらいいんでしょう?
0501デフォルトの名無しさん2006/11/24(金) 18:48:33
>>500
typeof(List<>).FullName: System.Collections.Generic.List`1
typeof(Dictionary<,>).FullName: System.Collections.Generic.Dictionary`2
0502デフォルトの名無しさん2006/11/24(金) 19:20:54

DataRowのインスタンスが2つあって、これらが等しいか(各列の値がすべて等しいか)
を調べるにはどうすればよいのでしょう?

DataTableに、DataRowインスタンスを追加するときに、同じ内容のものがあった場合は、
追加しない、という処理を行おうと思ってます。
0503デフォルトの名無しさん2006/11/24(金) 20:34:43
各列の値がすべて等しいか調べればいいんじゃね?
05045022006/11/24(金) 22:02:49
その方法しかないんですかね。。?
とりあえず、Rows[n].ItemArrayを一個一個しらべて
すべて同じだったら等しい
という方法ではできましたけど、
ItemArrayを配列として比較するとダメなんですよね。
RowとRowのオブジェクト同士を比較できる便利な関数とかってないものか。
0505デフォルトの名無しさん2006/11/24(金) 22:13:12
>>501 さんくすこ。
0506デフォルトの名無しさん2006/11/24(金) 22:15:30
どういたしまむこ。
0507デフォルトの名無しさん2006/11/24(金) 22:25:35
>>504
その、「RowとRowのオブジェクト同士を比較できる便利な関数」というのも
結局同じことをするんじゃね?

それとも、Cellの内容が変わるたびに中身を構造体にでも突っ込んで
隠しCellにGetHashCodeでハッシュもっておくとかしたら?
面倒くさそうだけど。
0508デフォルトの名無しさん2006/11/24(金) 23:02:11
DataTable.Constraintsに全列を含んだUniqueConstraintを追加して
Rows.AddしたときにConstraintExceptionをcatchするとか
0509デフォルトの名無しさん2006/11/24(金) 23:11:49
C#で遊び始めて三ヶ月の者です。
質問なのですが、VSで言うプロパティウインドウのようなものを作ることが出来る
コントロールなどは既にあるのでしょうか?

今やりたい事は、2列のテーブルで各プロパティを入力するんですが、
行によってコンボボックスに設定出来るようにしたいんです。

やはり自作するしかないのでしょうか?
0510デフォルトの名無しさん2006/11/24(金) 23:13:42
>>509
System.Windows.Forms.PropertyGrid
FAQ中のFAQ。適当にググって
0511デフォルトの名無しさん2006/11/24(金) 23:17:39
ttp://support.microsoft.com/kb/403844/ja
PGが起動してるときだけスクリーンセーバが動かないPGを作ってるんだけど
リンク先のやり方だとパスワード保護されてるとうまく動かないんです
パスワード保護の時って発行されてるメッセージって違うみたいですが
どうすればフック出来るか知りたいんですが
0512デフォルトの名無しさん2006/11/24(金) 23:29:59
Win32APIに詳しいお兄さんのいるスレにでも行ったほうがいいんじゃね?
0513デフォルトの名無しさん2006/11/24(金) 23:35:15
>>511
レジストリの値書き換えてシェルに更新メッセージ送って、
終了時にレジストリ戻す……という荒技をどこかで見た希ガス
0514デフォルトの名無しさん2006/11/24(金) 23:37:03
そんなプログラムは使いたくないな・・・
0515デフォルトの名無しさん2006/11/24(金) 23:39:01
禿同。途中で死んだらそのままなんだろう?
0516デフォルトの名無しさん2006/11/24(金) 23:45:44
レジストリなんて、なくなればいいのに・・・諸悪の根源
0517デフォルトの名無しさん2006/11/24(金) 23:49:10
レジストリそのものはかなり優秀なデータベースなんだがな。
0518デフォルトの名無しさん2006/11/25(土) 00:06:32
>>514
おいらもこんなPG作りたくないっす
でもね・・・・。
レジストリはいじりたくないですね
APIスレに行ってみます
0519デフォルトの名無しさん2006/11/25(土) 00:13:13
レジストリを肥大化させてHDDをパッツンパッツンにするソフトでも作るか
0520デフォルトの名無しさん2006/11/25(土) 01:16:57
>>519
sexy dynamite!
0521デフォルトの名無しさん2006/11/25(土) 01:20:04
>>511
SystemParametersInfo
で制御すれば
0522デフォルトの名無しさん2006/11/25(土) 10:19:39
内部的にレジストリいじくるんでしょ
0523デフォルトの名無しさん2006/11/25(土) 12:52:51
>>510
あったんですか……気付きませんでしたorz

ありがとうございました!
0524デフォルトの名無しさん2006/11/25(土) 13:24:39
ラジオボタンじゃなくてコンボボックスにしよう、いやリストボックスにしよう、やっぱラジオボタンがよかったかな…

このたびにソース修正するのがめんどくさいなー

どうすればいいですか?
0525デフォルトの名無しさん2006/11/25(土) 13:33:02
とりあえず全部つっこんで
enable/disableで使わない方を消しておけ
0526デフォルトの名無しさん2006/11/25(土) 14:26:40
IDE使え
0527デフォルトの名無しさん2006/11/25(土) 14:35:53
井出らっきょ?
0528デフォルトの名無しさん2006/11/25(土) 14:38:26
>>524
計画を立ててからフォームを組むようにする。
0529デフォルトの名無しさん2006/11/25(土) 14:52:51
dataGridView1_CellDoubleClick(sender s, DataGridViewCellEventArgs e)
(DataGridView上をダブルクリックした時のイベント)
をコンテキストメニューをクリックした所から呼び出したいんだけど、
どうすればいいですか?

private void メニューをクリックToolStripMenuItem_Click(object sender, EventArgs e)
{
this.dataGridView1_CellDoubleClick(this,DataGridViewCellEventArgs.Empty);
}
とか無理やりDataGridViewCellEventArgs.Emptyを引数にとってもダメでした。
private void メニューをクリックToolStripMenuItem_Click(object sender, EventArgs e)
{
this.dataGridView1_CellDoubleClick(this,DataGridViewCellEventArgs.Empty);
}
とか無理やりDataGridViewCellEventArgs.Emptyを引数にとってもダメでした。
0530デフォルトの名無しさん2006/11/25(土) 16:05:51
>>464

亀レスだけど、

.NET製のわりと大規模なアプリ
http://www.getpaint.net/index2.html
0531デフォルトの名無しさん2006/11/25(土) 17:17:42
>>525
賢い
0532デフォルトの名無しさん2006/11/25(土) 17:24:46
>>530
そのPaint.NETはこのスレだかで知ったんだけど、
使ってみると意外といいね。
0533デフォルトの名無しさん2006/11/25(土) 17:32:33
>>529
イベントプロパティを呼び出すのは無理。
0534デフォルトの名無しさん2006/11/25(土) 20:14:59
>>529
何がダメなのか分からんが。
普通はメソッド化して両方でそれを呼ぶ
0535デフォルトの名無しさん2006/11/25(土) 22:27:11
>>530
ビミョーなアプリですね

0536デフォルトの名無しさん2006/11/26(日) 11:47:57
Paint.NETはMITだかどっかの大学生が中心となって作ったアプリじゃなかったっけ?
0537デフォルトの名無しさん2006/11/26(日) 12:54:29
>>535
確かにw
0538デフォルトの名無しさん2006/11/26(日) 13:15:28
GIMPよりかは使えるよ
0539デフォルトの名無しさん2006/11/26(日) 13:27:33
なぜGIMPと比較するかねえw
あれは失敗だったと開発者も認めているのにw
0540デフォルトの名無しさん2006/11/26(日) 14:45:04
え!?、開発者がそんなこといってるの?
05414742006/11/26(日) 17:56:33
お願いします。
05424742006/11/26(日) 18:02:33
http://support.microsoft.com/kb/215462/ja

現在、この頁を見ています。
確かに、この頁に記載されている通り、
WORD97からのアップグレードとして
WORD2003をインストールしました。

しかし、すでにアップグレードしている状態で、
このような97に関連したエラーが出ているのが
とても不思議です・・・
0543デフォルトの名無しさん2006/11/26(日) 18:05:42
更地のWindowsを用意してそこにWord2003をインストールしてみれば?
05444742006/11/26(日) 18:21:31
http://kasarfa.com/modules/php/bbs/ubbs/image/1164532848.gif

エラーの詳細をうp致しました。
0545デフォルトの名無しさん2006/11/26(日) 18:23:23
>>544
それができるってことは次はもちろん何をうpすればいいかわかってるだろうな
0546デフォルトの名無しさん2006/11/26(日) 18:23:33
画像壊れてないか?
俺だけなのか?
0547デフォルトの名無しさん2006/11/26(日) 18:24:51
ど、どうしろと
0548デフォルトの名無しさん2006/11/26(日) 18:29:01
C#のバグじゃないですかね・・・?
まだできたてほやほやの言語だし可能性はある
詳細と再現方法をテキストで作ってMSに報告するとよろし
0549デフォルトの名無しさん2006/11/26(日) 18:30:34
うん
0550デフォルトの名無しさん2006/11/26(日) 18:35:24
>>544
8007007eが出てるってことは、何かがCLSIDの関連付けあたりを破壊したんだろう。

セキュリティソフトをアンインスコしてから、Officeの自動修復を試してみるとどうじゃろう。
05514742006/11/26(日) 18:36:35
いま、regeditで該当するCLSIDを眺めてる・・・
でもどうしようもない・・・
みんな、コメントありがとう!!
明日の朝までにはなおさんと!!!!
05524742006/11/26(日) 18:40:46
>>550
コメントありがとう。
僕も、ノートンアンチウィルスのアンインストールが
原因だったと思っています。
このアンインストールの前後に、今回の不具合が発生しているので。

でも、このノートンアンチウィルスを
アンインストールした後に、
WORD2003は再インストールしましたし、
修復っていうのも何度か渡来しております。

でも、そういえば、2003をインストールする前に
予めインストールしておいた97には、
今回は、一切何もふれませんでした。

ひょっとすると、97も完全にアンインストールして
(というか、97はもうPCにないよな気がします。)
05534742006/11/26(日) 18:42:47
HKEY_CLASSES_ROOT\CLSID\{000209FF-0000-0000-C000-000000000046}
というCLSIDを削除してWORD2003をアンインストールし、
又は、WORD2003をアンインストールしてから、このCLSIDを手動で削除し、

そのあとに、再度、WORD2003をインストールしなおせば直るかなぁ・・・・。
05544742006/11/26(日) 18:45:24
HKEY_CLASSES_ROOT\CLSID\{000209FF-0000-0000-C000-000000000046}
のCLSIDは、↓このようになっております。(一応、うpしてみました。)

http://kasarfa.com/modules/php/bbs/ubbs/image/1164534281.gif
05554742006/11/26(日) 18:46:21
>>545
レスありがとうございます。
えっと、次は何をうpすればよろしいでしょうか。
0556デフォルトの名無しさん2006/11/26(日) 18:46:34
MSに聞くのが一番手っ取り早い
0557デフォルトの名無しさん2006/11/26(日) 18:46:53
>>553
聞く前に試せよ
05584742006/11/26(日) 18:50:34
>>557
いま、試しています。
WORD2003を完全アンインストールしました。
05594742006/11/26(日) 18:51:26
HKEY_CLASSES_ROOT\CLSID\{000209FF-0000-0000-C000-000000000046}

WORD2003をアンインストールしたら
このCLSIDは、併せて削除されていました。
05604742006/11/26(日) 18:52:52
C:\Documents and Settings\Administrator\Application Data\Microsoft

このフォルダにあるテンプレートもバックアップした上で削除しておきました。
それでは、改めてインストールしてみます。
暖かいご支援、ありがとうございmす。
0561デフォルトの名無しさん2006/11/26(日) 19:51:33
何でこんなにスレが汚れてる?
0562デフォルトの名無しさん2006/11/26(日) 20:03:00
明らかにスレ違いな質問に親切に答えちゃってるからだろう。
0563デフォルトの名無しさん2006/11/26(日) 20:55:22
>>562
答えてるっつーかからかってるように見える
0564デフォルトの名無しさん2006/11/26(日) 22:13:23
インスタンス生成して、もういらなくなったからメモリ解放したい場合って
Dispose()でいいんですか?
Disposeした後にそのインスタンスのプロパティに普通にアクセスできるし変更できて
解放されていないようなんですけど。
Disposeした後、解放のタイミングはCLRにおまかせで、
今すぐメモリ解放ということは不可能なんですか?
0565デフォルトの名無しさん2006/11/26(日) 22:16:43
>Disposeした後にそのインスタンスのプロパティに普通にアクセスできるし変更できて
>解放されていないようなんですけど

そういうことはやめましょう。

null代入してほっとけばGCされるのでほっとけ。
0566デフォルトの名無しさん2006/11/26(日) 22:18:41
>>564
お前C++使いだな

ふらっとC♯, C#(初心者用) Part10
http://pc8.2ch.net/test/read.cgi/tech/1162193452/
0567デフォルトの名無しさん2006/11/26(日) 22:25:18
えーっとググレカスでいいのかな?

http://www.atmarkit.co.jp/fdotnet/dotnettips/027dispose/dispose.html
05684742006/11/26(日) 22:41:42
スレチでしょうか…
0569デフォルトの名無しさん2006/11/26(日) 22:45:08
>>565
メモリ使用量が減っていないのでまだ残ってんじゃないの?と思い
ためしにやってみました。null代入した後だと流石にあとかたもなくなってますね。
メモリ解放はdisposeと同様に即座にはされないようですけど。
>>566
いや、C#君ですよ。低レベルすぎてスレ違い?
>>567
よんだけどそれ回答になってないでしょ。

ずばり、インスタンスが使用しているメモリ空間を即解放するにはどうすれば良いか?
という問いの答えは、マネージドコードでは不可能 なんですかね。
0570デフォルトの名無しさん2006/11/26(日) 22:47:26
>>565
nullを代入することに何の意味があるんだ?
0571デフォルトの名無しさん2006/11/26(日) 22:48:39
> インスタンスが使用しているメモリ空間を即解放

んなこといってるからC++使いだって言われるんじゃよー

> マネージドコードでは不可能

GC対象メモリであれば強制GCを呼べばいいよ。System.GCだっけ。
でも実際に行われるかどうかは知らない。

メモリ使用量がタスクマネージャのそれだとすれば、不可能だねえ。
ヒープはすぐにコンパクト化されるわけではないし。
0572デフォルトの名無しさん2006/11/26(日) 22:50:25
頭の中のすべては値型にでもなってるんじゃマイカ?
0573デフォルトの名無しさん2006/11/26(日) 22:50:35
つかなんのための「マネージド」だと思ってんだろ
0574デフォルトの名無しさん2006/11/26(日) 22:59:06
C#では、メモリ管理はGCにまかせましょう。(つまりメモリ解放のタイミングは予測不可。それでいい。)
Disposeとメモリ解放は全く関係ありません。
Disposeが解放するのはアンマネージドリソースです。
0575デフォルトの名無しさん2006/11/26(日) 23:00:37
>>570
GCは確保したオブジェクトが、どこかから参照されているかどうかで
GC対象かどうか判断してるんじゃなかったっけ?
null代入して参照数をゼロにしないと、プログラム終了まで
インスタンスメモリは確保されっぱなしの可能性がある。
0576デフォルトの名無しさん2006/11/26(日) 23:02:35
>>569

>それが単なるメモリ領域なら、使用可能なメモリ容量に余裕がある限り、
>回収されずに放置されるケースがあってもそれほど問題とはならない
05774742006/11/26(日) 23:03:28
誘導お願いします、家に帰れません…
0578デフォルトの名無しさん2006/11/26(日) 23:04:35
>>575
スコープってしってる?
0579デフォルトの名無しさん2006/11/26(日) 23:05:24
>>577
ぐだぐだやってないでOSからクリーンインスコしろ
0580デフォルトの名無しさん2006/11/26(日) 23:06:02
>>596
一般的には、弱参照以外の参照を切ってGC.CollectでGC発動
させれば回収される。
Finalizer持っていてかつ、SupressFinalizeされていなければ、
さらにFinalizerの終了を待って、GC.Collectで回収。
ただ、この行為はともにスループットをほぼ確実に落とす。

もっといえば、2.0だとさらに複雑になっていて「正確に」こんな
ところで説明するのは長すぎるかも。「即開放は不可能」というより、
システム側にその権利は譲った(そして最適化の余地を作った)が
正しい。
05814742006/11/26(日) 23:07:24
誘導お願いします、家に帰れません…
0582デフォルトの名無しさん2006/11/26(日) 23:09:44
>>578
スコープから外れない場合があることを忘れずに…

form
0583デフォルトの名無しさん2006/11/26(日) 23:14:09
>>581
vbsとかからはCreateObjectできんの?
0584デフォルトの名無しさん2006/11/26(日) 23:15:53
環境依存っぽいからこちら側では解答できません。
スルーします。
0585デフォルトの名無しさん2006/11/26(日) 23:16:22
>>474
ttp://etc4.2ch.net/test/read.cgi/male/1156204826/
■ このスレッドは過去ログ倉庫に格納されています