C♯, C#相談室 Part34
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/09/06(水) 22:34:17前スレ
C♯, C#相談室 Part33
http://pc8.2ch.net/test/read.cgi/tech/1153537081/l50
過去スレは>>2-5あたり。
※スレタイに「#」を入れても消えちゃうので新スレ立てる人は要注意だ。
0685デフォルトの名無しさん
2006/10/13(金) 16:20:550686デフォルトの名無しさん
2006/10/13(金) 16:43:38System.Reflection.Emit名前空間を使って動的コード生成
0687デフォルトの名無しさん
2006/10/13(金) 17:55:110688デフォルトの名無しさん
2006/10/13(金) 22:15:100689デフォルトの名無しさん
2006/10/13(金) 22:33:17ここに似たようなサンプルがあるよ
こういう怪しい方法しかない
0690デフォルトの名無しさん
2006/10/13(金) 22:34:14そのレベルのソフトウェアの開発を行うならC++を使え
0691デフォルトの名無しさん
2006/10/13(金) 23:30:10意味不明。
0692デフォルトの名無しさん
2006/10/13(金) 23:53:370693デフォルトの名無しさん
2006/10/13(金) 23:59:090694762
2006/10/13(金) 23:59:52delegate TReturn TwoParameter<TReturn, TArg>(TArg arg1, TArg arg2);
static TReturn DynamicMull<TReturn, TArg>(TArg lhs, TArg rhs)
where TReturn : struct where TArg : struct
{
Type[] methodArgs = { typeof(TArg), typeof(TArg) };
DynamicMethod multiplyMethod = new DynamicMethod(
"", typeof(TReturn), methodArgs, typeof(Example));
ILGenerator il = multiplyMethod.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldarg_1);
il.Emit(OpCodes.Mul);
il.Emit(OpCodes.Ret);
TwoParameter<TReturn, TArg> invoke = (TwoParameter<TReturn, TArg>)
multiplyMethod.CreateDelegate(typeof(TwoParameter<TReturn, TArg>));
return invoke(lhs, rhs);
}
0695デフォルトの名無しさん
2006/10/14(土) 09:16:05実行直前にJITでnativeにコンパイルされるし。
なんなら、インストール時にコンパイルしてもいいんじゃない?
0696デフォルトの名無しさん
2006/10/14(土) 11:01:21ランタイムやそれをサポートするライブラリだったりするわけで、
ネイティブにできてもあんまかわらんと思う。
0697デフォルトの名無しさん
2006/10/14(土) 21:59:39ngen通せばいいじゃん。
それにライブラリはほとんど全部DLLになってるからそれは仕方ないし。
0698デフォルトの名無しさん
2006/10/16(月) 16:40:52SetLayeredWindowAttributesで半透明とかにすると
ToolStripTextBoxの描画にごみが出るんだけど、これってバグだよね
0699デフォルトの名無しさん
2006/10/16(月) 16:42:360700デフォルトの名無しさん
2006/10/16(月) 17:01:11これいれて、やっとvs2005が完全体になったと感じた。
eclipseのJDT並のリファクタリングができる。
ま、30日間のevaluationだがな。
0701デフォルトの名無しさん
2006/10/17(火) 15:45:54CopyかAllしか受け付けてくれないんですが。
これはなぜ?
0702デフォルトの名無しさん
2006/10/17(火) 17:13:10複数引きたい(固定長テキストが見やすいように)のですが、そういう
フリーのエディタを探してみたら見つからなかったので、自分で
作ろうと思ったのですが、どうやったらできるんでしょうか?
TextBoxを継承してSetStyle(UserPaint, true)してOnPaintでためしに
(0,0)-(100,100)に斜め線を引いてみたのですが、キャレットがある行は線が消えてしまうし、
リサイズなどで全体が再描画されると文字が全部消えてしまうし、
文字の上に線が来ないから役に立たないしで失敗しました。
あるいは、縦線機能があるフリーのエディタがあったら教えてください。
0703デフォルトの名無しさん
2006/10/17(火) 19:46:210704デフォルトの名無しさん
2006/10/17(火) 23:58:27beseを先にするだけじゃあ?
0705デフォルトの名無しさん
2006/10/18(水) 00:10:250706デフォルトの名無しさん
2006/10/18(水) 00:34:17一人前のエディタになるには遠過ぎる。
どの程度のエディタを作りたいのか知らないけど。
0707デフォルトの名無しさん
2006/10/18(水) 00:37:000708デフォルトの名無しさん
2006/10/18(水) 00:57:46http://becom.hp.infoseek.co.jp/cgi-bin/ikari/ikari.cgi
0709デフォルトの名無しさん
2006/10/18(水) 22:52:37http://money4.2ch.net/test/read.cgi/build/1160576047/306-310
352 :(仮称)名無し邸新築工事 :2006/10/18(水) 19:59:48 ID:pRhQsipC
他社で2万の工事を朝鮮人の名刺出して22万って
これって思いっきり脅しじゃん
355 :(仮称)名無し邸新築工事 :2006/10/18(水) 20:09:51 ID:sGavnuL0
記念カキコ。
この朝鮮人を擁護するニュースを流したNHKも許せん。
366 :(仮称)名無し邸新築工事 :2006/10/18(水) 21:00:38 ID:???
朝鮮人のせいで積水崩壊の危機だな
ここでも法則発動か・・・
369 :(仮称)名無し邸新築工事 :2006/10/18(水) 21:11:05 ID:???
【お知らせ】
阪神淡路大震災でも倒壊しなかった積水ハウスが、
一人の韓国人のせいで崩壊の危機に面しています。
379 :(仮称)名無し邸新築工事 :2006/10/18(水) 21:41:02 ID:???
>>370
まともな企業なら、顧客・消費者の信頼を大切にするよね。
積水ハウスは自ら、「在日コリアン人権協会」との関係を断ち、
いわゆる「人権団体」の実態を明らかにするべきだ。
恐喝や脅しを受けているのなら、それも公表するべきだ。
0710デフォルトの名無しさん
2006/10/19(木) 08:37:47コンストラクタ定義して0とかnull代入しとこうと思ったら今度は
「構造体には引数なしのコンストラクタは定義できない」エラー。
どうすればこの警告消せる?
0711デフォルトの名無しさん
2006/10/19(木) 08:50:440712702
2006/10/19(木) 10:02:09怒IKARIとか、CSV/固定長エディタはいくつか見てみたんですが、こういう
セル編集タイプのエディタだと今回はだめなんです。
というのも、こともあろうにレコード長がそろっていない固定長テキストを
送ってくる人(プログラム)がいて、そんなデータの確認とか修正も
しなきゃいけないので、どこがずれてるとかいうのは機械で判別できないし、
とりあえず縦線だけ表示してあとは人手でいじりたいのです。
(そいつを問い詰めろとかバグ直せとか、それもありますが)
>>703
自前で引いたほうが早いというのは、どうやるんでしょう?
0713デフォルトの名無しさん
2006/10/19(木) 10:03:06public Sample Empty = new Sample(0, 0, 0);
public int A, B, C;
public Sample(int a, int b, int c) {
A = a; B = b; C = c;
}
}
0714デフォルトの名無しさん
2006/10/19(木) 10:03:460715デフォルトの名無しさん
2006/10/19(木) 10:15:52さらに手抜きして
struct Sample {
public int A, B, C;
private Sample(int dummy) {
A = B = C = 0;
}
}
とか。さらに手を抜くと
#pragma warning disable 649
struct Sample {
public int A, B, C;
}
#pragma warning restore 649
というのもあり。
0716デフォルトの名無しさん
2006/10/19(木) 10:33:29引数なしのコンストラクタを使う限り#pragma使わないと警告は消えないのか。。
引数なしコンストラクタが定義できない意味がわからないな。
0717デフォルトの名無しさん
2006/10/19(木) 10:55:080718デフォルトの名無しさん
2006/10/19(木) 10:57:20さらにEmptyとかのメンバならメンバ定義だけで勝手に初期化してくれるし
0719デフォルトの名無しさん
2006/10/19(木) 10:59:36構造体のデフォルトの初期化は
全部ゼロ埋めがお約束だから
余計なことすんなってこと
0720デフォルトの名無しさん
2006/10/19(木) 11:18:56余計なことって何だ?
struct Sample {
public int A, B, C;
}
static void Main()
{
Sample s = new Sample();
Console.WriteLine(s.A);
}
これだけで「Sample.Aは割り当てられません。常に規定値0を使用します。」
って警告がメンバの数だけ出るんだが。
0721デフォルトの名無しさん
2006/10/19(木) 11:50:06線を引くトコだけやるのではなく、
キャラクタやキャレット、編集選択その他を全て自前でやるということ。
0722デフォルトの名無しさん
2006/10/19(木) 12:01:37正直すまんかった
0723デフォルトの名無しさん
2006/10/19(木) 12:39:50使えるけどワーニングいっぱい出てうっとおしいんだYO!
クラスのときは
class a{
int i=0;
int j
a(){ j = 0; }
}
とかできんのに構造体はどないなっとんねん
0724デフォルトの名無しさん
2006/10/19(木) 12:51:30でも、なんで警告出すんだろ?
0725デフォルトの名無しさん
2006/10/19(木) 16:25:520726デフォルトの名無しさん
2006/10/19(木) 17:03:10変更を加える前にイベントが発生してしまうようです。Listviewのアイテムに反映された後にイベントを
取るにはどうしたら良いのでしょうか?。
0727デフォルトの名無しさん
2006/10/19(木) 19:49:34メッセージごにょごにょで独自イベント実装
でいけそうな希ガス
0728デフォルトの名無しさん
2006/10/19(木) 20:15:30class ListViewEx : ListView
{
protected override void WndProc( ref Message m )
{
base.WndProc( ref m );
if( m.Msg == 0x204e )
{
NMHDR nmhdrPtr1 = (NMHDR)Marshal.PtrToStructure( m.LParam, typeof( NMHDR ) );
if( nmhdrPtr1.code == -176 )
{
MessageBox.Show( this.SelectedItems[0].Text );
}
}
}
}
struct NMHDR
{
public IntPtr hwndFrom;
public IntPtr idFrom;
public int code;
}
0729デフォルトの名無しさん
2006/10/19(木) 20:19:05× if( nmhdrPtr1.code == -176 )
○ if( nmhdrPtr1.code == -176 || nmhdrPtr1.code == -106 )
0730デフォルトの名無しさん
2006/10/19(木) 20:32:29値型は名前通り値なんで、引数無しというのは不自然だと感じないか?
int i = new int();
とか凄く不自然に感じないか?
0731デフォルトの名無しさん
2006/10/19(木) 21:41:08なるほど・・・
MyInt x = MyInt.Zero; とかするのも良いか。
0732デフォルトの名無しさん
2006/10/20(金) 13:32:07XmlDocumentを使ってPreserveWhitespaceプロパティをLoad前やSave前でtrueにしても
XMLファイル中のXML属性間の空白文字が維持されないようなんです。
XML属性間の空白を維持したまま更新するにはどうすればいいですか?
そもそもXmlDocumentを使うなということになるんでしょうか?
0733デフォルトの名無しさん
2006/10/20(金) 13:56:21ツール12個まで
0734デフォルトの名無しさん
2006/10/20(金) 15:43:07残念ながら、そういうこと
0735726
2006/10/20(金) 19:52:15ありがとうございます。
色々と試してみるのですが上手く拾えず・・・。
メモっておいて他の事をしながら閃いたら再チャレンジしてみます。
0736デフォルトの名無しさん
2006/10/20(金) 21:19:34それは全然おもわない
0737デフォルトの名無しさん
2006/10/21(土) 11:50:58何処が間違えているのかご指導ください。
namespace test.cs
{
public partial class Form1 : Form
{
private const int WM_DRAWCLIPBOARD = 0x0308;
private const int WM_CHANGECBCHAIN = 0x030D;
[DllImport("user32")]
public static extern IntPtr SetClipboardViewer(IntPtr hWndNewViewer);
[DllImport("user32", CharSet = CharSet.Auto)]
public extern static int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
protected override void WndProc(ref Message m)
{
if (m.Msg == WM_CHANGECBCHAIN)
{
MessageBox.Show("WM_CHANGECBCHAIN");
}
else if (m.Msg == WM_DRAWCLIPBOARD)
{
MessageBox.Show("WM_DRAWCLIPBOARD");
}
else
{
base.WndProc(ref m);
}
}
}
}
0738デフォルトの名無しさん
2006/10/21(土) 11:55:43途中にモーダルなUI挟むと危ないんじゃね?
ついでにメッセージの処理サッパリしてないよ?
0739デフォルトの名無しさん
2006/10/21(土) 23:20:19即、ググルようにw
0740デフォルトの名無しさん
2006/10/21(土) 23:31:15あれはどうやれば対応出来るんだろ?
0741デフォルトの名無しさん
2006/10/21(土) 23:41:36http://tricklib.com/cxx/ex/calligrapher/
こんなヤツのこと?
0742デフォルトの名無しさん
2006/10/21(土) 23:56:12てか、C#で組むのまんどくさそう。
0744デフォルトの名無しさん
2006/10/22(日) 07:16:11監視してるフォルダが使用中になってます。
ドラッグドロップでフォルダの移動等をすると、ファイルが入ってるから移動できないとか
ファイルが使用中とかのメッセージボックスが出てきます。
どうにかなりませんかね。
0745デフォルトの名無しさん
2006/10/22(日) 07:38:080746デフォルトの名無しさん
2006/10/22(日) 08:34:19それ以上になるとエラーで止まるんですよね。
監視をやめると普通に動くという。
監視はルートだけにしたほうがええんかなぁ。
0747デフォルトの名無しさん
2006/10/22(日) 08:40:12ゴメン、
> FileSystemWatcherでエクスプローラーのようなツリービュー作ってるんですが。
> 監視してるフォルダが使用中になってます。
もっとkwsk書かないと、問題を切り分けられないyo
0748デフォルトの名無しさん
2006/10/22(日) 12:02:09フォームにIEコンポーネント(axWebBrowser)貼り付けてるんですが、
JavaScriptを無効にする方法知りませんか。
IEの設定で「Internet Explorer Webbrowser コントロールのスクリプトの許可」を無効にすればいいかと思ったのですが
inputタグのonclickで呼ばれる関数が実行されてしまいます。
0749デフォルトの名無しさん
2006/10/22(日) 12:07:430750デフォルトの名無しさん
2006/10/22(日) 12:11:14俺はあきらめましたが何か
0751748
2006/10/22(日) 12:42:440752デフォルトの名無しさん
2006/10/22(日) 15:56:15Cドラ配下をルートに指定して、サブフォルダの監視もOnにして
20階層のフォルダを移動しても再現しないぞ。
0753デフォルトの名無しさん
2006/10/22(日) 17:20:50class Node:TreeNode
{
public Node(string path)
{
foreach(string dir in Directory.getDirectory(path))
this.Nodes.Add( new Node(dir) );
this.FolderWatch();//ここで監視
}
}
こんな感じで。
説明足らずでモウシワケナス。
これはイベントが続出すると同期が取れないってありましたが、
そのせいなのかな。
でもエクスプローラーの操作もロックかかってるんですよね。
0754デフォルトの名無しさん
2006/10/22(日) 19:46:09コードがどんどん汚くなってきた。
0755デフォルトの名無しさん
2006/10/22(日) 22:46:360756デフォルトの名無しさん
2006/10/23(月) 15:22:23自分はC++でダイヤモンド継承以外の多重継承はよく使っていました。そうすることでいろいろな場面に対応しうるクラスを実装の手間を省きながら実装できるからです。
C#ではもちろんできません。皆さんはどうしてるんでしょう?
1.画面クラスでかつ構造がTreeNodeであるようなものを実装するとき多重継承的にしたい。
2.インターフェースでやって実装をImplementクラスに移して委譲しようとすると継承するすべてのクラスで対応しないといけないためめんどくさい。
意見くだされ。
0757デフォルトの名無しさん
2006/10/23(月) 15:56:31C++ の時と同じ感覚で C# での設計を行わない
0758デフォルトの名無しさん
2006/10/23(月) 16:00:21漏れなら1みたいなものはそもそも多重継承せずに、TreeNodeはプロパティで公開する。
2は確かに面倒だけど、漏れの場合大量のインタフェイスの実装が必要な場面ってCOM
オブジクェクト作る時くらいだから、そこだけ ATL/C++ でやってます。
0759デフォルトの名無しさん
2006/10/23(月) 16:11:59>>758 今想定してるのは画面のパネルでかつ入れ子の画面アイテムを持つようなものなんですが、そのばあいTreeNodeのプロパティは何を指すんでしょう?
Widget widget;
widget=widget.TreeNode.NextSibilingItem();
見たいな感じということ?インプリメントクラスのイメージ?
0760デフォルトの名無しさん
2006/10/23(月) 16:36:29例えば System.Windows.Forms.Panel だと、入れ子になった Control は Controls プロパティに入っている。
そういう話じゃなくて?
あと、コードのコピペを嫌うのなら、
1: アスペクト指向などを使って、コードを織り込む
2: Java の AdapterClass みたいなのを用意し、それを継承した内部クラスを作る
とか。
ついでに言うと、何に困っているのか分からんのです (;´・ω・`)
0761デフォルトの名無しさん
2006/10/23(月) 16:57:12Widgetが入れ子で別のWidgetを持ってる可能性があります。でのそのデータ構造はTreeとして扱おうとしています。
インスタンスのwidgetは描画などの際にはWidget型として、トラバースする際にはTreeNode<Widget>として扱われます。
これは一例なんですが、いずれにしてもいわゆる多重継承とかMixinを使いたくなるときがありますよね?
ある役割のクラスであるが同時にほかの役割も果たすようなものです。そういうのをインタフェースで定義するのはいいけれど実装がめんどくさいよねってことです。
C++なら実装継承できていたものをC#ではできない。ならば設計を変えるか実装方法の改良をするか。おのおのでいい方法がないかと意見を聞いてみたかったんです。
0762デフォルトの名無しさん
2006/10/23(月) 17:08:24mix-in が出来ると便利なのは漏れも C++ 使いなので大変よくわかるけど、
その例では全く mix-in の必要性を感じない。
class WidgetA : Widget
{
public WidgetList Children { ... }
...
}
としか設計しようがないような気すらする(漏れは頭が固いから)。
昔漏れの知り合いが、Rectangle を派生させて Window を作っていたのを思い出した。
C# では機能の追加は、mixinではなく委譲とdelegateでのコールバック(orイベント)で
実現するのが良いと思う。
0763デフォルトの名無しさん
2006/10/23(月) 17:12:40>実現するのが良いと思う。
蛇足気味に説明を追加。
上の例では、コールバック等を使ってWidgetA が自分の子の WidgetList のobserverになるという意味。
内容への変更などを監視するために(もしそうしたいなら、だけれども)。
0764761
2006/10/23(月) 17:14:45すまんです。例が悪いのでこの例の場合というのははずしておいてください。
自分のイメージではクラスの継承にしろインタフェースの継承にしろIsAのために行っているので機能追加のためという意識は低いです。
そうする必要があるときに実装のめんどくささをどうしようかというのを聞いてみたかったんです。
0765デフォルトの名無しさん
2006/10/23(月) 17:48:580767デフォルトの名無しさん
2006/10/23(月) 18:13:450768デフォルトの名無しさん
2006/10/23(月) 18:15:51……正直、is-a 継承を多用することってあまり無い希ガス
0769デフォルトの名無しさん
2006/10/23(月) 18:23:21無いというか無くそうとされたというかそんな感じのほうが。
というか印象がもうC++脳なのでばっさり忘れちゃってください。
かつての自分への自戒も込めていうけども。
.NETってオブジェクトがどうとかJavaっぽいとかいわれてるけど
本質はコンポーネントに特化したある意味Crazyな実装なので。
ちなみに、Mix-inは2.0だとジェネレータとpartialでやろうと
している人はいます。
0770デフォルトの名無しさん
2006/10/23(月) 19:06:51>>769 たすかに。けんどそげなこといわれてもWidgetでかつSerializableなものはどうすればいいですだ。
VisitorとAdapter組み合わせればいけないこともないけれどイヤンです。
0771デフォルトの名無しさん
2006/10/23(月) 19:34:14??
IWdget と ISerializable を両方とも継承すればいいのでは?
0772デフォルトの名無しさん
2006/10/23(月) 19:42:38インプリメントクラス作って、委譲コードを継承クラス全部に書かないといけない。
>>769正直ジェネレータっぽいのを作らないとだめ層です。
0773デフォルトの名無しさん
2006/10/23(月) 19:43:26ヒント:C++ で書けばよくね?
0774デフォルトの名無しさん
2006/10/23(月) 19:56:390775デフォルトの名無しさん
2006/10/23(月) 20:02:410776デフォルトの名無しさん
2006/10/23(月) 20:11:58そっちはそっちでまた別のところではまりそうな気がする。
0777デフォルトの名無しさん
2006/10/23(月) 20:30:08ポトペタで作れちゃうよね
0778デフォルトの名無しさん
2006/10/23(月) 20:32:090779デフォルトの名無しさん
2006/10/23(月) 20:35:46てっきりリネームしてるだけかと思ってた
0780デフォルトの名無しさん
2006/10/23(月) 21:48:57選択ってポイントされてるという意味か?
ループで回して子をのSelectedを調べる
0781デフォルトの名無しさん
2006/10/23(月) 21:55:57これからC#(Visual C#2005 Express Edition )を始めるのですが、1から始めるC#のおすすめ本かHPってありますか?
プロジェクトの作り方から解説してある方が助かります。
0782デフォルトの名無しさん
2006/10/23(月) 22:00:030783デフォルトの名無しさん
2006/10/23(月) 22:04:20ふらっとスレのテンプレにいろいろ
C#は触るより言語から先に覚えた方が速いと思う
0784デフォルトの名無しさん
2006/10/23(月) 22:07:46http://msdn2.microsoft.com/ja-jp/library/xyh50b90.aspx
■ このスレッドは過去ログ倉庫に格納されています