トップページ⇒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あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0284デフォルトの名無しさん2006/11/12(日) 09:59:24
↑受け売りの知識を自慢げにひけらかしてる奴
0285デフォルトの名無しさん2006/11/12(日) 10:09:32
常識だな
0286デフォルトの名無しさん2006/11/12(日) 10:15:19
長い
もっと簡潔に
0287デフォルトの名無しさん2006/11/12(日) 10:21:39
なんで「フォームのkeydownイベントが発生しない」が
「コントロール上でのkeydownイベントが発生しない」にすりかわってるんだろう。

あ、釣られたのか。
0288デフォルトの名無しさん2006/11/12(日) 10:47:27
きみたち必死になってForm.KeyPreviewという回答をくれたけど
実は違うみたいれつよ(藁
後学のためにきみたちのもおいらが調べた結果をまとめたので教えてあげよう

http://www.atmarkit.co.jp/fdotnet/dotnettips/241windlgkey/windlgkey.html

以上だ。いかにもC#のことなら何でも知ってる見たいなツラして回答者ぶるなら
少しは勉強しろよな(禿藁

-------------------------------------------------------------
簡潔にしてみました
0289デフォルトの名無しさん2006/11/12(日) 11:17:26
・・・つーか、そろいもそろって・・・
特殊Keyもしらないのでちゅか・・・?
0290デフォルトの名無しさん2006/11/12(日) 11:20:00
>>289
君みたいにエスパーじゃないからね
0291デフォルトの名無しさん2006/11/12(日) 12:19:21
>>290
>>211
0292デフォルトの名無しさん2006/11/12(日) 13:51:16
Excelのマクロより遅い.NETになんの魅力があるのか禿げしく疑問
0293デフォルトの名無しさん2006/11/12(日) 13:55:52
そうだね
0294デフォルトの名無しさん2006/11/12(日) 14:09:57
vistaでは無問題
先を見ることができない>>292は脱落者
vista(=見晴らし、見通し)とヒントまで与えてくれてるのに気づかないとはね・・・
┐(´ー`)┌
0295デフォルトの名無しさん2006/11/12(日) 14:21:34
>>294
┐(´ー`)┌ ← このAAが禿しくムカツクんだが。
0296デフォルトの名無しさん2006/11/12(日) 14:22:17
スルー力を磨くスレ
0297デフォルトの名無しさん2006/11/12(日) 14:27:30
>>296
がんばって磨きますw
0298デフォルトの名無しさん2006/11/12(日) 14:46:09
マクロより遅いのか
0299デフォルトの名無しさん2006/11/12(日) 15:26:07
うそーん
EXCELのマクロより遅いなんて話は聞いたことが無いよ。
0300デフォルトの名無しさん2006/11/12(日) 15:28:30
デバッグモードででもベンチ取ったんじゃないかと
0301デフォルトの名無しさん2006/11/12(日) 15:59:00
>>298-300
>>296がいい事言ってる
0302デフォルトの名無しさん2006/11/12(日) 16:10:31
エラー19'hogehoge.Index' は参照マーシャル クラスなので、
'hogehoge.Index' を ref または out として渡すことはできません。

コンパイルエラーでこういうのが出てしまいます。
元のコードは、こんな感じです。
↓

class hogebase
{
public int Index = 0
}

class hogeInherit : hogebase
{
private void Close()
{
base.Index = 100;
}
}

void main()
{
hogebase hb = new HogeInherit();
Console.WriteLine('{0}',
}
0303デフォルトの名無しさん2006/11/12(日) 16:11:16
ちなみにエラーが出るのは Main の Console.WriteLine です。
0304デフォルトの名無しさん2006/11/12(日) 16:13:56
文字列になってないし括弧も閉じてない
0305デフォルトの名無しさん2006/11/12(日) 16:15:18
>>304
void main()
{
hogebase hb = new HogeInherit();
Console.WriteLine('{0}', hogeInherit.Index.ToString());
}
これの間違いです。
0306デフォルトの名無しさん2006/11/12(日) 16:31:29
文字列はシングルクォートではなくダブルクォートだぜ

おまいにはこっちのほうがお似合い

ふらっとC♯, C#(初心者用) Part10
http://pc8.2ch.net/test/read.cgi/tech/1162193452/
0307デフォルトの名無しさん2006/11/12(日) 16:35:05
>>306
向こうに行きます。
0308デフォルトの名無しさん2006/11/12(日) 20:35:50
>>300
デバッグモードだとEXCELにも負けるのか・・・
┐(´ー`)┌
0309デフォルトの名無しさん2006/11/12(日) 20:38:36
┐(´ー`)┌
0310デフォルトの名無しさん2006/11/12(日) 20:45:03
>>308
失せろっていってんだよ。
何度も同じことを言わせんなよ。


カスが。
0311デフォルトの名無しさん2006/11/12(日) 20:49:23
┐(´ー`)┌
0312デフォルトの名無しさん2006/11/12(日) 21:01:21
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
0313デフォルトの名無しさん2006/11/12(日) 21:13:40
ムカデか
0314デフォルトの名無しさん2006/11/12(日) 21:16:03
┐(´ー`)┌
0315デフォルトの名無しさん2006/11/12(日) 21:30:16
最近妙にレベルが落ちてるな。どうしてだ?
0316デフォルトの名無しさん2006/11/12(日) 21:34:30
回答者の質が落ちたんじゃね?
0317デフォルトの名無しさん2006/11/12(日) 22:12:49
ブビー・コボラ・デルオパーイ・ジャバ糞辺りが難民化してるんじゃね?
0318デフォルトの名無しさん2006/11/12(日) 22:20:38
>>317
┐(´ー`)┌
0319デフォルトの名無しさん2006/11/12(日) 22:26:01
>>318
ほらw

うじゃうじゃと湧いてくるよw
0320デフォルトの名無しさん2006/11/12(日) 22:35:43
┐(´ー`)┌
0321デフォルトの名無しさん2006/11/12(日) 22:37:17
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
┐(´ー`)┌
0322デフォルトの名無しさん2006/11/12(日) 22:41:44
ムカデか
0323ぼるじょあ ◆yBEncckFOU 2006/11/12(日) 23:26:50
┐(´・3・`)┌ エェー
0324デフォルトの名無しさん2006/11/13(月) 00:17:08
初歩的な質問なのですがushortをbyte配列にコピーするにはどうすれば
いいのでしょうか?
Cでいうmemcpyみたいなことをしたいのです。
0325デフォルトの名無しさん2006/11/13(月) 00:31:24
Buffer

クラス名な
0326デフォルトの名無しさん2006/11/13(月) 00:44:59
Buffer.BlockCopyでできそうですね。
ありがとうございました
0327デフォルトの名無しさん2006/11/13(月) 13:25:55
C#を勉強中なんですが、3項演算子というのは、積極的に使っていくものなんでしょうか。
普通にif文を書いた方が見やすいようなきもするんですけど、どうなんでしょう。
0328デフォルトの名無しさん2006/11/13(月) 13:40:16
>>327
見やすく書いたほうが、読む方は読みやすい。自分が書いたコードでも時間が経つと
意外と悩んだりするもの。C言語でもできれば使わないほうがよいとされている。
C#でもそれは同じだろうと、俺は思っている。三項演算子の方が分かりやすいと判断
したところには使ってもいいんじゃないか?そういう意味ではgotoみたいなもの。
0329デフォルトの名無しさん2006/11/13(月) 13:46:45
複数あるWindowからIEのWindowを絞り出し、そのHTMLDocumentを抜き出すという
事をしたいのですが、その方法で煮詰まっています。

public static bool IECallBack(IntPtr hwnd, IntPtr lParam)
{
StringBuilder sbClassName = new StringBuilder(256);
GetClassName(hwnd, sbClassName, sbClassName.Capacity);
if( sbClassName.ToString().StartsWith("IEFrame"))
{
Form1.al.Add(hwnd);
}
return true;
}

// EnumWindows でIECallBack へさせる。
EnumWindows(new EnumWindowCallBack(Form1.IECallBack), IntPtr.Zero);

こんな感じでWindowのハンドルは取得できるのですが、Window内のオブジェクトを取得する
方法が分からなくて困っています。
どなたかご教授していただけませんでしょうか?よろしくお願い致します。
0330デフォルトの名無しさん2006/11/13(月) 13:50:52
3項演算子で書いて意味不明なのは、ifで書いても意味不明だと思う。
ようするに読みにくいのは3項演算子のせいじゃない。
03313272006/11/13(月) 15:53:16
単純な分岐で〜だったら1、そうでなければ2みたいな短い時に
if文で何行も使うのはどうかなと思ってました。

if (〜) { 〜 } else { 〜 }

かっこの中が1行で済むときはこんな感じで書いていたのですが、
一般的に3項演算子のほうを使うのかなと思って質問しました。
あまり参考書などで使ってるのを見かけないので
一般的に使われていないのかなと思って質問しました。
少し使ってみようと思います。
0332デフォルトの名無しさん2006/11/13(月) 17:22:36
>>329
COMのMicrosoft Internet ControlsとMicrosoft HTML Object Libraryを参照

using SHDocVw;
using mshtml;

ShellWindows sw = new ShellWindows();
foreach (InternetExplorer ie in sw)
{
  if (System.IO.Path.GetFileName(ie.FullName) == "IEXPLORE.EXE")
  {
    IHTMLDocument2 htmlDoc = (IHTMLDocument2)ie.Document;
    Console.WriteLine(htmlDoc.url);
  }
}
0333デフォルトの名無しさん2006/11/13(月) 18:03:11
>>332
正にこれです。COMオブジェクト関連の操作に関してはVBの資料は多いのですが
C#に関する資料があまりなくて苦労していました。
本当に有難う御座います。

追加で質問なのですが、IEのウィンドウでさらにアクティブになっているウィンドウを取得したいのですが、
Shellwindowからhwndを抜き出すことは簡単に出来るものなのでしょうか?
03343322006/11/13(月) 18:19:38
>>333
InternetExplorerクラスにHWNDプロパティがあるからそれが使えるんじゃない?
試してないから分からないけど。
0335デフォルトの名無しさん2006/11/13(月) 21:07:20
ボリュームコントロールをいじりたい(音を大きくしたり小さくしたりとかしたい)のですが、どうやればいいでしょうか?
03363352006/11/13(月) 21:11:54
ちなみに
↓みたいなページもあったのですが、ページが古くて、重要なウプデータがなかったりで・・・(´・ω・`)
ttp://thespoke.net/forums/950208/ShowPost.aspx
0337デフォルトの名無しさん2006/11/13(月) 21:14:50
>>336
こんなんじゃだめなん?
ttp://support.microsoft.com/kb/139098/ja
0338デフォルトの名無しさん2006/11/13(月) 21:47:17
>>337
おおお、ありがとうございます!!
0339デフォルトの名無しさん2006/11/14(火) 14:44:05
モジュールが1.1でコンパイルされたものか2.0でされたものかってどこでわかるの?
0340デフォルトの名無しさん2006/11/14(火) 18:21:51
他のアプリケーションのウィンドウがアクティブになったときに処理をさせたいのだが、
C#ではどうすりゃいいの?

他のアプリケーションのウィンドウに送られるWM_ACTIVATEメッセージを
キャッチしたいんだけど…。これをやりたい場合はグローバルフックする
必要があるからC#じゃ無理…だよね?

やはりTimerイベントを1秒間隔くらいで発生させて、その中で
GetForegroundWindowなどを呼び出してチェックする方法しかないのかな。
0341デフォルトの名無しさん2006/11/14(火) 18:35:30
コールバックは作れるみたいだけど
ttp://msdn2.microsoft.com/ja-jp/library/843s5s5x(VS.80).aspx
03423402006/11/14(火) 22:19:36
グローバルフックの部分をC言語などで書いて、WM_ACTIVATEをキャッチした時に
.NETアプリにコマンドライン引数などで通知するなんてこともできるかな。
スマートじゃないけど。

うーん。いい方法が思いつかない。素直に全部C言語で作ったほうが早いかな…。
0343デフォルトの名無しさん2006/11/14(火) 22:23:09
うん、多分その方が良いと思う。
GUI を C# で作りたいのならその部分だけ別プロセスで。
0344デフォルトの名無しさん2006/11/14(火) 22:49:46
オブジェクトを自分で破棄するにはどうすればいいんでしょうか?
0345デフォルトの名無しさん2006/11/14(火) 23:02:56
破棄というのが何を指すのかが問題だ
0346デフォルトの名無しさん2006/11/15(水) 00:26:36
オブジェクトが使用するリソースを解放したいのならそのように明示的にコーディングすればいいだけ。
オブジェクトそのものが占めるメモリを解放するなら参照を切ってからSystem.GC.Collect()する。
特定のオブジェクトのメモリ領域を解放するのは不可能だしそもそも意味がない。
0347デフォルトの名無しさん2006/11/15(水) 00:41:39
質問です。IntPtrに加減演算が定義されてないのはなぜでしょうか。
IntPtr ptr = ...;
ptr = (IntPtr)(ptr.ToIntXX() + 3);
などと書くとアーキテクチャに依存して効率が落ちたりしそうな気がするのですが
どうなんでしょう。
0348デフォルトの名無しさん2006/11/15(水) 00:44:30
加減算がしたいのならunsafeで通常のポインタ使ってください
0349デフォルトの名無しさん2006/11/15(水) 00:52:40
>>343
そんなことするくらいなら全部ネイティブで書いたほうが早い
Cだと面倒なんでC++/MFCならC#を使うより工数は少ないはず
0350デフォルトの名無しさん2006/11/15(水) 00:57:27
>>347
その質問に答えられるのは MS の中の人だけだろう。
MSDN フォーラムででも聞いてくれ。
03513472006/11/15(水) 01:27:28
>>348
なるほど、そういうポリシーなのですか。
わかりました。
0352デフォルトの名無しさん2006/11/15(水) 01:36:58
プロパティグリッドに表示させたときに
Listメンバを編集させないようにできないですか?
ReadOnly をつけても編集できてしまいます

class MyClass{
 private List<string> myList;
 [ReadOnly(true)]
 public List<string> MyList{
  get{return myList;}
  set{list = myList;}
 }
}
0353デフォルトの名無しさん2006/11/15(水) 10:02:58
>>352
プロパティとしては、setterを用意したいけど、
デザイナー上からは、編集できないようにしたいってこと?
0354デフォルトの名無しさん2006/11/15(水) 10:22:50
C# で作成したアプリケーションを、特定の拡張子と関連付けようとして
「関連付けたい拡張子のファイルを右クリック」
→「プログラムから開く」
→「プログラムの選択」
で作成したアプリケーションを選択したら、アプリケーション名が空になってしまいました。
これって何が悪いのでしょうか?
0355デフォルトの名無しさん2006/11/15(水) 11:58:28
レジストリ確認しろ
0356デフォルトの名無しさん2006/11/15(水) 13:42:04
引数のアプリケーション名が空ってことを言いたいんじゃないの?
Argじゃなくてプロパティにあった気がする
0357デフォルトの名無しさん2006/11/15(水) 19:04:48
char型の変数から値取り出したら変な数値だったんだけど
文字型の1が0x31のはずなのになんかばかでかい変な値だった
どうやればいいか教えてくれ
0358デフォルトの名無しさん2006/11/15(水) 19:05:40
>>357への回答至急お願いする
0359デフォルトの名無しさん2006/11/15(水) 19:21:17
全角の1だったんじゃね
0360デフォルトの名無しさん2006/11/15(水) 19:21:27
じょうだんじゃない
0361デフォルトの名無しさん2006/11/15(水) 19:44:08
わかる奴はいなさそうだな
それじゃ
0362デフォルトの名無しさん2006/11/15(水) 20:15:22
Console.WriteLine("{0:x}", (int)'1');
0363デフォルトの名無しさん2006/11/15(水) 21:39:37
これからは>>357みたいな奴ばかりになるのかと思うと引退考えるな
0364デフォルトの名無しさん2006/11/15(水) 21:41:41
どうぞどうぞ。
0365デフォルトの名無しさん2006/11/15(水) 21:54:49
>>357
すまん。


もう、君が何を言ってるのかわからないよ。
0366デフォルトの名無しさん2006/11/15(水) 22:11:15
>>354
多分 AssemblyTitle 属性の値が使われると想う。
AssemblyInfo.cs 見てみ。

あとキャッシュされてる可能性がある。
前にそう言うやり取り見たな。あれは XP のタスクバーのグループ化の話だったか。
0367デフォルトの名無しさん2006/11/15(水) 22:25:32
>>365
何となく理解はできた。
それすらもわからないなら君も早く引退した方がいいよ^^
0368デフォルトの名無しさん2006/11/15(水) 22:37:27
C#でchar型って文字型だから、単純に値を取り出して
intみたいな数字型に変換するのは無理…というかしちゃダメじゃないの?

Encoder使って、byteに変換すれば可能だけど
0369デフォルトの名無しさん2006/11/15(水) 22:42:36
(゚д゚)ハァ?してもよろしいですか?





(゚д゚)ハァ?(゚д゚)ハァ?(゚д゚)ハァ?(゚д゚)ハァ?
0370デフォルトの名無しさん2006/11/15(水) 22:58:19
>>368
CharもInt32もただの構造体だがその辺は適当にConvertibleになってる。

つーか、君はちょっとくらい調べてから発言しようとは思わんのかね。
0371デフォルトの名無しさん2006/11/15(水) 22:59:22
よろしいです!
0372デフォルトの名無しさん2006/11/15(水) 23:13:23
>>368
char->intなら暗黙的にキャストできるだろ。
0373デフォルトの名無しさん2006/11/15(水) 23:21:47
C#でC++の特性クラスみたいなことは出来ますか?
0374デフォルトの名無しさん2006/11/15(水) 23:25:34
traitsはさすがにtemplateがないと無理だろ
0375デフォルトの名無しさん2006/11/15(水) 23:26:06
でも代わりにリフレクションがあるか。
0376デフォルトの名無しさん2006/11/17(金) 17:55:33
DataGridコントロールで、Enterキー押下時にカーソルを
左に移動する処理を行いたいのですが、下記のイベント
にブレークポイントをおいても、イベントがコールされません。
EnableはTrueになっています。

何か設定に不備があるのでしょうか?

dataGrid1_KeyPress
dataGrid1_KeyUp
dataGrid1_KeyDown

環境 VS2003 Win2003
0377デフォルトの名無しさん2006/11/17(金) 18:59:14
>>376
仕様です。
0378デフォルトの名無しさん2006/11/17(金) 19:19:55
一度StartさせたThreadを再び使用するにはどうしたらよいのでしょうか?
一度終了したThreadに対して普通に再びStart()メソッドを呼ぶとThreadStateExceptionが飛んできます…。
0379デフォルトの名無しさん2006/11/17(金) 19:31:48
終了させなければ良い
0380デフォルトの名無しさん2006/11/17(金) 19:44:50
そもそもなんで再利用したいの?
0381デフォルトの名無しさん2006/11/17(金) 19:46:37
もし可能なら毎度毎度Threadをnewするオーバーヘッド(どの程度かわかりませんが)を避けられるかな、と思った次第です。
0382デフォルトの名無しさん2006/11/17(金) 19:49:53
>>381
用途にもよるがBackgroundWorkerやその他のThreadPoolを使いなされ。
0383デフォルトの名無しさん2006/11/17(金) 19:50:07
スレッドでこんな風にすれ

while ( ! 死に時?) {
 合図があるまで待つ;
 お仕事;
}
0384デフォルトの名無しさん2006/11/17(金) 19:52:49
>>382,383
いろいろ試してみます。
ありがとうございました。

>>379
しね
■ このスレッドは過去ログ倉庫に格納されています