09/12/31 14:44:21
>>411
コンパイルしたら、forの外にいようと中にいようと、
吐かれるコードは ldloc (load local) だからなぁ。
一緒。
今、IL Disasm してみたけど、for 内でしかインスタンス作ってないなら
コンパイル結果寸分たがわず完全一致してたよ。
Debug コンパイルですら全く一緒。
414:デフォルトの名無しさん
09/12/31 14:49:56
一つのメソッドで使われるローカル変数の領域っていうのは完全にコンパイル時に決まるんだよ
ループ内で宣言しようが全く関係ない
415:414
09/12/31 14:57:20
誤解されそうなこと言ってるな
もちろん実際に確保されるのはメソッドに入る時だけど
そのときのレイアウトや必要なサイズはコンパイル時に確定しているということ
416:デフォルトの名無しさん
09/12/31 15:24:07
>>412-415
皆さんありがとうございます。
ローカル変数の領域確保の仕組みがよく分かりました。
417:デフォルトの名無しさん
09/12/31 15:57:33
クラスのnewとかならそりゃヒープ確保とかインスタンス作成とかでオーバーヘッドはかかってくるが、
ローカル変数自体なんて
単なるスタック領域にすぎないんだからどっちにしても普通は変わらん。
418:デフォルトの名無しさん
09/12/31 16:38:59
スコープとか関係なかったんだね。これは良いことを聞いた。
419:デフォルトの名無しさん
09/12/31 18:42:17
WndProcってなんですか?
420:デフォルトの名無しさん
09/12/31 18:54:04
ggrks
421:デフォルトの名無しさん
09/12/31 19:23:01
System.String str = new System.String("");
string str = "";
422:デフォルトの名無しさん
09/12/31 19:40:54
自作しました。
423:デフォルトの名無しさん
09/12/31 20:47:58
はあ?
424:デフォルトの名無しさん
10/01/01 00:16:21
自炊しました。
425: 【凶】
10/01/01 00:46:08
てst
426:デフォルトの名無しさん
10/01/01 16:03:32
趣味でC#を勉強中なのですが
ネット上で紹介されているプロの方の書いたコードサンプルを見ていて
継承元クラスのフィールドなどにアクセスする際
通常は「base.」と付けないような印象を受けたのですが
こういう記述の仕方にセオリーといったものはあるのでしょうか?
よろしくお願いします。
427:デフォルトの名無しさん
10/01/01 16:14:53
baseは、自分のメンバーに親と同じ名前付けちゃって、明示しないと親のメンバーにアクセスできないときしか使わないなぁ。
428:デフォルトの名無しさん
10/01/01 16:20:59
なるほど。そういう時は確かに明示する必要がありますね。
実際、明示の必要がある時だけ書く方がわかり易いですね。
ありがとうございました。
429:デフォルトの名無しさん
10/01/01 16:30:36
class A : B{
}
って書くより
class A{
B b =new B();
func(){
b.func();
}
}
でおk、baseいらね
430:デフォルトの名無しさん
10/01/01 16:55:51
>>429
継承元クラスって書いてあるだろ
ちゃんと見ようぜ
431:デフォルトの名無しさん
10/01/01 16:59:37
まあどうしても継承でなければならない理由がない限りは>>429の下の方が望ましいのは確か
432:デフォルトの名無しさん
10/01/01 17:04:04
継承するより委譲しろってことだろうけど
それは今回の問題とはまた別の話
433:デフォルトの名無しさん
10/01/01 18:48:38
base.Hoge
変数・メソッドにアクセスなら普通付けない
: base(Hoge)
継承元のコンストラクターをコールするときは付ける
434:デフォルトの名無しさん
10/01/01 20:54:24
VC#2008で開発しています
ツールボックスに登録されているbuttonを継承したクラスを作った場合
IDEのデザイン機能の恩恵を受けることはできないのでしょうか?
435:デフォルトの名無しさん
10/01/01 20:56:30
1回ビルドすればツールボックスに登録されるはず
436:デフォルトの名無しさん
10/01/01 21:10:23
できました
ありがとうございます
グーグル先生に拾ってもらうメモとして
ソリューションエクスプローラーを開いてbutton継承クラスを追加
using System.Windows.Forms;
using System.ComponentModel;
を継承クラスに追加
下記のように設定
class ExButton : Button
{
public ExButton()
{
base.SetStyle(ControlStyles.Selectable, false);
}
}
まさに上の質問も参考になりました。
たぶんそれがなければその辺でもはまったかも
437:デフォルトの名無しさん
10/01/01 21:12:41
あと関係ないかもしれないけどC#でぐぐるとVB.NETの方が多く出てくるケースが
あったのでこのサイトの変換機能は重宝しました。
C#<->VB.NET相互変換
URLリンク(www.developerfusion.com)
438:デフォルトの名無しさん
10/01/01 21:22:30
とあるbyte配列にbyte,byte,short,longとデータが並んでるとして、
それぞれの値を別の変数に格納するにはどうすればいいですか?
439:デフォルトの名無しさん
10/01/01 21:27:52
>>438
unsafeにして、ポインタ使うのが楽じゃね?
440:デフォルトの名無しさん
10/01/01 21:30:51
byte配列ならBitConverterか
自前で合成
short配列に byte[3]*256+byte[2]
のような感じで(エンディアンは自分で考えてください
441:デフォルトの名無しさん
10/01/01 21:30:55
>>439
ポインタ厨以外の方に教えてほしいです
442:デフォルトの名無しさん
10/01/01 21:31:06
アホかbitconverter使えよ
443:デフォルトの名無しさん
10/01/01 21:54:39
>>406
遅レスだけど、
ILでは、
.locals(...)
で関数の最初で確保される。(確か)
444:デフォルトの名無しさん
10/01/01 22:33:34
以前スクリーンキーボードの件で相談した物です。
ある程度形になったのですが一つ困った挙動があります。
スクリーンキーボードの性質上なるべく最前面で表示させておきたいので、
TopMost=trueにしてアクティブにならないように制御して自前ツールが
アクティブにならないように動くようになりました。
しかし、ツール以外のウインドウのタイトルバーをダブルクリックした場合
の挙動が死んでいるようで、一般的な「ウインドウの最大化」、「もとのサイズに戻る」
が渡っていないようです。
この場合の対策方法はありますでしょうか?
右上の並んでいる□が今回製作中のツールです
URLリンク(uproda.2ch-library.com)
わかっている範囲ではタイトルバーのダブルクリックだけ受け付けず
その他は問題ないです
445:444
10/01/01 22:41:46
すみません
非表示の際にTopMost=flaseとしてみましたが結果は同じでしたので
TopMostは関係ないようです。
446:デフォルトの名無しさん
10/01/01 22:42:45
知ってます
447:444
10/01/01 22:46:59
おそらくこの辺が関係してるんですかね?
//アクティブにならないウインドウに
//するためのオーバーライド
protected override void WndProc(ref Message m)
{
const int WM_MOUSEACTIVATE = 0x21;
//const int MA_ACTIVATE = 1;
//const int MA_ACTIVATEANDEAT = 2;
const int MA_NOACTIVATE = 3;
//const int MA_NOACTIVATEANDEAT = 4;
if (m.Msg == WM_MOUSEACTIVATE)
{
m.Result = (IntPtr)MA_NOACTIVATE;
return;
}
base.WndProc(ref m);
}
448:デフォルトの名無しさん
10/01/01 22:48:47
タイトルバー、どこにあんの?
449:デフォルトの名無しさん
10/01/01 22:52:09
>>448
あ、わかりにくくてすみません
ツールじゃないほかのウインドウのタイトルバーのダブルクリック制御です
その他ウインドウに影響を及ぼさないツールとして作りたかったのですが
今回のスクリーンキーボードが起動していると他所のウインドウの
タイトルバーのダブルクリック挙動が効かない状態になるんです
450:デフォルトの名無しさん
10/01/01 22:56:12
ん? 自アプリじゃなくて、別のアプリの話?
あんたのアプリを実行中に、他のアプリのタイトルバーをダブルクリックしても、反応がない、ってこと?
451:デフォルトの名無しさん
10/01/01 22:58:14
勿論、>>447を追記しただけのフォームで再現できるんだよな?
452:444
10/01/01 22:59:35
>>450
そうです
名前がないと面倒なのでスクリーンパッドと仮名をつけます
メモ帳やブラウザなどを任意のウインドウサイズから最大に広げる際に
右上のボタン以外にタイトルバーのダブルクリックでも同じことが行えま
すがスクリーンパッド起動中にそれができなくなるのでそれを回避する
方法が知りたいと思いまして・・・
453:444
10/01/01 23:02:26
>>451
formクラスは>>447でオーバーライドします。
それとは別にタイマーを使って一定サイクルで下記処理を動かします。
private void timer1_Tick(object sender, EventArgs e)
{
int ThreadProcessId = GetWindowThreadProcessId(this.Handle, IntPtr.Zero);
IntPtr OldWindowHandle = IntPtr.Zero;
IntPtr targetWindowHandle = GetForegroundWindow();
if (targetWindowHandle == this.Handle && OldWindowHandle != IntPtr.Zero)
{
SetForegroundWindow(OldWindowHandle);
}
else
{
if (targetWindowHandle != OldWindowHandle)
{
int targetThreadProcessId = GetWindowThreadProcessId(targetWindowHandle, IntPtr.Zero);
AttachThreadInput(ThreadProcessId, targetThreadProcessId, true);
OldWindowHandle = targetWindowHandle;
}
}
}
454:デフォルトの名無しさん
10/01/01 23:06:19
うーん。オレの環境じゃ再現できないな。
Vista SP2 x64 + Visual Studio 2008 SP1
455:444
10/01/01 23:14:27
あ、すみません
書き込んだらなんとか・・・がきちゃいました
メッセージ処理などが他に居るのかと思い込んでたのですがどうも違ったようです。
タイマー内のIntPtr OldWindowHandle = IntPtr.Zero;の位置が悪かったようです
これをタイマー処理のスコープから出したら問題なく動きました
>>454
お付き合いしていただいて済みませんでした
456:デフォルトの名無しさん
10/01/02 03:15:48
AES暗号なんかを使う場合に鍵長なんかの指定はどうやればいいんでしょうか?
457:デフォルトの名無しさん
10/01/02 03:21:32
SymmetricAlgorithm.KeySize Property とかで指定。
458:デフォルトの名無しさん
10/01/02 04:04:46
>455
そんな面倒なことせずにWS_EX_NOACTIVATEを使えばいいのに
459:デフォルトの名無しさん
10/01/02 04:10:41
こんなサンプルあるじゃん。
URLリンク(msdn.microsoft.com)
460:444
10/01/02 04:58:39
いろいろ実装してたら朝に・・・
>>458>>459
そっちを入れてみました。
簡単すぎますorz
461:デフォルトの名無しさん
10/01/02 07:07:13
おかしな挙動ではまってるのでアドバイスいただければと思います。
デスクトップ上の始点と終点を指定するとその範囲だけを
スクリーンショットとして保存するソフトです。
半透明で表示するフォームにラベルx4とpictureBoxを使っています。
ラベルx4の内、x2には始点と終点のXY座標を表示しています。
問題の挙動というのがpictureBoxをフォームにドッキングしてしまうと
ラベルのテキストがまったく更新されないという物です。
pictureBoxのドッキングを解除してフォームより小さいサイズに
するとラベルのテキストが更新されます。
対処方法とか何かありますでしょうか?
462:デフォルトの名無しさん
10/01/02 13:10:13
このスレからクソ内容の書き込みを特定するLINQつくってみた
var a = from L in このスレ where 内容がクソ select 数値
a = 462
463:デフォルトの名無しさん
10/01/02 13:11:29
>>461
再現できるコードplease
464:デフォルトの名無しさん
10/01/02 15:18:43
>>461
windows付属のsnipping toolを使う
465:デフォルトの名無しさん
10/01/02 16:20:56
今、業務用Windowsフォームアプリケーションを作成しています。
その中で、ローカルPCの所定の場所に、重要データをテキストデータで保存できるようにしたいのですが、
個人情報はないものの、機密データでもありますので、テキストデータ保存時に暗号化したいと考えています。
C#で、そのような暗号化の機能はありますでしょうか。
ご教示ください。
466:デフォルトの名無しさん
10/01/02 16:23:15
System.Security.Cryptography.Rijndaelとか使えば
↓暗号化したって無駄だとかそういう突っ込みはいい
質問者が良いって言ってるんだから話をこじらせようとすんな黙れ
467:デフォルトの名無しさん
10/01/02 16:24:46
はい、ありますよ。
468:デフォルトの名無しさん
10/01/02 16:25:47
突然なんなのw
そう言われると指摘したくなるなぁ。
469:デフォルトの名無しさん
10/01/02 16:43:07
>>467
どのような方法があるの?僕にも教えてください。
470:デフォルトの名無しさん
10/01/02 16:49:29
もう出てるけど、この辺をどうぞ。
System.Security.Cryptography 名前空間
URLリンク(msdn.microsoft.com)
471:デフォルトの名無しさん
10/01/02 18:00:03
ドットネットで完結しようとしないでOSの機能とか調べてみたらいいのに
472:デフォルトの名無しさん
10/01/02 18:15:50
>>466
> ↓暗号化したって無駄だとかそういう突っ込みはいい
なんらかの形で、それなりの長さのパスワード入力させれば、無駄ということはないんじゃないか?
473:デフォルトの名無しさん
10/01/02 18:55:43
歌の一フレーズ入力させるとかあったな。
474:デフォルトの名無しさん
10/01/02 20:32:50
>>463
遅くなりました
一式まるまるです
URLリンク(uproda.2ch-library.com)
とりあえずpictureBoxはドッキングしてません
私の環境ではpictureBoxをフォームにドッキングするとlabelの更新がおかしくなります。
windowsXP home SP3
VC#2008Express
.netF 3.5
475:デフォルトの名無しさん
10/01/02 20:34:14
このスレからクソ内容の書き込みを抽出するLINQ
from このスレ select クソ内容の書き込み
476:デフォルトの名無しさん
10/01/02 21:44:08
>>474
まさかとは思うけど、そのコードでscreencap_rec(どうでもいいけどもうちょっと命名工夫しようよ)
のpicturebox1をドックすると期待した動作にならない、って話?
ラベルを更新するコードがformのMouseMoveイベントに書いてあるんだから当たり前じゃん。
フォームの全辺にドックしたらformのクライアント領域の全部をpictureboxが覆うんだから
マウスイベントはんて発生するわけないでしょ。
477:474
10/01/02 21:53:49
>>476
>まさかとは思うけど、そのコードでscreencap_rec(どうでもいいけどもうちょっと命名工夫しようよ)
みなさんはどういう感じでやってるんでしょうか?
頭の中に思い描いたプログラムを急いであれこれ実装してたので
命名まではあまり考えてませんでした
>フォームの全辺にドックしたらformのクライアント領域の全部をpictureboxが覆うんだから
>マウスイベントはんて発生するわけないでしょ。
あーなるほど・・・
つまりformのMouseイベントで処理してるところをpictureboxでやればいいんですね
478:デフォルトの名無しさん
10/01/02 22:39:38
SATA のポート番号何番にどのハードディスクが刺さってるか知るには
どうしたらいいでしょうか?
WMI 使うのかなとは思ったんですが、どの namespace と class 使えばいいか
わからなかったので、よろしくおねがいします。
479:デフォルトの名無しさん
10/01/03 00:06:52
shift+tabキーでカーソルが入ったときにも
Enterイベントを発動させるにはどうすればいいですか?
480:デフォルトの名無しさん
10/01/03 00:11:43
別に何もしなくても発生するけど?
481:デフォルトの名無しさん
10/01/03 00:21:13
保存形式を独自の物にしたいと考えたのですが(他のアプリケーションでは開けない)
そこで考えたのがAES等による暗号化を施そうと考えました。
こういった場合にAES暗号化時に用いる鍵、IV情報はプログラム的に毎回同じものを生成するようにしておいたほうがいいのでしょうか?
482:デフォルトの名無しさん
10/01/03 08:05:10
変数名とnewの名前同じなのにいちいち二回かくのめんどい
abcde a= new abcde();
だったらabcdeが二回あってしつこい
a= new ebcde();
でよくね?
一回で済ます方法ないの?
483:482
10/01/03 08:10:24
new abcde() a;
解決しましたありがとうございます。
484:デフォルトの名無しさん
10/01/03 11:20:06
var つかえ
485:デフォルトの名無しさん
10/01/03 11:33:44
インテリセンスを使わない理由がわからない
486:デフォルトの名無しさん
10/01/03 11:45:58
AClass a = new までうてば AClass() が補完候補にでてくるもんな。
var だとそうはいかない。
487:デフォルトの名無しさん
10/01/03 11:51:46
C#にvarなんてあったのか!
488:デフォルトの名無しさん
10/01/03 12:00:06
何でも入る変数ではないぞ。コンパイル時に型推論してくれるだけだ。
489:デフォルトの名無しさん
10/01/03 12:07:16
拡張メソッドって何ですか?
Wikipedia見て見たけどよくわかんないです;
490:デフォルトの名無しさん
10/01/03 12:27:34
ポリモーフのルールがわからん
たとえば
void func(AClass);
なメソッドがあったとして
Object o=new AClass();
でfunc(o)はダメ
AClass a =new AClass();
func(a);は大丈夫
AClassを敬称してるBClassについては
BClass b = new BClass();
AClass a = new BClass();
のばあいfunc(b)、func(a)両方大丈夫
でOKなのか?
491:デフォルトの名無しさん
10/01/03 13:05:13
>>490
関数の引数の多態性は静的多態だからなぁ。
変数の型(new した方じゃなくて、 o とか a とか b の宣言時の型)に基づく。
それがキャスト可能かどうかがすべて。
492:デフォルトの名無しさん
10/01/03 17:35:04
>>489
MyFunctions.Foo(hoge);
というstaticメソッド呼び出しを
hoge.Foo()
と書けるようにする仕組み。
493:デフォルトの名無しさん
10/01/03 17:56:54
C#でoracleと接続する方法を教えて下さい
C#はExpressEdition 2008で
oracleは11g_home1です
かなり初心者ですので
一から教えていただけるとありがたいです
494:デフォルトの名無しさん
10/01/03 18:03:11
ODP.NETを使います。Oracleのサイトにやり方が載ってるので、
それを参考にしてください。
495:デフォルトの名無しさん
10/01/03 20:28:09
金払って教えてもらうレベルのことをただで丁寧に教えろという神経がわからん
496:デフォルトの名無しさん
10/01/03 20:29:57
まず、コンピュータを購入します
497:デフォルトの名無しさん
10/01/03 20:31:26
>>495
そう思ったらスルーすればいいだけですよ
498:デフォルトの名無しさん
10/01/03 20:51:25
>>493
ODBCでも使ってつないでろよ・・・。
499:デフォルトの名無しさん
10/01/03 20:52:11
>>493
ここはC#のスレです。
Oracleとの接続に関してはOralceのスレで聞いてください。
500:デフォルトの名無しさん
10/01/03 20:52:47
まあodp.netでぐぐればあとはできるからほっとこう
501:デフォルトの名無しさん
10/01/04 00:51:58
System.Collections.IEnumerable 型で渡されたCollectionオブジェクト
を処理する場合、その要素の元の型を知っていないと処理できないかと
思うのですが、使うときは foreach() 内などではその既知の型にキャスト
してから(そのプロパティ値などを)処理するということでよいでしょうか?
502:デフォルトの名無しさん
10/01/04 00:57:51
うん。
今から作るなら普通は System.Collections.Generic 名前空間内のものを使うだろうから
型がわからないってことはないと思うけど。
503:501
10/01/04 01:23:21
>>502
>System.Collections.Generic
こちらで送られてくる場合は型が付いてくる、ということなのですね。
古いコントロールだとIEnumerable で出来ているためにそういうことになる
ということなのですね。わかりました。ありがとうございました!!
504:デフォルトの名無しさん
10/01/04 03:40:42
foreachにキャストが含まれているのは知っているだろうけど、
あれもジェネリック型が無かった時代の産物というか発想だよな
505:デフォルトの名無しさん
10/01/04 08:05:23
Formやプログラムの終了方法ですが
Close();
Dispose();
Application.Exit();
Environment.Exit(0);
どれがいいんですか?
506:デフォルトの名無しさん
10/01/04 08:22:22
タスクマネージャーより最前面にフォームを持ってきたいのですが、
GetForegroundWindowAPIを使って自スレッドにアタッチした後Activateも駄目、
勿論TopMostやFocusも駄目でした。仕様上出来ないものなのですかね?
507:デフォルトの名無しさん
10/01/04 15:32:56
>>505
Close()やDispose()は指定したFormだけ。
Application.Exit()なら全てのFormを閉じてくれる。
Environment.Exit()は知らね。
508:デフォルトの名無しさん
10/01/04 16:24:53
>>505
ここ見れホイホイ
URLリンク(dobon.net)
509:デフォルトの名無しさん
10/01/04 16:52:51
ストリームからデータを読み出そうとすると
'System.Security.Cryptography.CryptographicException' のハンドルされていない例外が System.Core.dll で発生しました。
追加情報: 入力データが完全なブロックではありません。
というエラーが発生してしまうのですが何故なのでしょうか?
510:デフォルトの名無しさん
10/01/04 16:56:08
そのまんまだろう
復号ストリームに食わせたブロックが欠落してる
511:デフォルトの名無しさん
10/01/04 16:59:13
FileStreamを対象ファイルで作成し
CryptoStream作成時に上記で作成したストリームを渡して
CryptoStreamMode.Readを行っているのですがどこでデータが欠落するのでしょうか・・・。
512:デフォルトの名無しさん
10/01/04 17:00:52
対象ファイルの中身
513:デフォルトの名無しさん
10/01/04 17:03:45
>>512
そりゃそうですよね・・・orz
ファイル書き込む時に暗号化データをStringに直して書き込んでればそりゃだめになりますわ・・・orz
514:デフォルトの名無しさん
10/01/04 17:05:53
死んだ方がいい
515:デフォルトの名無しさん
10/01/04 17:20:17
PictureBoxの画像を半透明にしたいのですが。
516:デフォルトの名無しさん
10/01/04 17:23:47
if (a == 1)
{
b = 10;
}
else
{
b = 100;
}
例えば上記の様な場合
b = (integerA == 1) ? 10 : 100;
のように書くというのは
1)極力(あるいは絶対に)上の例のように書くべき。
2)極力(あるいは絶対に)下の例のように書くべき。
3)見易さに応じてケースバイケース。
4)特にセオリーはなく、完全に好みの問題。
熟練されてる方々は一般的に1~4のどのスタンスで使用されているのでしょうか。
よろしくお願いします。
517:516
10/01/04 17:25:44
下はintegerA じゃなくてa の間違いです。
それから上の b=100; も字下げ忘れてました。
見辛くてすみません。
518:デフォルトの名無しさん
10/01/04 17:29:34
あとから修正の入る可能性がないと仮定したうえで、
禁止されてない限り(禁止されることは珍しくない) 2 。
519:デフォルトの名無しさん
10/01/04 17:30:46
>>515
BackColorをTransparentにする
実装に無理があっていろいろトラブルが起きやすい方法なので,できれば
下に描画するものも含めてGraphicsで自前描画してしまうか
WPFでも使ったほうがいい
520:デフォルトの名無しさん
10/01/04 17:32:01
3でしょ、見やすさと言うかプログラムとして自然な方になる
例えば他にelse if が続いていて、たまたまこれだけがelseのみだった場合
これだけいきなり後者で書かれても不自然だ
521:516
10/01/04 17:37:50
>>518
>>520
可読性が上がるなら特に使用に抵抗感はないものの
職場などでは使用を禁止されることもあるという感じでしょうか。
下のような書き方はネット上では目にする機会があまり多くないように感じたので
一般的には推奨されない書き方なのかなと疑問に思っていました。
ありがとうございます。参考になりました。
522:デフォルトの名無しさん
10/01/04 17:43:54
どうしてもと言うならせめてこうして欲しい。
b = (hoge == 1 ? 10 : 100);
523:デフォルトの名無しさん
10/01/04 17:59:07
なるほど。勉強になります
524:デフォルトの名無しさん
10/01/04 18:08:25
>>516
式が複雑なら上で、計算しないなら下。
上の書き方は bが2回登場するので、自分は嫌い。
525:デフォルトの名無しさん
10/01/04 18:47:36
「手続き的ではなく宣言的に書け」という原則があるが
それに則っていえば一応下の方が良いことになるな
526:デフォルトの名無しさん
10/01/04 19:42:50
WinApp1-Resources-bg.bmpをBitmap型に取り出したいのですが、上手くいきません。
Bitmap bmp = new Properties.Resources.bg;
これでもbgが存在しないらしく、ビルド失敗します。
527:デフォルトの名無しさん
10/01/04 19:45:35
>>526
この辺かな?
URLリンク(www.atmarkit.co.jp)
528:デフォルトの名無しさん
10/01/04 20:21:46
>>516
三項演算子は複雑になると他人が(そして未来の自分が)解読しづらくなるから
ネストするようなのは素直に if 使うわな。
というか迷ったら if でいいと思うわ。
将来的に保守していくコードは冗長でつまんないぐらいでいい。
生成結果が変るならまた話は別になるけど。
529:デフォルトの名無しさん
10/01/04 20:40:19
>>516
俺も見やすさ重視でif使うかな
530:デフォルトの名無しさん
10/01/04 20:43:42
個人的な見解としては?使うのはマネージドな言語が使われる
今の時代でみるとギークぽいなあと思う。
C言語使うにしてもあえて?は使わないようにしてる
531:デフォルトの名無しさん
10/01/04 20:51:17
一行で済むなら三項演算子使うわ
532:デフォルトの名無しさん
10/01/04 20:53:49
ここまでを纏めると
1でも2でも3でもなく4ですね
533:デフォルトの名無しさん
10/01/04 20:55:41
>>532
そうそう
古参コーダーはたぶん>>531の意見だろうし
まあ変な先輩と一緒になるとスタイル押し付けられそうだけどね
534:デフォルトの名無しさん
10/01/04 20:57:43
if elseが大量にあるようなのなら三項演算子ですっきりさせるかあも
535:デフォルトの名無しさん
10/01/04 20:57:59
>>530
うーん、時代ってのでいうと、
・LINQ とかで文よりも式が見直されてる(if は式木にならないけど、? : はなる)
・C#の cond ? a : b は a と b の型の一致を保証できる
ってのもあって、むしろ昔よりも条件演算子使いやすいと思うよ。
536:デフォルトの名無しさん
10/01/04 20:59:12
>>534
if-else が大量に並ぶのはむしろ設計見直した方がいいかも。
仮想関数にならないかとか、分割できないかとか。
if-else が大量に並ぶような場面で ? : 使うと余計にひどいことになりそう。
537:デフォルトの名無しさん
10/01/04 21:02:43
>>535
使いやすいというかせこせこ1行にまとめてもなあと思う
538:デフォルトの名無しさん
10/01/04 21:29:02
ちゅーか >>516 が聞いてるのってあくまで単純な代入の場合だよね?
なんか途中で if か?三項演算子か?な議論にすりかわってるような
自分がどう書くかはともかく、他人が書いたソース読むときは
同じような処理が同じような書き方になってりゃどっち使ってても別に気になんないわ。
ちょくちょくぶれてるのが一番気持ちわるい。
539:デフォルトの名無しさん
10/01/04 21:29:04
>>536
泥臭い処理も世の中にはあるぞ
540:デフォルトの名無しさん
10/01/04 21:30:20
>>539
泥臭い処理は泥臭く書いた方が間違いが少ない
541:デフォルトの名無しさん
10/01/04 21:32:01
三項演算子の是非の話?
三項演算子は値に注目して論理性がはっきりするからいいと思うけどな
542:デフォルトの名無しさん
10/01/04 21:39:12
迷わずifです。ステップ数増やさないと稼げません。
543:デフォルトの名無しさん
10/01/04 21:44:34
今時ステップ数はないわ。
544:デフォルトの名無しさん
10/01/04 21:57:00
H社あたりはステップ換算じゃないの?
545:デフォルトの名無しさん
10/01/04 22:01:16
工程数だろ今は
546:デフォルトの名無しさん
10/01/04 23:00:34
人月換算なんかしてるから日本は終ってる
547:デフォルトの名無しさん
10/01/04 23:01:54
馬鹿は
if (a == 1) {
b = 1;
} else {
c = 1;
}
みたいのですら
a == 1 ? b = 1 : c = 1;
ってやりたがるからな。
548:デフォルトの名無しさん
10/01/05 00:01:24
特定のキー入力を受け付けない、ということは出来ませんかね?
左CtrlキーやAキーなど、入力されても他のウィンドウにはメッセージ送らない、みたいな。
549:デフォルトの名無しさん
10/01/05 00:26:50
>>548
キー入力全部いったん食ってから、特定のキーのときだけhandled=trueにしてしまう手はある。
グローバルフックでキー拾えばウィンドウまたがったキー入力拾いも可能。
550:デフォルトの名無しさん
10/01/05 00:36:24
特定のウインドウもしくはexeなどを監視してキー情報を
送ることは可能でしょうか?
551:デフォルトの名無しさん
10/01/05 01:02:36
>>550
再提出
特定のウインドウ(の○○)もしくはexe(の○○)などを監視して
キー情報を(○○へ)送ることは可能でしょうか?
552:デフォルトの名無しさん
10/01/05 01:07:04
細かい部品までは意識しません
送り先が起動してるかどうか確認して要るようなら指定されているキー情報を送るだけです
553:デフォルトの名無しさん
10/01/05 01:15:44
可能だけど、何を条件にするかによって判定する方法は違う
条件を聞いたのに答えなかったから回答もここまでだ
方法は自分で考えろ
554:デフォルトの名無しさん
10/01/05 01:19:06
いやそんな難しい条件ではないんですが・・・
ただ送りたい相手を調べる方法もよくわからないので
ヒントだけでもわかればと思ったんですが・・・
というかここは初心者スレですよね・・・
555:デフォルトの名無しさん
10/01/05 01:22:55
だからその条件を書けといってるんだろうが馬鹿め
話の通じない奴は初心者じゃなくて池沼だっての
556:デフォルトの名無しさん
10/01/05 01:23:46
そうだぞ池沼が
557:デフォルトの名無しさん
10/01/05 01:25:59
その辺がうまく説明できたらここで聞く必要がないと思うのですが・・・
やりたいことは特定アプリのショートカットキーなどを登録したボタンを
フォームに貼り付けて、そのボタンを押した際に送りたいアプリが居れば
sendkeyで送るなどして、居なければ送らないというだけの動作です
558:デフォルトの名無しさん
10/01/05 01:29:28
>>557
URLリンク(msdn.microsoft.com)
これでプロセス一覧を取る
ウィンドウハンドルとパスが入ってるから適当にやればいい
とりあえず十分だと思うが、上の方法は微妙に融通が利かないので
不便だと思ったらまた来い
559:デフォルトの名無しさん
10/01/05 01:42:54
>>558
ありがとうございます
560:デフォルトの名無しさん
10/01/05 01:43:00
>>550-551
549の答えでいんじゃない?
> 特定のウインドウ(の○○)もしくはexe(の○○)などを監視して
前者は
FindWindow→GetWindowThreadProcessIdして
SetWindowsHookExするDLLをDLLの作って
キー入力をSend/PostMessageで流すぐらいかな
後者は自分の頭ではちと大変で
EnumWindows→GetWindowThreadProcessIdで
exe特定するのに逆に辿る必要性がある気がするので
ハッシュリストにマーキングしたりで色々とめんどくさそう
561:548
10/01/05 02:19:10
>>549
キーボードをグローバルフックして、Handled=trueですね、やってみます。
562:デフォルトの名無しさん
10/01/05 02:24:33
グローバルフックはDLLいらんよ知ったか。
563:デフォルトの名無しさん
10/01/05 02:26:09
いつからいらなくなったんだ?
564:548
10/01/05 02:43:44
とりあえず、グローバルフックを使い、
メモ帳上でCtrl+Aを押してもaが入力されるようになりました。
しかし、Altキーの入力を防ごうとしても、Alf+Fでメニューが表示されたり、
Ctrl+Alt+Delでタスクマネージャが出たり、Alt+F4が使えたりします。
これらは仕方がないんですかね?
565:デフォルトの名無しさん
10/01/05 02:43:47
うろ覚えな知識でレスするもんじゃないなぁ
>>562
ありがとう
566:デフォルトの名無しさん
10/01/05 02:50:00
>>564
この辺は?
URLリンク(www.gine.jp)
567:デフォルトの名無しさん
10/01/05 02:50:57
>>564
CallNextHookExに渡すパラメータを何やかんやするとキー入力潰せた気がするけどどうかね
568:デフォルトの名無しさん
10/01/05 03:33:18
MSペイントで文字を画像にした場合と全く同じ結果になるように
Graphics.DrawStringを使用して文字列を画像化しています.
Graphics.DrawString
569:568
10/01/05 03:35:41
とちゅうで投稿しちゃいましたごめんなさい
Graphics.DrawString()の引数でフォントやサイズ,GraphicsUnitはきちんと指定したんですが
どうもMSペイントの場合と結果が異なってる気がします.
アンチエイリアスのせいかと思いすべて試してみたんですが同じ結果にはなりません.
文字描画の設定どうすればMSペイントと機能がおなじになるんでしょうか?
570:デフォルトの名無しさん
10/01/05 04:23:17
コードの難読化のためのツールとしてDotfuscator Community Editionというのが
付属してるような記述をネットで見つけたのですがVisual C# 2008 Express Edition
のような無料の物には付属しないのでしょうか?