C#, C♯, C#相談室 Pa ..
810:デフォルトの名無しさん
08/06/08 10:51:16
過疎
811:デフォルトの名無しさん
08/06/08 11:54:09
IDEの使い方に関するおすすめの書籍は?
812:デフォルトの名無しさん
08/06/08 17:17:44
ListViewで特定のカラムだけ非表示にすることは出来ますか?
リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたいのです。
813:デフォルトの名無しさん
08/06/08 18:36:00
>>812
ListViewのColumnHeaderで特定のカラムだけWidth=0にすることが出来ませんか?
リストには追加するのに非表示にするという、一見無意味な操作なのですがそうしたければそうすることもできるでしょう。
814:デフォルトの名無しさん
08/06/08 19:05:09
>>813
非表示にしたいカラムだけ幅調整不可って出来ますか?
Widthを0にしただけでは幅調整されて見えてしまうので・・・。
815:デフォルトの名無しさん
08/06/08 20:00:43
ListViewItemから派生させたクラスで持つようにして
そのオブジェクトをListViewに追加すれば?
816:デフォルトの名無しさん
08/06/08 20:12:26
つかTagで十分だろ
817:デフォルトの名無しさん
08/06/08 21:27:03
>>815
なるほど。ありがとうございます。
>>816
Tagは使ったこと無いので調べてきます。
ListViewの方ではなくListViewItemの方ですよね?
818:デフォルトの名無しさん
08/06/08 22:33:03
ColumnResizingとかそんな感じのイベントあるから、
そこで非表示にしたいカラムが幅調整されそうになったら制限すればいい。
819:デフォルトの名無しさん
08/06/08 22:34:14
>>818
なるほどありがとうございます。
Tagを使ったものがまさに用途にあった使い方でした。
820:デフォルトの名無しさん
08/06/09 10:09:01
スレリンク(tech板)
821:デフォルトの名無しさん
08/06/09 12:07:21
メソッド呼び出し中にキー入力を受け取るにはどうすればいいですか?
822:デフォルトの名無しさん
08/06/09 12:16:03
>>821
メソッド呼び出しを別スレッドにして、メインスレッドでキー入力を
待てばいいんじゃない? 全然はずしてたらご免。
823:デフォルトの名無しさん
08/06/09 12:17:01
モードレスダイヤログ?
全然外してるかも。
824:あにす ◆sGTL1yK0.6
08/06/09 18:46:26
DoEvents()?
外してるかな…。
825:デフォルトの名無しさん
08/06/10 05:54:09
>>702
for (int i=0; i<1000; i++) Hoge((a) => a + 1);
のようなコードは次にように最適化されるようだ。
HogeDelegate f = null;
for (int i=0; i<1000; i++) {
if (f == null) { f = (a) => a + 1; }
Hoge(f);
}
826:デフォルトの名無しさん
08/06/10 06:30:01
>>825
ということは>>702はデマってことか
827:デフォルトの名無しさん
08/06/10 07:01:43
デマというかもうちょい境界線が上なんだろうな。
828:デフォルトの名無しさん
08/06/10 11:32:48
質問
以下のようにListのSyncRootで排他処理を行っている最中に
Listの実体を入れ替えた場合、
この排他でLock開放待ちをしていたほかのスレッドはどうなるのでしょうか?
lock (((ICollection)(mylist).SyncRoot)[
if(xxx){
mylist = new List();
}
}
829:デフォルトの名無しさん
08/06/10 12:23:17
とりあえずそんなキモいことするな
mylistの置き換えより先に別スレッドがmylist.SyncRoot取得してたら古い方でロック待ちするし
置き換え後にSyncRoot取得したら新しい方でロック待ちする
古い方でロック待ちに入ったらロック取得したスレッドのlockステートメント終了でロックに入る
新しい方ならロックされてないから待たないでそのままロック取得するだろう
830:828
08/06/10 12:45:29
やっぱり駄目ですよね。
コレでは排他処理の意味をなさない。
わかりました!!有難う御座います。
831:デフォルトの名無しさん
08/06/10 21:33:47
ListViewのTagで思い出したが、なんでシリアル化してもTagは保持されないのですか?
832:デフォルトの名無しさん
08/06/10 21:51:45
何が入ってるか分からないから
保持しても意味がないものが入ってるかもしれないから
833:デフォルトの名無しさん
08/06/10 22:53:07
あまり納得できんが、そういうことなんだと納得しておきます。
834:デフォルトの名無しさん
08/06/10 23:06:12
ADO.NET 2.0で、System.Data.SqlClientを使って、バッチ処理ってどうやんのが普通なの?
なんかSqlCommandSetってのが昔はあったらしいけど、今は隠されてしまったみたいだし、
ていうか、
var cmd = new System.Data.SqlClient.SqlCommand();
cmd.CommandText = "begin transaction;" +
"insert into t values(1,2,3);" +
"insert into t values(2,3,4);" +
....
"commit transaction;";
みたいにカンマで区切っただけのSQL文でも一応できたみたいなんだけど、
C#/ADO.NET2.0/SQL Serverでほかの人はどういう風にバッチ処理してるのか知りたいです。
835:デフォルトの名無しさん
08/06/10 23:19:11
ストアドプロシージャです。
836:デフォルトの名無しさん
08/06/10 23:21:23
リンクの冒険
837:デフォルトの名無しさん
08/06/10 23:30:44
>>835
お返事ありがとうございます。
ところで、クライアント側でユーザーが複数項目を選んで、
編集して、それで更新みたいな処理の流れだと、可変引数が
使えないストアドでは対応しきれないのでわないでしょうか?
838:デフォルトの名無しさん
08/06/10 23:40:52
>>836
えーと……ゼルダの伝説?
それはともかく、C#のバージョンが分からんが3.0ならLINQがおすすめ
GUIでD&Dするだけでエンティティクラスが作れて、デフォルトでトランザクション処理
LINQ to SQLがSQL Server限定なのがあれだけど
839:デフォルトの名無しさん
08/06/11 14:58:07
>>837
「バッチ処理のパラメータを格納しておくテーブル」を作るという手もある。
そのテーブルにINSERTしてからバッチ用のストアドプロシージャを起動して、
ストアドの中でテーブルを読み込んで、それを元に処理を行う。
結果のサマリーも格納するようにすれば、バッチ処理の履歴も兼ねることができる。
840:デフォルトの名無しさん
08/06/11 20:40:20
C#中でエクセルのファイルを開こうとすると、下記のエラーが発生します。
ちなみに.NET Framework 2.0を使っています。
System.Runtime.InteropServices.COMExeption(0x80040154):CLSID{00024500-0000-0000-C000-000000000046}を含むコンポーネントのCOMクラスファクトリを取得中に、次のエラーが発生しました。:80040154
3台あるPC(XP)で1台で起こりますがその原因が分かっておりません。
作成したプロジェクトのbin\release以下には3個のCOMと関係がありそうなDLLがあります。
・Interop.Excel.dll
・Interop.Microsoft.Office.Core.dll
・Interop.VBIDE.dll
これら3個を
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
を使って登録しても結果は同じです。
どういった原因が考えられるでしょうか?
841:デフォルトの名無しさん
08/06/11 21:21:57
そこにはExcelがインストールされていないなんてオチじゃないよな。
「00024500-0000-0000-C000-000000000046 80040154」でググって
最初に出てきたところに書いてあった事例がまさにそうだっただけだけど。
URLリンク(forums.msdn.microsoft.com)
842:840
08/06/11 21:26:24
確認させていただきたいのですが、
Excelがインストールされていない環境では、COMを通じたエクセルファイルの操作というのはやはり出来ないものでしょうか?
というのは、
動作確認をした3台のうち
1台にだけExcelをインストールしていたつもりだったのですが、実際には2台にインストールされており、
上記の
System.Runtime.InteropServices.COMExeption(0x80040154):CLSID{00024500-0000-0000-C000-000000000046}を含むコンポーネントのCOMクラスファクトリを取得中に、次のエラーが発生しました。:80040154
このエラーはエクセルがインストールされていないパソコンでだけ起こっていました。
レジストリのCLSIDに無理やりエクセルを登録たところエラーが変わって
System.IO.FileNotFoundException: CLSID {00024500-0000-0000-C000-000000000046} を含むコンポーネントの COM クラス ファクトリを取得中に、次のエラーが発生しました: 80070002。
場所 NFSAutoGui.Tettou.product(String path)
こういうことになってしまいました。
FileNotFoundExceptionってようするにExcel.exeが見つかりませんよ、ということかと思いますが。
ということで
Excel.exeがインストールされていない状態では、COMを通じたエクセルファイルの操作というのはやはり出来ないものでしょうか?
843:デフォルトの名無しさん
08/06/11 21:31:00
>>842
そりゃ、できんわな。それができたら、みんなExcel買ってくれなくなってMSが困っちゃう。
844:デフォルトの名無しさん
08/06/11 21:36:37
>>841
>>843
どうも。。。
インストールしてないつもりのPCで動いたと思ってたんで動くかと思っていました。
アホ過ぎ。
ところで
Excelのバージョン10が開発マシンに入っております。
COMの参照設定で、Microsoft Excel 10.0 Object Library のバージョン1.4を設定しているのですが、
これで配布した場合って、Excelのバージョン10.0が入っていないと動かないんですかね?
Excel 2007しか入っていないようなPCでは動かないんですか?
845:デフォルトの名無しさん
08/06/11 21:43:55
>>842
だって、そのExcelファイルの操作って、
Excelが持っている機能を呼び出しているだけだ。
普段目にするUIはExcelの1つの顔にすぎない。
846:デフォルトの名無しさん
08/06/11 21:59:28
>>844
YES
847:デフォルトの名無しさん
08/06/11 22:01:05
解放忘れとかやりまくってそうだな
848:デフォルトの名無しさん
08/06/11 22:10:55
こんなこと言ってる奴がまともに作れてるわけないだろ
でバージョン依存したくないならせめてVB.NETにしとけ
849:デフォルトの名無しさん
08/06/11 22:15:41
WSHのVBSとか呼び出すのが楽だよ
850:デフォルトの名無しさん
08/06/11 22:19:02
>>845
そういうことですね。
>>846
了解しました。
>>847
一応タスクマネージャのプロセスタブにEXCELは居ないので大丈夫かと...
ところで、
開発マシンにEXCEL10しか入っていませんが、
その他のバージョンのEXCELも扱いたい場合に必要になってくるのが
PIAとかいうものなのでしょうか?
851:デフォルトの名無しさん
08/06/11 22:40:52
YES
852:デフォルトの名無しさん
08/06/11 22:42:04
あんたは質問を有料にしたいわ
853:デフォルトの名無しさん
08/06/11 23:58:05
DateTime型のToString()の書式設定はどんな環境の場合に変わるんでしょうか?
たとえば("d")ならカルチャによって変わりますが、
カスタム書式の("yyyy/MM/dd")も環境によって変わるようです。
どんな環境で変わるんでしょうか??
854:デフォルトの名無しさん
08/06/12 00:37:13
>>853
質問の意味がよくわからないけど「カルチャが異なる環境で変わる」ということが聞きたいのかな。
CurrentThreadのCurrentCultureとかCurrentUICultureとかを色々変えながら動かしてみると
わかりやすいかもしれない。
わかりにくいかもしれない。
855:デフォルトの名無しさん
08/06/12 00:37:53
カルチャによって変わるよ。
"/" はカルチャ依存の日付区切り文字だし、
この世には和暦とかヒジュラ暦とかあるだろ。
856:デフォルトの名無しさん
08/06/12 00:47:15
>>854-855
ありがとうございます。
"/"はカルチャ依存なのですね。
カスタム書式なら"/"も表示してくれると思っていたのですが、それすらも期待してはいけないのですね。
自分の環境では再現できない&相手の環境がよくわからないので質問しました。
では"yyyyMMdd"ならどの環境でも期待通り"20080612"になることを前提にしていいのでしょうか?
857:デフォルトの名無しさん
08/06/12 01:11:03
>>856
>>855の最後の行を読んで下さい><
DateTimeFormatInfo.InvariantInfoわたしとけばいいよ。
858:デフォルトの名無しさん
08/06/12 01:17:15
>>856
CultureInfo ci = new CultureInfo("ja-JP", true);
ci.DateTimeFormat.Calendar = new JapaneseCalendar();
Thread.CurrentThread.CurrentCulture = ci;
Console.WriteLine(DateTime.Now.ToString("yyyyMMdd")); // 200612
Console.WriteLine(DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo)); // 20080612
859:デフォルトの名無しさん
08/06/12 01:17:26
>>857
なるほどありがとうございました!
yyyyでも和暦だと20とかになるんですね。
DateTimeFormatInfo.InvariantInfoで解決しました。
860:デフォルトの名無しさん
08/06/12 01:18:12
>>858
ありがとうございました。勉強してみます。
861:デフォルトの名無しさん
08/06/12 04:18:07
Compact FrameworkのWebBrowserでDocumentTextにHTML設定するとプログレスバーが出てくるのが嫌なんだけど
非表示にする方法はあるだろうか?
それともHtmlView.dllをラップしたほうが賢明だろうか
862:デフォルトの名無しさん
08/06/12 11:14:25
できるだけメモリ使用量を減らすため、
IDisposableを実装したほうが良いクラスの判断でまよっています。
クラスA DataSetをプロパティとして保持
クラスB stringをプロパティとして保持
クラスC byte配列をプロパティとして保持
クラスAはDisposeメソッドを用意してデストラクタから呼び出していますが、
クラスBとCもDisposeを用意したほうが良いでしょうか?
また、stringやbyte配列はDisposeメソッドがないので、どうやってメモリを解放するのかもわからないです。
863:デフォルトの名無しさん
08/06/12 11:38:41
全部IDisposable無用
864:デフォルトの名無しさん
08/06/12 11:48:12
Disposeを実装するのは、自前でネイティブリソースを扱う時か
Disposeを持つクラスをメンバとして持つ時だけで良い。
それ以外ではメモリの開放はGCにまかせた方が一般的にパフォーマンスは高い。
なんとなくメモリは少ないほうがいいよね的な考えしかないなら逆効果にしかならんよ。
性能を犠牲にしてでもどうしても局所的にワーキングセットの縮小をせまられるのなら
参照をnullにしてGC.Collectを呼び出す。
865:862
08/06/12 12:58:06
>>863-864
ありがとうございます。
なるほど、ではどうしても実装するならクラスAだけで
良いのですね。
Webアプリなのですが、特定のページにアクセスが集中し
使用メモリが大きくなってしまうので、できるだけ解放できるところは
解放したかったのです。
処理終了時にGC.Collectを呼び出すことにします。
866:デフォルトの名無しさん
08/06/12 13:22:05
GCでオブジェクトが回収されるときの動作は
1 デストラクタ(ファイナライザ)があればそれを実行する
2 メモリの回収
Disposeは1を代行するもので、メモリの回収はあくまでもGCが行う。
867:デフォルトの名無しさん
08/06/12 14:22:22
質問
RichTextBoxに画像を挿入したいんですが、無理?
868:デフォルトの名無しさん
08/06/12 14:27:55
とりあえずクリップボード越しなら可能
869:デフォルトの名無しさん
08/06/12 14:35:42
>>868
サンプルコード貼ってある所知りませんか?
870:デフォルトの名無しさん
08/06/12 14:41:09
検索エンジン様が知ってることを知ってる
871:862
08/06/12 17:31:00
>>866
ありがとうございます!
だいぶ勘違いしていました。
デストラクタでDispose呼んでも意味ないのですね。
872:デフォルトの名無しさん
08/06/12 23:05:15
え、デストラクタとGCは関係ないんだと思ってた…。
じゃあデストラクタが実行されるタイミングってスコープを抜けた瞬間とは限らないの?
873:デフォルトの名無しさん
08/06/12 23:10:28
C#でデストラクタ?
874:デフォルトの名無しさん
08/06/12 23:13:38
>>872
全然関係ない。スコープと一致させたいときにはusingを使わないといけない。
逆に言えばそれがIDisposeとusingの存在意義。
>>873
まあC# 1.0のころはデストラクタって言っていたはずだし、いいじゃないか。
875:デフォルトの名無しさん
08/06/12 23:16:20
DisposeとGCも全く関係ないよ
種も仕掛けもない本当にただの普通のメソッド
876:デフォルトの名無しさん
08/06/12 23:18:11
あ、そっか。C#はデストラクタなんてほとんど書かないや。
877:デフォルトの名無しさん
08/06/12 23:20:35
本当にどうしてもどうしても必要な場合でなければむしろ書いてはいけない
878:デフォルトの名無しさん
08/06/12 23:56:46
IDisposeを実装するときの基本パターン
class DispBase : IDisposable {
~DispBase() { Dispose(false); }
public void Dispose() { Dispose(true); System.GC.SuppressFinalize(this); }
public virtual void Dispose(bool disposing) {
if (disposing) { }
}
}
GCとの関係といえばこの命令だけ。
System.GC.SuppressFinalize(this);
後片付けが終わったからファイナライザは呼び出さなくていいとGCに指示している。
これでファイナライザは呼び出されなくなる。
879:デフォルトの名無しさん
08/06/13 00:03:21
パフォーマンスとかメモリとかやたら気にする奴が
こういうでたらめやって事態を悪化させやがるんだよな…
GC呼ぶなんてやめとけよ、特にWebではな…
880:デフォルトの名無しさん
08/06/13 00:05:54
余計な一言はいいから、ね
881:デフォルトの名無しさん
08/06/13 00:07:23
いつでも回収できるメモリは空いていると同じということを理解できるまでには修行が必要じゃて
セッションにでっかいオブジェクトの参照抱え込んだままで、GC.Collect呼びまくるとかやってそう
882:デフォルトの名無しさん
08/06/13 00:08:02
これくらい言っとけばたまたま見かけて疑問を持つ奴が増えて好都合
883:デフォルトの名無しさん
08/06/13 00:12:21
そういやあれ不思議なんだよな。
メモリとか異様に気にするのにセッションとかは湯水のように平気で使うのな。
884:デフォルトの名無しさん
08/06/13 00:21:12
結局、明確にスコープ抜けたときにリソースを即座に解放して欲しいという場合で複数から参照されてる場合には参照カウント的なものが必要になるんだ世根(´・ω・`)
885:デフォルトの名無しさん
08/06/13 00:27:41
COM InteropのRCWがそういう具合になってますね。
もう少しスマートにできなかったものか。
886:デフォルトの名無しさん
08/06/13 18:37:51
ファイル書き込みじのフォーマットのことですが。
下記プログラムを実行すると。
=====================
static void Main(string[] args)
{
StreamWriter sw = new StreamWriter("test.txt",false,Encoding.GetEncoding(932));
sw.WriteLine("{0,10} => {1}","ABCD",1234);
sw.WriteLine("{0,10} => {1}","あいうえ",1234);
sw.Close();
}
=====================
結果として
=====================
ABCD => 1234
あいうえ => 1234
=====================
こういった出力になります。
説明を添えると、
ABCDの前に半角スペース文字6文字
あいうえの前に半角スペース文字6文字。
という出力結果になります。
理想としては、
ABCDとあいうえの右端をそろえたいので
あいうえの前に半角スペース文字2文字が入って欲しいのです。(あいうえは8文字とみなす。)
そのようなことは可能でしょうか?
どのようにすれば可能でしょうか?
887:デフォルトの名無しさん
08/06/13 21:34:01
URLリンク(unicode.org)
ここに、UnicodeにおけるCJKの表示幅の規定があるから、
適当に文字列の表示幅を計算して残りを埋めれば良い
888:デフォルトの名無しさん
08/06/14 06:42:57
>>886
つまり、いわゆる全角文字を半角文字2文字分として処理したいってことか?
Encoding.GetByteCount()で、各文字コードにおけるバイト数が得られるから、
Shift-JISにおけるバイト数を使ってスペースの文字数を計算すればいいだろう。
こんな感じで。
Encoding sjisEnc = Encoding.GetEncoding(932);
string text = "あいうえ";
string space = new String(' ', 10 - sjisEnc.GetByteCount(text));
Console.WriteLine("{0}{1} => {2}", space, text, 1234);
889:デフォルトの名無しさん
08/06/15 14:35:46
インストーラーの起動条件でJ#2.0再配布パッケージを
必須にする方法教えて下さい。
890:デフォルトの名無しさん
08/06/15 15:12:29
スレ違い
891:デフォルトの名無しさん
08/06/15 17:16:12
いや 殆どC#で一部だけJ#使ってるんすよ…
892:デフォルトの名無しさん
08/06/15 17:17:38
いや、その理屈はおかしいだろ…
893:デフォルトの名無しさん
08/06/15 20:01:44
その発想はなかったわ
ってかVSスレで聞いたら?
894:デフォルトの名無しさん
08/06/15 20:03:22
ほい 逝ってきます。
すまぬかった
895:デフォルトの名無しさん
08/06/16 12:56:58
delegateを使用して(使用しなくても同様のことができればいいのですが・・・)
using System;
using System.Collections.Generic;
delegate int getItem();
class DelegateTest
{
public static void Main()
{
List<int> liList = new List<int>();
getItem a = new getItem(A);
a += new getItem(B);
a += new getItem(C);
liList.Add(a());
}
static void A(){return 1;}
static void B(){return 2;}
static void C(){return 3;}
}
この様なプログラムを走らせてliListに[1,2,3]が入って欲しいのです。
(当然ながらというか、)実際には[3]しかはいりません。
マルチキャストデリゲートにしたのは実行したいメソッドの数が実行時にしか分からず
できればif文分岐を少なくしたいと思ったからなのですが、
やはりメソッドを一つ一つ実行しなければ無理でしょうか?
もしくはメソッドの戻り値をリストにして、そのリストを次のメソッドの引数をリストにして、最後にaddrangeでしょうか?
何か上手いテクニックがあれば、どなたかご教授下さい。
896:デフォルトの名無しさん
08/06/16 13:04:03
普通にgetItemコレクション作ってforeachでList<int>にAddしてけばよくね?
897:デフォルトの名無しさん
08/06/16 13:09:34
デリゲートの引数にコレクション渡してAddしてもらえば?
898:デフォルトの名無しさん
08/06/16 14:14:43
>>895
複数の、戻り値を持つデリゲートを一括で管理したい場合は、
マルチキャスト- ではなく、デリゲートのコレクション/リスト などを使う
例えば、こんなふうに
var funcs = new List<Func<int>> { A, B, C };
var values = funcs.Select(f => f()).ToList();
あと、A,B,Cはvoidじゃなくてintな
>>897
それだと、仕様外の操作(複数追加、Insert、Clear、etc.)まで出来てしまうのであまり良くない
自分しか触らないから何でもいいっていうなら構わないけど
899:デフォルトの名無しさん
08/06/16 15:34:56
add/remove付きのイベントにしてしまえばマルティキャストっぽく見せられるかも
List<getItem> evlist = new List<getItem>();
public event getItem ItemsEvent {
add { evlist.Add(value); }
remove { evlist.Remove(value); }
}
this.ItemsEvent += () => 1;
this.ItemsEvent += () => 2;
this.ItemsEvent += () => 3;
evlist.Select(f => f()).ToList();
900:デフォルトの名無しさん
08/06/16 19:01:37
>>897の考え方が一番正当でしょ
コレクションをそのまま渡すんじゃなくて,値を登録するためだけのクラスを作って引数に渡す
901:900
08/06/16 19:05:54
考え方は,ってだけだよ
マルチキャストは使うのはあんまり良くないかも
902:895
08/06/16 20:14:14
皆さんレスありがとうございます。
とりあえずはコレクションを引数に渡すやり方で実装できました。
ラムダ式を使った方法を教えてくださった898,899さんのやり方は
ちょっと理解ができませんでした・・・申し訳ありません。
デリゲートのコレクションは使ったことがないので勉強してみたいと思います。
903:デフォルトの名無しさん
08/06/17 01:28:26
ITfMessagePump(TSFのInterface)をC# Formアプリで使ってる人いる?
メッセージループが競合してどうすりゃいいか、分からんのだが・・・。
904:デフォルトの名無しさん
08/06/17 01:32:33
いません
905:デフォルトの名無しさん
08/06/17 02:39:48
そうか。だよなー。
906:デフォルトの名無しさん
08/06/17 02:53:11
>>903
ご想像通りメッセージループを自前のものに置き換えるしかない。
907:デフォルトの名無しさん
08/06/17 03:09:54
その方法を知りたいな
908:デフォルトの名無しさん
08/06/17 03:26:33
>>907
メッセージディスパッチャに関してはP/Invokeで動くというか、
普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて
P/InvokeでDispatchMessageすればおk。
必要ならWinFormのApplicationクラスのソースでも眺めて見れ。
折角公開されたんだし。WPFももう公開されたんだっけ?
WPFアプリケーションでWinFormsを併用するときのドキュメントも参考になるかも。
というかメッセージディスパッチャにWPFのApplicationクラスを使いつつ
WinFormsを表示するのが楽かもしれんな。XP以降専用になっちまうが。
あとはExecutionContextの実装もちゃんとやっておくとベター。
909:907
08/06/17 03:29:53
>あとはExecutionContextの実装もちゃんとやっておくとベター。
SynchronizationContextの間違い。すまそ。
URLリンク(msdn.microsoft.com)
910:デフォルトの名無しさん
08/06/17 03:31:08
ぐあ
909==908ね。
911:908
08/06/17 04:00:28
実際試してみた。WPFのApplicationクラスでWinForms。
一応動くことは動くみたい。
この方法ならWPFのSynchronizationContextが使われるので
SynchronizationContextはそのままでOK、なはず。
---------------
// PresentationFramework.dll
// System.Windows.Forms.dll
// WindowsBase.dll
using System;
static class Program
{
[STAThread]static void Main(){ new CustomApplication().Run(); }
}
public class CustomApplication : System.Windows.Application
{
protected override void OnStartup(System.Windows.StartupEventArgs e)
{
base.OnStartup(e);
var form = new System.Windows.Forms.Form()
{
Width = 640,
Height = 480,
Text = "Test Window",
};
form.Disposed += (_o, _e) => this.Shutdown();
form.Show();
}
}
912:デフォルトの名無しさん
08/06/17 04:03:10
>>908
ありがと。
Application.csは見ていて、FPushMessageLoopでGetMessageWしてるのは確認したんだが、
ThreadContextの処理と整合性を取りつつも、
ITfMessagePump::GetMessageする確実な手段が分からなくてね。
ThreadContext周りの処理はinternal/privateがひしめいていて、
うかつに手を出せないし、お手上げ状態。
WPFは要件的に採用は厳しいかな。
いずれにせよ、overrideなり、Filter的なものでGetMessegeを自前の処理を行う仕組みはなさそうだね。
>普通にITfMessagePump::GetMessage[A,W]でメッセージ取ってきて
>P/InvokeでDispatchMessageすればおk。
おkな理由を教えてもらえると嬉しいな。
913:デフォルトの名無しさん
08/06/17 04:24:01
>>912
>おkな理由を教えてもらえると嬉しいな。
PresentationFramework.dllが中でやっていることがまさにそれだから、で説明になる?
System.Windows.Threading.Dispatcher.PushFrameImplおよび
System.Windows.Threading.Dispatcher.GetMessageと全く同じことをすれば動く。
で、納得してもらえるんだろうか……
914:デフォルトの名無しさん
08/06/17 10:36:47
たとえばNetworkStreamのBeginReadでAsyncCallbackを指定したとする。
このコールバック中にEndReadで例外が発生したらアプリが強制終了してしまう。
この例外をメインスレッド、少なくとも呼び出したスレッドで処理するにはどうすればよろしいでしょうか?
915:デフォルトの名無しさん
08/06/17 10:42:52
例外を補足できない?
916:デフォルトの名無しさん
08/06/17 14:27:34
>>914
Windowsアプリなら、Control.BeginInvokeでEndRead呼べば
発生する例外もメインスレッドの管轄になるはず
ただ、例外チェインの最後のエラーしか取れないかも
コンソールアプリならしらね
917:デフォルトの名無しさん
08/06/18 10:06:15
xmlファイルからデータを取得する方法について教えてください。
下記のxmlファイルtest1.xmlを作成しました。
test1.xml
<?xml version="1.0" encoding="utf-8" ?>
<Items>
<Item ID="001">
<Name>aaaa</Name><Age>10</Age>
</Item>
<Item ID="002">
<Name>bbb</Name><Age>20</Age>
</Item>
</Items>
test1.xmlのデータを下記のプログラムで読み込みました。
001 XmlDocument xmlDoc = new XmlDocument();
002 xmlDoc.Load("c:\\test1.xml");
003
004 string wID = "002";
005 XmlNode xmlNode = xmlDoc.SelectSingleNode("//Items/Item[@ID='" + wID + "']");
006 string wName = xmlNode.SelectSingleNode("//Name").InnerXml;
007 string wAge = xmlNode.SelectSingleNode("//Item/Age").InnerXml;
私の予想ではwNameには"bbb"、wAgeには"20"が入ると思っていたのですが
実際にはwNameには"aaa"、wAgeには"10"が入ります。
プログラムの005行目の処理でxmlNodeには確かに<Name>bbb</Name><Age>20</Age>が抽出されています。
006-007行目で、そこから更に//Nameを抽出したのにwNameに"bbb"が入らず"aaa"が入ってしまうのは何故ですか?
また,このような絞込みっぽい処理を行うには、どのようにすれば良いでしょうか。
918:デフォルトの名無しさん
08/06/18 10:10:56
そこで // 使っちゃ駄目だろ
919:917
08/06/18 10:17:43
>>918
Σ(゚д゚lll)
//はずしたら上手くいきました。
なぜこういう事になるのか勉強して出直してきます。
ありがとうございました。
920:デフォルトの名無しさん
08/06/18 19:16:35
javaばっかりでいつも不思議に思っているんですが、
キーワードでas base isとかがかぶったらどういう回避方法があるんでしょうか。
921:デフォルトの名無しさん
08/06/18 19:21:07
何を言いたいのか良く分からん
922:デフォルトの名無しさん
08/06/18 19:28:48
@as @base @is
923:デフォルトの名無しさん
08/06/18 19:36:16
ソース上で既に使っていて、キーワードとかぶっているときはどうなるんでしょうか。
またソースに手を入れて変更しないとダメなんでしょうか。
924:デフォルトの名無しさん
08/06/18 19:51:53
1.0から3.0までで変数名に使えないキーワードは増えてなかったと思うが
925:デフォルトの名無しさん
08/06/18 20:38:42
c, javaのソースからc#に移植というか少し手を入れるときキーワードの問題が発生しませんか?
特にc#は独自のキーワード名が多いみたいですけど。
926:デフォルトの名無しさん
08/06/18 20:41:35
勝手な拡張もいいんですけど、もとのソースの関数名がas, in, baseとかだとどうするんでしょうか?
関数名のAPIの方を変更できないし泣きませんか?
そうするとC#で作る気力も無くなるんですけど。
927:デフォルトの名無しさん
08/06/18 20:43:58
C#はjavaじゃないから嫌いだとか
子供に生まれてこなくて良かったとか言い出す奴らは
来てもらわなくてもいいよ
928:デフォルトの名無しさん
08/06/18 20:48:49
いや、そういうことじゃないんですけど。
まともにプログラミングの話を出来ないなら、別にいいですよ。
噂どおり、C#の人はC++厨房と変わらないようですねw
929:デフォルトの名無しさん
08/06/18 20:53:56
asとかを使いたければ@asとしてくれ
他言語からの移植なんてそう簡単にはいかんよ
930:デフォルトの名無しさん
08/06/18 20:54:39
typedefとか#defineが欲しいといいたいのかな?泥沼だと思うがね。
同じ言語の世代間の違いならコンパイルオプションや
pragmaのようなコンパイル指令で逃げるのだろうけど、
他言語からの場合は良識に任せるしかないな。
移植を前提にしたコードでbaseとかinとかselfとか変数に
使ってたらそういう名前を使った奴がアホだろ。
931:デフォルトの名無しさん
08/06/18 20:56:23
簡単なことだし、ここでちゃんと教えればすむことなのに、「C#の奴はやっぱり変人しかいないよ」とか噂を流される方がいいのかな?
まあ、>>927みたいなしきり屋がいるようなところじゃ、こっちの方がよくわかんないけど。
ここでは>>927みたいなしきり屋に従わなければいけないのですか?
932:デフォルトの名無しさん
08/06/18 20:58:36
伊武雅刀の「子供達を責めないで」のオマージュだろね。
フルすぎるネタで若い子にはわからないぞ;;
933:デフォルトの名無しさん
08/06/18 21:05:04
>>931
はいはい、とっとと噂を流す仕事に戻ってね。
934:デフォルトの名無しさん
08/06/18 21:05:46
これ聞いて落ち着け
URLリンク(jp.youtube.com)
935:デフォルトの名無しさん
08/06/18 21:16:13
>>930
Cならともかく、C#みたいなしんまい言語を前提にコードかけるかよw
in selfとかをキーワードに設計する方が多言語からの移植を考えないようなアホじゃないのか。
おまえはいつも、次の言語のキーワードとぶつからないように考えながら書いてるのか?アホはおまえだなw
936:デフォルトの名無しさん
08/06/18 21:18:57
>>933
Javaの世界ではC#の奴はめちゃ嫌われてるよ。
演算子オーバーロード―がどうとかうるさいしww
VBほどじゃないけど(笑)
937:デフォルトの名無しさん
08/06/18 21:21:33
それをC#のスレで言って何がしたいのか分からん
嫌われてるからJavaやれってか?
そんな気を使わなくてもC#一筋なやつの方が少ないだろ
938:デフォルトの名無しさん
08/06/18 21:26:14
C#一筋で食っていけるほど仕事がないな。
939:デフォルトの名無しさん
08/06/18 21:26:54
Javaの新機能はほぼ全てC#のパクリなのにな
940:デフォルトの名無しさん
08/06/18 21:28:49
だから移植前提で独自キーワード入れないでほしいんだけど。またMSの悪い癖(独自拡張?)がでちゃったんですか?
941:デフォルトの名無しさん
08/06/18 21:31:26
昔COBOLという言語があってな。
ていうか独自キーワードってなんだよ。
Javaのキーワードが他の言語からの移植を考えて決められてるなんて初耳だ。
942:デフォルトの名無しさん
08/06/18 21:33:07
>>940
Javaを使い続ければすむことじゃないのか?
943:デフォルトの名無しさん
08/06/18 21:51:19
Javaって $_ みたいな名前定義できなかったっけ?
CLIだとどうなってるんだろ?
944:デフォルトの名無しさん
08/06/18 21:59:50
Java屋?
C#出たときあちこち馬鹿にしまくったくせに掌反してパクり始めた奴らだろ?
そりゃあんだけ醜態晒せば嫌って、なかったことにでもせんとなwwww
まあそれはいいとして @ つければキーワードとして扱われなくなるよ。VBなら[]で囲むんだっけかな
相互運用のためにその手の機能を持つことが推奨されてる。ちなみにCILは「どんな識別子でも」持てるから
限界はあるんだけどな
945:デフォルトの名無しさん
08/06/18 22:06:13
移植するのに変数名まで同じにしたい痛い人がいるスレはここですか
946:デフォルトの名無しさん
08/06/18 22:07:26
実際そんなに独特な予約語多くないだろ
2.0以降に追加されたキーワードは全て文脈次第だし
947:デフォルトの名無しさん
08/06/18 22:09:25
あそうそう、コンテキストキーワードも多いっての書き忘れてた
948:デフォルトの名無しさん
08/06/18 22:14:03
半年も使わないと忘れちゃうしキーワード多すぎだろ。
いちいち覚えるのとか別に苦痛じゃないんだけど、なんかMSに束縛されてるみたいで嫌じゃないか?
まあ、変なところがあったらコンパイラが叱ってくれるからいいんだけど…
949:デフォルトの名無しさん
08/06/18 22:17:23
…半年はさすがに記憶力悪すぎかろくに触ってなかったレベルだろう。
950:デフォルトの名無しさん
08/06/18 22:19:51
scriptfpとかpackageはそのままでjavaに移植できるの?
java使ったことないんでしらんけど。
そもそも多言語移植の時に変数名そのままで移植できなきゃやだやだやだ
なんてバカかよ。ほとんど意味ないと思うんだが。
そこまでしたいならまずjavaの段階で適宜リファクタリングして移植すりゃ
いいことなんじゃねーの?
951:デフォルトの名無しさん
08/06/18 22:21:05
ざっくり読むと
アホがjavaからC#へ移植を試みて文句言ってる
のに食いついたって感じ?
暇だなぁ、お前等
952:デフォルトの名無しさん
08/06/18 22:23:01
J#でもつかってろよ
953:デフォルトの名無しさん
08/06/18 22:26:15
おお、まさにJ#でこの話終わりだなww
954:デフォルトの名無しさん
08/06/18 22:26:25
コンテキストキーワードよりもはるかに気持ち悪いのは,
インターフェイスとか抜きで特定の名前(引数)のメソッドの呼び出しに変換される機能
foreach→GetEnumerator()とかコレクション初期化子→Add(引数任意)とかクエリ式とか
955:デフォルトの名無しさん
08/06/18 22:28:08
C#コンテキストキーワードって
get set partial where yield value と後はC#3.0で導入されたクエリキーワードぐらいだよな。
>忘れちゃうキーワード
explicit implicit stackalloc unchecked volatile あたりは時々忘れそうになる。
956:デフォルトの名無しさん
08/06/18 22:30:41
add/removeとかも<コンテキストキーワード
957:デフォルトの名無しさん
08/06/18 22:30:57
そろそろ次スレ立てたほうがいい?970くらいでいい?
958:デフォルトの名無しさん
08/06/18 22:32:24
>>954
java5にも同じのあるじゃないか
Iterable/Iteratorでfor ( : ) をお忘れではないか
959:デフォルトの名無しさん
08/06/18 22:35:22
>>958
C#のはダックタイピング的なのでちょっと違う。
多分>>954はその事を知ってて書いてる。
960:デフォルトの名無しさん
08/06/18 22:52:38
Whereという名前のメソッドがあればクエリ式のwhere使えるんだよね
961:デフォルトの名無しさん
08/06/18 22:53:33
>>955
ええ!それは忘れないだろ。
それ、使わないならC#言語じゃなくてもいいでない?
ん・・・このスレのレベルは、理解に苦しむ・・
962:デフォルトの名無しさん
08/06/18 22:57:03
>>959
了解、インターフェイスがなくてもメソッドの名前が一致してればOKという話か。
usingはなぜかIDisposable.Dispose()でないと受け付けない。
これもメソッドの名前だけで使わせて欲しいよ。
963:デフォルトの名無しさん
08/06/18 22:57:17
>>956
リファレンスのキーワードの項に、
>>955のとクエリキーワードは載ってるけど、add/removeが載ってない
中の人にも忘れられてる?
964:デフォルトの名無しさん
08/06/18 23:03:23
add/removeはデリゲートだけでデリゲートでも普通使わないからやっぱり忘れられていると思う。
965:デフォルトの名無しさん
08/06/18 23:03:48
C#というのは、Javaと比べるとポインタ演算unsafeとstackallocが売りだと思うんだけど…
966:デフォルトの名無しさん
08/06/18 23:07:13
いやなウリだな
967:デフォルトの名無しさん
08/06/18 23:08:34
>>964
WinFormでもWPFでもコントロールのイベントはカスタムしてるのがほとんどだぜ
968:デフォルトの名無しさん
08/06/18 23:11:15
便利なものはどんどん積極的に組み込んでアピールしていこうっていうのがコンセプトでしょ
969:デフォルトの名無しさん
08/06/18 23:13:49
ヘジたんはむしろ抑え役っぽい
970:デフォルトの名無しさん
08/06/18 23:17:46
抑え役だし押さえ気味だよなぁ。
というかあいつら基本的に自分たちでだいぶ使ってから出すから
まぁそんなもんかという気はする。
971:デフォルトの名無しさん
08/06/18 23:32:38
VBと違ってクエリ演算子のサポートが消極的すぎ
中途半端に付けるくらいならクエリ式なんて無くてよかった
メソッド形式だけだとどうしてもインパクトに欠けるからなあ
972:デフォルトの名無しさん
08/06/18 23:32:42
javaがいったいいくつ独自キーワードを取り入れたか
973:デフォルトの名無しさん
08/06/18 23:35:19
今のC#のウリは関数型とラムダ式だろ
JavaやC++とくらべて進んでるところは
974:デフォルトの名無しさん
08/06/18 23:38:10
次はついに動的型くるかも
975:デフォルトの名無しさん
08/06/18 23:42:53
動的型というか、動的っぽい記述が一時的につかるようになる dynamic ブロックになりそうかな。
976:デフォルトの名無しさん
08/06/18 23:45:46
GetEnumeratorは仕方ない。
ジェネリックがなかったころだから。
977:デフォルトの名無しさん
08/06/18 23:48:39
Mix-in 入れてくれんかな
978:デフォルトの名無しさん
08/06/18 23:49:20
相変わらずC#はキモイな
どこがどうキモイかを気がついてないようだけどw
979:デフォルトの名無しさん
08/06/18 23:54:12
>相変わらずC#はキモイな
何言ってる?
現在進行形でキモクなってんだよっ
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4189日前に更新/244 KB
担当:undef