1 :
デフォルトの名無しさん :
2006/12/09(土) 18:33:59
新スレで早速ですが…、 プログラム Appli_A.exe と Appli_B.exe があったとして、 Appli_A.exe が Appli_B.exe が起動しているかどうかを知ることってできるの? 起動してるプロセスを取得して、Appli_B.exe があるかをチェックとかでは、 Appli_B.exe の名前をかえられたら、対処できないし… どうすれば…
どっちにも手を入れられるなら、Mutex 使うのが手っ取り早い
>>8 どっちも自作中だからMutex使います。ありがとう。
DataGridViewのHeaderに出る三角印は、どの値を変更すれば変わるんでしょうか? マーク自体の変更ではなく、他のコントロールから選択位置を変更出来るようにしたいのですが。
DataGridView.CurrentCell
>>11 即レスありがとうございます。一応変更できました。
ただ、列として指定する方法は無いのでしょうか?
どうやらDataGridコントロールではCurrentRowというのを設定出来たようなんですが、無くなってしまったのでしょうか。
別に現状で問題は解決したので、+αといった所なのですが。
名前忘れちゃったけど SelectionStyle かなんかのプロパティで FullRowSelect だかを設定すれば行単位で
C#にて Form1.cs(Form)とcodefile.cs(コードファイル)があります。 codefile.csにpublic static void xxxx()をつくり、Form1から呼び出すことはできるのですが、 codefileからForm1のコントロールの操作ができません。 コントロールの参照範囲をPrivateからPublic等にしてみましたが駄目でした。 解決方法ご教授願います。
16 :
デフォルトの名無しさん :2006/12/11(月) 19:11:09
そういう時はね、出てくるエラーメッセージ書くか 可能な限りコードを見せるべきなのよ。 わかった?ボク?
何を言ってるのかまったくわからんw
18 :
デフォルトの名無しさん :2006/12/11(月) 19:24:23
お世話になります。現在、SmartClientの事前検証を行っています。 ClickOnceの技術を用いてClient,Serverの両方のAPPLを作成しました。 開発マシン:WindowsXPでは正常に動作するAPPLがWindows Server 2003では動作しません。 ClientからWebサービスのWebメソッドを実行すると SoapException:401 Unauthorizedの例外が発生します。 ** AdministratorのユーザーでLoginしているのになぜ?? --- Client Source ここから --- try { string message = ClientService.Test(); MessageBox.Show(message, "Webサービステスト", MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); } --- Client Source ここまで ---
19 :
デフォルトの名無しさん :2006/12/11(月) 19:24:40
--- Server Source ここから ---
[WebMethod]
public string Test() {
return Utilities.SerializeTest("Hello");
}
--- Server Source ここから ---
ClientのAPPLは正常にDLされ画面も表示されます。
また、Webサービス側は「
http://hoge/TestWebService/Service.asmx 」のURLを入力して
「Test」メソッドの動作確認も取れています。
どうも、認証(セキュリティ)が出来ていないように見受けたので
IIS側のプロパティを確認しました。「匿名認証」「Windows認証」
ともにチェックボックスは「ON」です。
ネット上で色々な事例を探してみましたが皆目検討が付きません。
なにかご存知の方、ご教授願います。
開発マシン:Windows XP SP2 IIS5.1 VS2005 Pro
試験マシン:Windows Server 2003 IIS6.0
鯖側のどこかがASPNETさんに読めないとか書けないとか?
>>15 VB出身と見た。
Form1クラスとcodefile.csにあるクラスとの関係がさっぱり分からん。
とりあえずその後者のクラスにForm1のインスタンスへの参照をもたせれ。
とにかくクラスというものを理解せよ。コードファイルとかモジュールじゃなくて。
>>15 //Form1.cs
public class Form1 : Form
{
private TextBox textBox1;
public TextBox TextBox{get{return this.textBox1;}}
}
//codefile.cs
public class Code
{
public static void Xxxx(Form1 form1){form1.TextBox.Text = "新しいテキスト";}
}
こういうことがやりたいの?
とりあえず基礎からやり直した方がいいよ
>ClientからWebサービスのWebメソッドを実行すると >SoapException:401 Unauthorizedの例外が発生します。 わしは素人だが以下の内容がおかしいと思う。 >** AdministratorのユーザーでLoginしているのになぜ??
IISはAdministratorだとフルアクセスできるの?
('A`)
27 :
デフォルトの名無しさん :2006/12/11(月) 22:47:18
モナーが選択されているという条件分岐は if(this.comboBox1.SelectedItem.ToString()=="モナー") となるのに、なぜ? モナーが選択された状態にするのは this.comboBox1.SelectedItem="モナー"と書くのか
日本語でおk
SelectedItemがstringとは限らないからじゃないかと思われまする
>>27 ヒント: this.comboBox1.SelectedItem=(Object)"モナー"
今までずっとDelphi使ってきたけど、C#を触ってみて思ったのは、 かなりDelphiに近い言語で、.NETもVCLに近い感じがします。 パクりでしょうか。
C#設計したの、Delphi作った人じゃなかったっけ?
そーです
ついでにいうとヘジたんは .NET の開発にも関わってる
じゃ、DelphianはC#と.NETを習得することは容易ですか
C#はDelphiの作者がJAVAを横目に見ながらC++を書き直した言語だろ?w
C magazinにつづきWindws Developer Magazinも休刊か…… なんか.netで門戸が下がったような気がするのに サンデープログラマーは減ってるのかねえ
>>37 そりゃ、まさにそのとおりだろ。
だがそれがいい。
C++を横目に見つつJavaを書き直したんじゃないの?
構文はC++に近く、基本設計はDelphi。C#単体はいうほどJavaに似てない。 コミュニティも見事に被らないためさらに離れていっている。
最近はJAVAのほうがC#に似てきた
GCパクっておいてJavaに似ていないって…
GCはJavaのパクりじゃないだろ・・・
わざわざC#「単体」って書いてるのに。誰もCLRの話はしてない わけだが。そのCLRも手段は別にして目的の方向性がずいぶん 違うしな。
GCなんてとっても古くからある技術だろ
どう考えてもjava→c#だと思うよ。 C++→c#だと主張している人は勉強しなおしたほうがいいよ。
ふつーにVB→C#ってあたりで手を打たないか?
それはないw
いやアセンブラ→c#ぐらいじゃないと… GCは昔のBasic(98とかね)にもあったよ。。。
GCはFORTRANに並んで歴史の長いLISPあたりが起源なんじゃないの? 別に目新しいもんじゃないでしょ。 そもそもC/C++用のGCだってあるわけで。
DelphiはC++の影響があると思うよ。 ちょっと古いタイプだと思う。
>>48 CLRはまさにそうなんだけど言語としてはなぁ
Delphi → J++ → C#
でどうよ?ヘジの歩みそのまま。
>>51 うん、多分LISPからパクったんだろう。でもJavaのもとまで
辿るとなると話がややこしくなりすぎるので。
Object Pascalだろが禿!
>>53 CLRはぜんぜんVB由来じゃないでしょ。
Java VMをもっと言語から独立させた感じだよね。
GCについてはどこからパクったとかじゃなくて、GCを備えた言語はそこらじゅうにあると言いたかっただけ。
56 :
デフォルトの名無しさん :2006/12/12(火) 19:52:17
どうでもいいよハゲども
>>55 >CLR
VB由来というかCOMだな。結局のところコンポーネント志向がこの形に
収束しただけ。VMが欲しかったわけでなく、欲しかったのは高記述な
バイナリだろう。
技術はほとんど同じになったんだがアプローチがまったく逆ってのが
面白いよなぁ
>>47 ヘジルスバーグたんは、J#の開発にも関わってたのです当然です。
J#じゃなかった、J++だった
CLRのCOM由来説初めて聞いた…
CLRでメタ処理系狙ったんじゃないの?
ヘジルスバーグたんはどうしてこんなに委譲が好きなの?
学会の流れ…
Objective-C => java => C# ですよ、おのおの方。
ラムダ式キター
Objective-C は Smalltalk + C だすな。
GCはGCでも、Java1.3以降のGC(HotSpot?名前を忘れた)に似たGCは.NETが初ではなかろうか
JAVAもそのうちeventやプロパティ導入しないかな?
デリゲートやクロージャ,プロパティが導入される予定 次は何だろうね
enumやstructじゃない?
struct は Java の思想とは相容れんだろう。 // と言いつつクロージャとかどうなんだって気もするけど。 enum は極言しちゃえば数値型の構文糖衣だから導入は簡単そうだな。
プロパティは便利だよね。 見た目もいいし。 setNameとかgetNameなんてメソッド書きたくないよ。
enumは既にJavaに導入されてるよ 定数じゃなくてクラス扱いだけどな C#3.0の様子を見て,良さそうなのはまた真似するんだろうね
C#にしてもJAVAにしてもトリッキーな仕様は取り込んで欲しくないな。 Cって意外と先見性があったんだな。 string型さえあれば寿命がもっと延びてたんじゃないかな。
D言語ってどうよと思ってページ見たけど 次の部分みて萎えた。 void main(char[][] args)
MSDN壊れてないか? 2回に1回はプレーンテキスト風になる。
ラムダ式って=>の後ろを括弧で囲まなくていいんだな。 なんとなく見てて気持ち悪いんだが、 C#にはカンマ演算子とかないから問題ないんだろうか。
delegate bool Foo(int n, int m); bool Bar(Foo u, Foo v, int a, int b, int c, int d) { return u(a, b) && v(c, d); } Console.Write(Bar((x, y) => x <= y, (z, w) => w >= z, 9, 4, 1, 7));
79 :
デフォルトの名無しさん :2006/12/12(火) 23:20:55
C#で作ったアプリケーションを逆コンパイルできないようにはできない? Microsoft.NET 2.0 SDK付属のMSIL 逆アセンブラで簡単に見えちゃうんですが、
まあさすがにこういう変態コードはやめていただきたいものだな。 つか途中の不等号演算子が狙いすぎだw
そんなコードがコンパイル通るのはperlくらいで十分だ。 l=i=>i>=1||i<=-1; ('A`)ヴァー
>>76 たまに糞重くてスタイルシートが読み込まれないときがあるが。
>>79 Reflectorで見るともっと面白いものが見られるぞ
>>79 ,84
ぜひDotfuscatorを30万円でお買い求めください。
86 :
デフォルトの名無しさん :2006/12/12(火) 23:51:58
そういえばmonoではObfuscatorって作ってないのかな。
だって「オープンソース」プロジェクトだから…
だいたいソースなんか見えてもいいんだよ。 んなもん誰でも書けるんだから。 技術のない人間ほどそういうトコ気にするな。
89 :
デフォルトの名無しさん :2006/12/13(水) 00:45:13
>>88 ソースはいいけど、知らずにパスワードや認証まで入れちゃうと大変
ってか実際そういうソフトがあるし…
今までC++とかDelphiやってきたんですけど、C#はGCということで、特にメモリ解放の心配はしなくてもいいんですか? なんか心配で・・・
managedなリソースの開放は心配しなくても大丈夫です
C#の活気のあるコミュニティどっかにないですか?(´・ω・`) VSUGのMSDNフォーラムもみな過疎ってる。英語可。
ここ
C#は好きだけどメインストリームはJAVAだということには変わりない。
Javaは現代のCOBOL。
先輩が言うには、JavaとDB(オラクル)使えたらくいっぱぐれないとのことです。 でもそれだけじゃ面白くない…
Javaってプラットフォーム技術とプログラミング言語のどっちを指すんだ?
>>97 に関しては主な使われ方についての個人的なイメージ。
VBもそうかな。
でもなんだかんだ言ってもアクセスが一番使われているような希ガス。
キーから値を取り出せて値からもキーを取り出せる連想配列って無い?
連想配列2こ使う
やっぱ1コじゃ無理かぁ dクス
値は重複おkだから戻るキーも1つじゃないかもな。
>>105 うちのPCヘルプ起動するのに3分かかるからちょっと待ってても
>>106 重複しない方向で
>>105 無駄な処理入るから普通にDictionary二つ使ったほうがいいよ。
IndexOfValue ??????
う〜ん インスタンスを2コ管理するのが面倒だから SortedListを使ってみるよ
インスタンスを2コ使うラップクラスを自分なら作る。
サイコロみたいに1〜6を出すにはrandom.Next(0, 7)でいいですか?
1,7 じゃね?
114 :
デフォルトの名無しさん :2006/12/14(木) 16:14:43
フォームを閉じる際に確認メッセージを出そうと思い、FormClosingイベントが起こるとMessageBoxを出すように書きました。 このフォームに「アプリケーションを終了する」というメニューを追加したいと思います。 その是非を一度だけ聞いてApplication.Exit()を実行したいのですが、現在のやりかたではFormClosingイベントが途中で呼ばれてしまい、 アプリケーションの終了確認→フォームを閉じる確認と表示されてしまいます。 何か良い方法はないでしょうか。
>>114 アプリケーションを終了するメニューを選択したら、
その場合は、FormClosingの時のMessageBoxを出さないようにすればいいだけじゃん。
それか、Application.Exitじゃなくて、Environment.Exitでおだぶつさせるかじゃね。
>>114 FormClosingEventArgs.Cancel
>>116 追記だけど、ほかには、アプリケーションの終了確認なんてしないで、Application.Exit()を呼べばいいんじゃね。
したら、FormClosingの時に確認してくれるぜ。
FormClosingの時の確認を終了確認にすればいい。
>>117 FormClosingEventArgs
e.CloseReason != CloseReason.ApplicationExitCall で
Application.Exit()をフィルタすることができました。
お目汚し失礼しました。
>>119 CloseReasonてNET2.0から出てきたのか。便利だね。
122 :
デフォルトの名無しさん :2006/12/15(金) 16:44:19
class A{ private B b; private int num; public A(){ b = new B(); num = 10; } public int Num{ get{return num;} } public B B_instance{ get{return b;} } } class B{ //public int Calc(int num){ // return num*2; //} //public int Calc(){ //ここでAのnumを使いたい //} } a = new A(); a.B_instance.Calc(); としたときに,Aのnumを使ってBのCalcを呼び出したいのですがどうすればいいでしょうか a.B_instance.Calc(a.Num); とすればAのnumを渡せますが冗長な気がします
BをnewするときにAを渡しとく。 b = new B(this); とか。
124 :
122 :2006/12/15(金) 17:07:10
なるほど.ありがとうございます.
現在、キーボードやマウスによるキー入力を どのデバイスから送られて来たのか判断した後、 場合によっては入力を握りつぶしたいと考えております。 デバイスを判断し、キーを取得するだけですと WM_INPUTにてRawInputを使用することにより実現できたのですが、 キーを握りつぶすことが私の試行錯誤した上ではできませんでした。 キーを握りつぶそうとWH_KEYBOARD_LLをフックし、 WH_KEYBOARD_LLの時点でキーを握りつぶすとメッセージの順序の関係上だと思うのですが WM_INPUTも呼ばれなくなってしまい、デバイスの識別ができないでおります。 他の処理も考え付かず、途方にくれている状態です。 WH_KEYBOARD_LLがWM_INPUTより先に呼ばれているならそこでデバイスを 識別できないかとも考えたのですが、私の調べた限りではできませんでした。 どうか皆様のお力を少しでもよいので貸していただけないでしょうか。 よろしくお願いいたします。 #なお、この質問は過去に他の所にて質問させていただきましたが、 解決策が得られなかったために、再度お尋ねさせていただいております
WIN32APIの猛者どもに聞いたほうがよさそうだけどな。 そこでNG出されたの?
いえ、多分そちらでは聞いていないかと。 もう少し適切な場所があるようでしたらそちらに移そうかと思うのですが
移動されたようですな…
ちょっとどのすれか自信ありませんでしたが、 ありがとうございました
>>130 はい、私の質問です。
たらい回し、というよりも人にすがっているのは自分ですので
大変というよりも皆さんに迷惑がかからないかの方が心配で・・
文字を大きく(32ポイントぐらい)文字の形をした影付きで描画したいんですが、影をどうやってつけたらいいんでしょう・・・(´・ω・`)
自分で書けばいい
コマンドプロンプトで (コマンド) < (ファイルパス) のようにコマンドにファイルを渡すのを、 Process proc = new Process(); proc.StartInfo.FileName = "(コマンド)"; string command = "< (ファイルパス)"; proc.StartInfo.UseShellExecute = false; proc.StartInfo.RedirectStandardInput = true; proc.StartInfo.Arguments = command; proc.Start(); proc.WaitForExit(); っとやっているのですが、うまくいきません。 どうすればいいのでしょうか?
>>134 ですが、コマンドプロンプトを利用して、以下のようにやってみました。
ただ、(コマンド)をフルパスで指定して、そのパスにスペースが入っているとうまく動きません
(コマンドがスペースで、きれて実行され、結果、そんなコマンド認識できないとなります。)
コマンドもファイルパスもダブルコーテションで囲んでいるのですが
それで、ファイルパスにはスペースが当っても大丈夫です。
Process proc = new Process();
proc.StartInfo.FileName = Environment.GetEnvironmentVariable("ComSpec");
string command = "\"(コマンド)\" < \"(ファイルパス)\"";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.Arguments = String.Format(@"/C {0}", command);
proc.Start();
proc.WaitForExit();
>>133 書き方教えてください・・・(´・ω・`)
ちょっとずらした位置に重ねて2回描画すればいいだろ
>>134 よく考えると、これはできなくて当然ですね…。
ねぼけてました。
>>135 の方をお願いします。
工エエェェ(´д`)ェェエエ工
>>141 それじゃぼけません・・・(´・ω・`)
>>142 どうしてもやりたいんなら、文字を描画したいコントロール
を継承したコントロールをつくって、OnPaintイベントを
オーバーロードする。
おくられてきたイベントPaintEventArgsのプロパティに
Graphics クラスがいるからそいつの弄ればグラデーション
っぽくなるかも。
>>142 半分のサイズで描画したのを拡大したらぼけるんじゃね?
>>142 ウィンドウタイトルバーの文字に影がついてることを強引に前提として
themeAPIで描く
>>134 リダイレクトはシェルの機能なんだから、
同じように普通にSTDINに叩き込めばいいじゃね?
Process proc = new Process();
proc.StartInfo.FileName = "コマンド";
proc.StartInfo.RedirectStandardInput = true;
proc.Start();
new BinaryWriter(proc.StandardInput.BaseStream).Write(File.ReadAllBytes("ファイル"));
proc.WaitForExit();
C#にbison/flexやboost::spiritみたいなパーサジェネレータライブラリってありますか?
隣接ピクセルとの平均値なりをピクセルにセットすればぼけるでしょ
実用的な速度で出来ませんとか言い出すんじゃない? 馬鹿初心者に一言。 実装までは面倒見れません。
>>150 そういうのは馬鹿なことを言い出してから言えよ。
DirectXを使え
GDI+で小さく描画して拡大したらマジぼやけるよw
WebBrowserはっつけて、CSSのフィルタを適用する。
typedef void (CallbackType*)( ... ); void SetCallback( CallbackType t ); で、SetCallbackというのがDLLで宣言されてます。 この関数を使ってC#の関数をDLL側に渡したいんですが こちら側の関数はどうやって渡せばいいんですか? 引数が明示的になってれば問題ないんですけど。
delegate
>>157 typedef void (CallbackType*)( int hoge );
とかなってる場合はいいんですけど
typedef void (CallbackType*)( ... );
この場合は?
やったことないけど例えばこういうので丸くおさまったりしないのかな void Callback(params int[] args); みたいなの。
実はそれで駄目だったもので質問に…。情報小出しですいません。 delegate void Callback( params object[] args ); うーん厳しそうだな。
>>160 DLL側では実際には(...)のところには何が来ることを望んでんの?
全部intとか、全部boolとか、なんかしら決まりがあるはずだよね。
それにあわせないとだめなんじゃないの?
>>161 あーそうか。確かにそうですね。
どういう風な値が(...)に入ってくるかを確認してきます。
ありがとうございます。
とか言っても全部想像だけどな・・・
>>164 読みやすいかなと思ってやっただけなので深い意味はないです。
調べてきたらユーザーにprintfの実装を任せるためのインタフェイスでした。 (標準出力以外に出力したいときに使ってくれ、ってことらしい) って事は静的に型を決めるのは無理ですね…
可変長引数ってことは CallingConvention.Cdecl が必須だな。 CallingConvention 列挙体の項目にあるサンプルコード見る限り、 使いたい引数ごとにそれぞれ宣言するらしい。
168 :
167 :2006/12/16(土) 19:42:45
と、デリゲート側か。 2.0 で UnmanagedFunctionPointer 属性が追加されたからそっち。 多分 1.1 までじゃ対応できない。
>>167-168 delegate側にUnmanagedFunctionPointer属性で行けました、ありがとうございます。
結局こうなりました。
[UnmanagedFunctionPointer( CallingConvention.Cdecl )]
public delegate void PrintCallback( string format, string str );
実はDLLのソースを見たら、フォーマットに"%s"と可変長引数に文字列1つしか
渡されてなかったので、これで上手くいってしまったわけですが…
(ライブラリを弄って良いならそっち側を直すほうが楽でしたね)
とりあえず問題自体は解決したのですけど
このままだと可変長引数を受け取るということは出来てないですね。
>170 ありがとう
適切なスレが分かりませんでしたので、ここで相談します。 自分のソフトに埋め込まれたWindows Media PlayerのActive Xコントロールから スクリーンショットを取りたいのですが、方法が分かりません。教えてください。
デバイスコンテキスト取得してBitmapに描画 と思ったらWMPか。 オーバーレイとかだったらだめなんじゃね? Vistaならともかく
DVDの静止画キャプチャーするの? 大体そんなとこだろ?
DirectShowの勉強する?
オーバーレイ切ったらスクリーンショット取れるがね
DVDのソフトにもよるが、オーバーレイ切れないのもあるよ!
>>177 先に、MediaPlayerで動画再生、
次にDVDソフト再生(゚Д゚)ウマー
ソフトの設定ちゃうわ!
>>178 をやると、体外オーバーレイは一枚しか表示できないので、
二つ目のソフトは、オーバーレイではなく、普通に表示できて、コピーできるんですよね。
何だそれ…
>>180 体外オーバーレイって、試験管ベイビー作る時のやつ?
MediaPlayerのActiveXなら、2つ貼り付ければ、片方が非オーバーレイでキャプチャできるようになる。
メモリが大変になりそうやん……
DVDはソフト二つ入れないと2個再生できないYO
質問させてください。 Susie用に画像処理プラグインを書こうかと思ったのですが、 C#では従来のネイティブアプリから読めるDLLを組むことはできるのでしょうか? 普通のDLLを呼ぶにはDllImportでよいと思うのですが、逆がわかりません。
>>186 _
間にネイティブなDLLがなんかいる
>>175 それが一番手っ取り早い方法なりそうですね。
お答えいただいた皆さん、ありがとうございました。
189 :
デフォルトの名無しさん :2006/12/19(火) 12:39:54
C#でC/C++のFindFirstFileやFindNextFileみたいなことをやるには何を使えばいいんでしょう? 最近C#使い始めたばかりうまくヘルプ活用できない・・・
Directory.GetFiles(String, String, SearchOption) かな? 全部返ってくるけど。 とりあえずSystem.IO以下を眺めるべし
192 :
189 :2006/12/19(火) 14:28:54
WebBrowserコンポーネントのBeforeNavigate2イベントでどのようなHTTP POSTが発生したか記録したいんだけど、 enctype="multipart/form-data"なformで <input type="file"/>なタグがあった場合に、PostDataのMIMEの中身が ファイルタグなデータの前で切れてしまうんだけど。ファイルタグが無い場合は完璧に補足可能。 この方法でやったことある人いる??
>187さん、>191さん、返信ありがとうございます。 逆 PInvokeはちょっと避けたいかな・・・ "間にネイティブなDLLがなんかいる"のとこをもうちょっと詳しくお願いできませんか?
>>194 マネージドライブラリをCOMに公開して、ネイティブなDLLで橋渡しをする。
>>194 純ネイティブからマネージコードを使う手は2つ。
COM相互運用機能とCLRホスティング。どっちか使って
橋渡しをするDLLを作るだけ。
ただし、1つのプロセスにロードできる.NETのバージョンは1つだけなのに注意しとく。 Susieみたいにプラグインで読み込まれるdllが.NETをロードするとかなり危険な予感。
>>197 よーし、パパ専用プロセス立ち上げて通信しちゃうぞ。
ああ、でもなんか一番いい方法な気がしてきた。専用プロ
セス用のはフルマネージでいいし。パフォーマンス以外は。
>>197 それって、フルマネージドなアプリでも、.NETのバージョンがEXEとDLLで
違うなんてこと有るよね??
Susie用に画像処理プラグイン書くならC++使えよ。 マジレスごめん
202 :
201 :2006/12/19(火) 23:37:28
すまそ、誤爆
>>200 当然 CLR は起動したのに従ったバージョンがロードされる。
より古いバージョンの CLR をターゲットにした DLL はなんとか動かそうとするし、
より新しいバージョンの CLR をターゲットにした DLL は普通ロード失敗する。
なんでこの板ID無いんだ?
, '´ :::::::::::ヽ、 / ,/ ||| \, ::::::::::ヽ | ==" `== ::::::::| | -=・=-′ ヽ-=・=- :::::::::| | ::::::::::| え? | (_人_) ::::::::| 'ヽ__ :::::::::::/
207 :
206 :2006/12/20(水) 00:06:33
すまそ、誤爆
すみません。C#でCheckBox付きTreeViewを使ったときに、 ツリーのノードのクリックでチェックのon/offを切り替えるようにしたいのですが、 OnNodeClickで CheckValue = !CheckValue :こんな感じ でやっています。これだと、文字の部分のクリックしたときはちゃんと動くのですが チェックボックスのところをクリックすると、この処理+デフォルトの処理が動いてしまい、 結局もとの状態に戻ってしまいます。 何か良い方法はありませんか?
HitTest とか?
dataGridViewで選択したcellの背景色を変えるんじゃなくて、 選択枠を付けたいのですがどうすれば良いのでしょうか? dataGridViewを継承したコントロール作ったは良いが、完全にお手上げぽ…
211 :
デフォルトの名無しさん :2006/12/20(水) 00:57:57
プログラムのプの字も知らない奴です C#.Netを勉強しろって言われたんですがC#とどう違うんでしょうか? C#だけ勉強すればいいんでしょうか? 基本以下のことですがお願いします
だいたい一緒
213 :
208 :2006/12/20(水) 01:09:27
>209 HitTest??? HitTestでCheckBoxのObjectが取れるってことですか?
214 :
211 :2006/12/20(水) 01:09:50
・・・だいたい一緒っすか とりあえずプログラムの事なんも知らんのでC#勉強しときます
>>211 C#は、.NETフレームワーク上で動く言語なわけで。
C#を勉強したら、.NETを勉強したことにもなるわけで。
216 :
211 :2006/12/20(水) 01:24:33
>>215 あ、そうなんすか?
これでようやく気持ちよくC#が学習できます
ありがとうございました
217 :
デフォルトの名無しさん :2006/12/20(水) 10:41:58
おはやう!
なんかよく分からんがおはよう ネタがあったら供給汁
219 :
デフォルトの名無しさん :2006/12/20(水) 12:51:05
C#の実行速度ってVC>C#>VBって感じですか?
VC>MC++>=C#=VB.NET>=VB ってとこじゃね?
222 :
219 :2006/12/20(水) 13:08:55
Managed C++は、VC++.NETのこと。
C++/CLI >= MC++ >= C# = J# = VB.NET >= VB
225 :
219 :2006/12/20(水) 13:30:53
>>ALL レスどうもです C#>VB.NETだと思ってたんですけど違うみたいですね もうひとつ質問があるんですけど、C#でソフト作ってもう少し処理速度を 上げたいなぁと思ったら結構簡単に?(C#でソフトを作れたくらいの段階ですが) MC++に処理部分を変更したりできますか?(GAをしてみたいんです) また変更するのはどのようなキーワードでググレばいいんですか? 調べたんですが言語の説明とかしかなくて分からないんです…
226 :
219 :2006/12/20(水) 13:33:01
書きわすれましたがC、Javaは勉強しました。 Javaは本を読んだくらいです
>>225 C#もVB.NETも結局の出力結果はMSILのアセンブリだからね。
C#とC++は全く別の言語だから混ぜるのは無理。
新しいプロジェクトを作って何らかの方法でリンクすればいい。
それ以前に書く奴の知識の量が影響するからたぶんお前はなに使っても 大して変わらないと思う。C++にしただけで自動的にすごく早く なったりしないよ?
>>255 俺の主観では、
ゲームとか、画像処理とかの特殊なことを除けば、
あんまり、C++とか気にしなくていいと思う。
多くの場合レスポンスのボトルネックとなる部分は全体の極一部。
C#の処理の見直しで対策可が多いと思うが、
どうしてもって場合に、unsafeに移るってぐらいかな?
231 :
210 :2006/12/20(水) 14:07:03
漏れにも愛の手を…まだできないorz
232 :
219 :2006/12/20(水) 14:11:38
>>ALL
レスどうもです とりあえず本買ってきて作ってみます
>>229 自動的に早くなるんだと思ってました 自由度が大きいから
プログラマのレベルしだいで早くなるんですね
みなさんありがとうございました
どこで詰まってるんだ? ControlPaint.DrawFocusRectangle 見てみたか?
PreviewKeyDownとふつうのKeyDownはどう使い分けるのでしょうか? PreviewKeyDownがKeyDownよりも先に呼ばれるのはわかるのですが・・・。
eventarg
たとえば、XXLというライブラリを自分で作ったとします。 そのとき、XXLというライブラリにはDirectXなどの参照設定をしているとします。 他のプロジェクトからそのライブラリのプロジェクトをインポートして使うときに、今はこの機能はいらないからDirectXの参照をナシにしたい! と言ったことを、ライブラリのプロジェクトを変更することなくできるでしょうか? もしくは、ビルドオプションみたいに今回はDirectXに参照しないと言ったことを。 個別に別々のライブラリ作る方法しか無いのでしょうか?
ライブラリを分ければいいんじゃね?
DirectX が要不要ってのは、一つのアセンブリとして大きすぎる感じがあるな
239 :
210 :2006/12/20(水) 22:52:14
>>233 こんな感じで書いてるんですけど、選択範囲を変えても最初の位置から動いてくれないです。。。
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = this.CreateGraphics();
Size s = new Size(100, 50);
ControlPaint.DrawFocusRectangle(g, new Rectangle(this.CurrentCellAddress, s), Color.Red, Color.Yellow);
base.OnPaint(e);
}
>>239 CurrentCellAddressってセルのインデックスだろ。座標じゃない。
>>239 GraphicsをなんでPaintEventArgs からとらないのさ?
base.OnPaintは前に持ってきた方がいくない?
>>240 、
>>242 わかった!ありがとう!!
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Point p = new Point(this.CurrentCellAddress.X * 100, this.CurrentCellAddress.Y * 45);
Pen BluePen = new Pen(Color.Blue, 2f);
e.Graphics.DrawRectangle(BluePen, p.X, p.Y, 100, 45);
}
一応動いてはいるのですが、おかしな点はないでしょうか?
>>243 PenオブジェクトはDisposeしないとダメ
using (Pen BluePen = new Pen(Color.Blue, 2f))
{
e.Graphics.DrawRectangle(BluePen, p.X, p.Y, 100, 45);
}
100 だの 45 だの決め撃ちで良いんだろーか
>>243 カラムヘッダとかボーダーとかで位置ずれてないのか?
というか、スクロールしたらずれるだろ。
>>243 CellPaintingイベント使いなさい。
249 :
デフォルトの名無しさん :2006/12/21(木) 17:01:29
CheckedListBoxの項目をコード(Add)で追加したときに表示するテキストを変更する方法ってないですか? 現状、System.Objectしか表示できないです
250 :
249 :2006/12/21(木) 17:07:33
自己解決しました。 普通にAddの引数に文字列入れればいいみたいです。 Objectってそういうもんなのか・・・
>>250 ObjectをToStringして表示してる。
だから、DateTimeとかEncodingとかも気にせずそのまま突っ込める。
ツールボックスに並んでいるWindowsフォームを使用した画面絵がずらっと並んでいる、 そんなHPとか書籍ないですか? 今までC++Builderを使っていたのでそれほど抵抗なくC#に移行できました。 なので後は必要なときに適切なフォームをチョイスしてピンポイントで調べて使えばいいかな と思っているのですが、知らなきゃ選びようがないし、 全部見てみるというのも時間がかかりそうだし、使うときには忘れていそうで。 もし、知ってるよ、という方がいたら是非教えて下さい。
先に日本語の勉強を何言ってるのか不明です。 煽ってるわけじゃないよ。 協力できることはしたいが、俺には何言ってるかわからない。
標準で使えるコントロールを一通り図入りで紹介してくれって言ってるんじゃね?
255 :
253 :2006/12/21(木) 18:34:42
俺も日本語勉強したほうがいいな
256 :
どっとどす :2006/12/21(木) 18:35:27
VisualC#.Netでプログラムを組んでます。 その中でIBatisというDLLを活用してますが、 そのIBatisのヴァージョンを上げたら、 「プロジェクト〜の依存関係 〜 Culture=neutral, PublicKeyToken=〜 は、 依存関係 〜 Culture=neutral, PublicKeyToken=〜 と競合するため、 実行ディレクトリにコピーできません。」 上記のようなエラーメッセージが出ました。 依存関係とか競合の意味が解らないので問題を解決する方法を教えてください。
和訳してみると、コモンコントロールのスクリーンショットがみたい、じゃなかろうか。
>>256 一度参照を削除して、出力ディレクトリから古いDLLを削除する。
っていうほどコモンコントロール多くないし かゆいところに届きそうでもっとかゆくなる
お兄ちゃんが隅々まで掻いてあげるから こっちへおいで
キモッ チイイ
くやしい、コモンコントロールなんかに…ビクビク
コモンコン トロール
264 :
デフォルトの名無しさん :2006/12/22(金) 16:44:05
複数のActiveX(Media Playerなど)を貼り付けて使用しています。(VS2005) 通常の「フォーム」の場合は、複数張り付いていても、 フォームの xxx_Load イベントは、1回しか呼ばれません。 しかし、「ユーザーコントロール」に複数貼り付けると、 ユーザーコントロールのxxx_Load イベントが、 貼り付けたActiveXの個数回呼ばれてしまいます。 どうやらEndInitが呼ばれたタイミングでこうなっているようです。 これは、どういうことでしょうか? 回避方法はあるのでしょうか?
265 :
デフォルトの名無しさん :2006/12/22(金) 17:59:26
MDIで子ウィンドウを生成するときに、 既にその子ウィンドウが生成されていればActiveして、 生成されていなければnewする。 ということをやりたいのですが、 子ウィンドウを閉じた後の挙動がよくわからないのでどうしようか迷っています。 メモリは解放されていないようなので、何かメソッドを呼んでやればいいのか。 それとも、メモリ解放のタイミングがまだ来ていないだけで後で勝手にされるものだから、気にせずにnewし直していいのか。 とりあえず今はIsDisposedプロパティを見てnewするかActiveにするかやっています。 このやり方で正しいのでしょうか?
子フォームのFormClosedイベントを捕まえて, フラグ立てるなり参照にnullを代入するなりしとけば
267 :
253 :2006/12/22(金) 19:45:58
>>264 これはいいことを聞いたw
ActiveX複数貼ってもイベント1回しか起こらなくて困ったことが
あったんだが、ユーザーコントロールに貼ればいいんだな。
ありがとう!
よくこういうソースを見かけるんですが、 System.IO.StreamReader sr = new System.IO.StreamReader("test.txt"); try { Console.WriteLine(sr.ReadToEnd()); } finally { sr.Close(); } ファイルが存在しないときや排他的に開かれているときの 例外も捕捉したいようなときはどうしたらいいんでしょうか?
269 :
デフォルトの名無しさん :2006/12/23(土) 00:55:40
5種類の仕事と5人の人がいて、5種類の仕事を行うコストが個人で異なる。 この様な場合、誰にどの仕事を行わせることがもっとも低コストで仕事が 行えるか求めるフローチャートを作成しなさい、計算方法は、全ての組み合わせ(順列)を求める。その中から最も低コストとなる仕事の割り当てを得る(腕ずく法;Brute Force Method)。なお、最低コストが複数ある場合は、最後に判明した組み合わせのみを表示すればよい。 人1人2人3人4人5 仕事A1057128 仕事B1420151015 仕事C1830202522 仕事D358182012 仕事E201381017 できる人いませんか?
270 :
デフォルトの名無しさん :2006/12/23(土) 00:56:34
5種類の仕事と5人の人がいて、5種類の仕事を行うコストが個人で異なる。 この様な場合、誰にどの仕事を行わせることがもっとも低コストで仕事が 行えるか求めるフローチャートを作成しなさい、計算方法は、 全ての組み合わせ(順列)を求める。その中から最も低コスト となる仕事の割り当てを得る(腕ずく法;Brute Force Method)。 なお、最低コストが複数ある場合は、 最後に判明した組み合わせのみを表示すればよい。 人1人2人3人4人5 仕事A1057128 仕事B1420151015 仕事C1830202522 仕事D358182012 仕事E201381017 できる人いませんか?
>>268 tryの中でファイルを開かないと意味ないでしょうが。
try{
using(StreamReader sr = new StreamReader("test.txt"))
{
Console.WriteLine(sr.ReadToEnd());
}
}
catch(FileNotFoundException e) { }
catch(UnauthorizedAccessException e) { }
272 :
デフォルトの名無しさん :2006/12/23(土) 00:58:43
5種類の仕事と5人の人がいて、5種類の仕事を行うコストが個人で異なる。 この様な場合、誰にどの仕事を行わせることがもっとも低コストで仕事が 行えるか求めるフローチャートを作成しなさい、計算方法は、全ての組み合わせ(順列)を求める。その中から最も低コストとなる仕事の割り当てを得る(腕ずく法;Brute Force Method)。なお、最低コストが複数ある場合は、最後に判明した組み合わせのみを表示すればよい。 人1人2人3人4人5 仕事A10、5、7、12、8 仕事B14、20、15、10、15 仕事C18、30、20、25、22 仕事D35、8、18、20、12 仕事E20、13、8、10、17 できる人いませんか?
スレ違いの上にマルチかボケ
>>271 >>268 じゃないけど…
それって、usingステートメント内で例外が発生したら、usingの外のcatchで大丈夫なの?
それとも、中にもtry-catchいる?下みたいに。
try{
using(StreamReader sr = new StreamReader("test.txt"))
{
try{
Console.WriteLine(sr.ReadToEnd());
.......
}
catch(System.Exception){ }
}
}
catch(FileNotFoundException e) { }
catch(UnauthorizedAccessException e) { }
using は 例外を catch しない。
外から囲むだけでおk
>>274 てか、キャッチしてなにしたいかによるわな。
usingはfinallyを使うだけで、例外には一切触らない。
280 :
デフォルトの名無しさん :2006/12/23(土) 18:38:13
最小コストの求め方は教えてくれませんか?
教えてあげません
つーか数学の問題だろ
>>280 (1) 全ての組み合わせ(順列)を求める。
(2) その中から最も低コストとなる仕事の割り当てを得る。
(3) 最低コストが複数ある場合は、最後に判明した組み合わせのみを表示。
問題自体に求め方書いてあるだろハゲ C#と関係ないんだよ文盲 馬鹿が伝染るんだよ池沼 もう来るなよ低能 コストの配列5個作ってループで5!回計算して最低値をとっておけばいいだけだと思います
宿題スレ逝ってくれよ頼むから
優しい奴多杉w
287 :
デフォルトの名無しさん :2006/12/23(土) 20:59:32
一昨日から初めて、プログラムにさわったので、バカですみませんでした。
フローチャート書けとかプログラミング関係ないでしょ
つ【線形計画法】 つ【乱数】 どっちでも好きな方を選んどけ
フローチャートって高校の時に書かされたな。 紙に書くとかアホかって思いながら課題こなした覚えが。
291 :
253 :2006/12/23(土) 21:09:18
今度は初心者スレに来たよ…
treeViewを使ってて、indexが1で、かつ、nameがnode1の ノードを選択状態でフォームを起動したいのですが、どうすればいいのでしょうか? お願いします。
普通にコード書く。 終了。
その条件に合致するのを探せばいい で、何が分からないのよ
>>292 フォーム起動時じゃない場合(ボタンを押すなどね)は自分で出来るの?
ここのところレベルの低い質問ばかりで寂しい
裾野が広がったということで…
プロパティウィンドウだけじゃ出来ませんよ。
300 :
292 :2006/12/23(土) 22:56:33
フォーム起動時で何も選択されてないのに、 this.Setting_treeView.SelectedNode = this.Setting_treeView.SelectedNode.Nodes["Keyname"]; なんていう馬鹿なことをしていたのが原因で、はまってました。 低レベルで、お騒がせしました。死んできます…。
GCされちゃえばいいのに…
んじゃ、ぷらっとの未解決。本人じゃないけど
自分でもやってみたけど、
SupportsTransparentBackColor使ってみたけどだめ。
けっこう需要はありそうと思うけど。
13 名前:デフォルトの名無しさん[sage] 投稿日:2006/12/16(土) 19:25:34
>>12 乙
フォームの背景だけを半透明にしてその上に文字をクッキリ表示させたいと思い、
フォームのOpacitを50%にし、そのフォームにLabelを配置したのですが
Labelの文字まで半透明になってしまいます。
何か良い解決方法はないでしょうか?
>>302 なんちゃってだけど
0)Form1とForm2を用意する。Form1にはラベルとか貼り付ける。
1)Form1 のTransparencyKeyを設定する。とりあえずSystemColors.Control
2)Form1のコンストラクタで、Form2をOpacity =0.5でShow()する。
3)Form1に以下のコードを追加する。
protected override void OnMove( EventArgs e )
{
this.form2.Location = this.Location;
base.OnMove( e );
}
protected override void OnResize( EventArgs e )
{
this.form2.Size = this.Size;
base.OnResize( e );
}
Form2をアクティブにするとおかしくなるので、そこらへん小細工してちょ
>>303 それは、やってないんだが、
Formの上にパネルをDockFillしたのはやった。
Formに描いた背景の半透明は可能
FormをTransparentkey使って、デスクトップを見ようとするんだけど、
デスクトップはどうやっても見えなかった。
MSDN見ると、SupportsTransparentBackColorは親のコントロールに描画を
委譲し半透明化処理するようだから、デスクトップに対してはだめなんかと。
Form2に protected override void OnActivated( EventArgs e ) { this.form1.Activate(); } でいけるかも
>>304 最初、意味分からなかった。
う〜ん、出来そうだけどトリッキーすぎないか?
>>305 だから、トップレベルウィンドウを2つ作らないと意味ないの。
2000で色々できるようになったけど、パーピクセルで柔軟にうにうには
できない(と思う…俺はWin32の鬼ではないので間違っているかも)。
…まぁなんか変な手法なので汎用化できない、と思うかもしれないけど、
俺は数日くれればデザイナ対応のそんなフォーム作れるな、と実装見繕れた
程度なんでがんばれ。
309 :
302 :2006/12/24(日) 00:24:41
305と307です。
>>308 Thx
MDIはやったこと無かったので、試してない。
あと期待してたのが、やっぱWin32。
誰か、詳しい人どお。
落ちるけど、ちょくちょくのぞかせてもらいます。
>>309 MDIじゃなくて…だからFormをトップレベルに2枚作るの。
基本的には
>>304 とまったく一緒。
>>310 >>304 がMDIを意味しないことは理解してるよ。
まったく、重なった位置にFormを重ねましょうという意味だと受け取ってるんだけど。
で、MDIを聞いたのは、自分が扱ったことなかったから、
出来るか出来ないかを確認したかっただけです。
>MDIじゃなくて…
ってことは、だめと受け取っていいのかな?
Vistaならなんとかしてくれるんじゃね?
>>311 >MDI
基本MDIを重ねても駄目だと思われる。トップレベルウィンドウ以上の
描画はWindowsまかせなので。逆に言えばここを任せてないからVistaで
あんな力技が可能だし、WPFの制限がきついわけで。
…ってあ、WDM API使えばVistaだけは可能?
314 :
302 :2006/12/24(日) 00:48:10
>>313 Thx
ということは、さしあたって無理そうだね。
まあ、自分自信すぐに使いたいというわけではないので。
>>302 の質問は終了で
1つのスレッドでいくつもの通信 ソケットを扱うことってできるのでしょうか? たとえば、1つのスレッドで何箇所からも同時にダウンロードする とか ご教授願います
普通にスレッドの中でループまわして順々にRecieveすればいいだけでしょ。 応答の遅いソケットがあればそこで止まるけど、ひとつのスレッドで扱うってのはそういうことだし。
C#でASP.Netなコードを書いてるのですが、 BinaryFormatterのSerializeでセキュリティ例外が出て、どう対処したらいいのか良くわからず 質問させてください。 コードは以下なような感じのをaspxに入れてるですが、LocalというかDebug環境では動くのですが、 サーバー上では、SecurityExceptionが出てしまいます。 どなたかお知恵をお菓子ください。 using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; int[] nArray = new int[] {3,4,5,6,7,8 }; MemoryStream stm = new MemoryStream(); BinaryFormatter binaryFormatter = new BinaryFormatter(); binaryFormatter.Serialize(stm, nArray); long nLen = stm.Length; stm.Seek(0, SeekOrigin.Begin); int[] nArray2 = (int[])binaryFormatter.Deserialize(stm); Response.Write(String.Format("Success: length[{0}]: value[{1}]", nLen, nArray2[2]));
320 :
デフォルトの名無しさん :2006/12/25(月) 01:54:33
すいません場違いな質問ですが・・・ C#ってプログラムをまったく知らない奴が2、3ヶ月で基本程度はできるものでしょうか? 目安程度でいいんでお願いします・・・
言語そのものは一週間もあれば十分だが。 まずそれ以前にオブジェクト指向を理解するのにどれくらいかかるもんだろ。 それに基本と言っても WinForm か ASP.NET かで全然違うしな。
322 :
320 :2006/12/25(月) 02:14:30
とりあえず電卓作ったりメモ帳作ったりしなければならんもので・・・ 頑張れば2ヶ月くらいでいけますか?
>>322 やる気・根気があれば2ヶ月でできると思う。
わからないとこがある時ここで聞けば教えるよ。
324 :
320 :2006/12/25(月) 02:21:49
そうですか 逆を言えばヤル気と根気がなければやばそうってコトですかね とりあえず仕事しながら合間見てがんばって勉強します!
思ったとおりの動作をするものが作れたときの快感がわかればあとはとんとん拍子かも
326 :
320 :2006/12/25(月) 02:28:15
そうですか! わからない単語とかあったらネットとかで調べたりします あわよくばここに聞きに来ますのでそのときはよろしくお願いします
DrawAnimatedRectsのような効果をAPI使わずに実現する方法ってありますか?
328 :
デフォルトの名無しさん :2006/12/25(月) 08:57:50
329 :
デフォルトの名無しさん :2006/12/25(月) 09:59:38
MonthCalendarで日付を取得する方法を教えてください
>>327 自前で描画
>>329 SelectionStart
つーかドキュメント読めやハゲ
MonthCalendarで日付の取得方法聞くのは
TextBoxでテキストの取得方法聞くのと同じだぞボケ。
電卓やメモ帳はびっくりするくらい簡単に作れるな
いづれC#でVBAみたいなこと出来るんでしたっけ?
とりあえずC#やっとけ>333
335 :
デフォルトの名無しさん :2006/12/25(月) 17:03:55
C#のGUIでDirectXの描画をしたいんですが、 C++のtimeSetEventのように一定間隔で呼ばれるイベントがどれかわかりません。 こういう場合、何を使えばいいんでしょうか
336 :
314 :2006/12/25(月) 17:09:02
>>335 1. timeSetEvent を P/Invoke する。
2. SetTimer を P/Invoke する。
3. System.Windows.Forms.Timer を使う (内部で SetTimer を使用)。
>>335 System.Windows.Forms.Timer
System.Threading.Timer
System.Timers.Timer
好きなのどうぞ
339 :
デフォルトの名無しさん :2006/12/25(月) 18:14:34
>>337 >>338 ありがとうございます。
System.Windows.Forms.Timerを使ってみます。
これ、いくつも種類があるのってやっぱりそれぞれに個性があるんですかね?
使いどころというか。
C#って将来性あるんですか?
無いので早々にお帰りください
ゲーム作成でより高度な処理を実現するために、 C++と比較して、C++よりC#が優れている点ってないですよね? それともC++で実現可能なことはC#でも実現可能?
>>341 のような返事しとけば荒らしはすぐ去っていくんだけどな
オレもそう思った。何蒸し返してんおかなと
>>343 C++でできるなら何もわざわざC#を使う必要なんてありやしません。
ネットワークでつながっているPCが2台あったとして、それぞれ A、Bとする。最初にAが立ち上がっているとする。 Bの起動途中にAをシャットダウンすると、それ以降Aで.NETを 使うプログラムを動かそうとすると、mocoree.dllでエラーが出る ようになり、frameworkのアンインストールすらエラーになる。 タイミングの問題らしいんだが、Bを再起動する事で直った。 ちょっと不安を感じさせる。
もっこりでぃーえるえる
349 :
327 :2006/12/27(水) 00:21:45
つまんねぇ奴が居着いちゃったなぁ。
>>349 Graphics.FromHwnd(IntPtr.Zero)
これでデスクトップのGraphicsがとれるから、ひたすらガリガリ書けばいいんじゃね?
353 :
デフォルトの名無しさん :2006/12/27(水) 06:36:28
System.Net.MailMessageについて質問です。
MailMessage mail = new MailMessage();
mail.Headers.Add("To", "
[email protected] ,\"山田 太郎\" <
[email protected] >");
FormatException「ヘッダー値に無効な文字が見つかりました。」とでるのですが。
System.Net.MailMessage.HeadersはNameValueCollectionであるので
AddではFormatExceptionがでないと思うのですが、なぜでしょう?
よく知らないけど、漢字をそのままヘッダに突っ込むのはマズイような
どの時点で出るか、だが。 Addしただけで出るの? もちろん、エンコードしないと漢字はまずいけどね
DataSet内のテーブルをDataGridViewで表示しているのですが テーブル内に列を追加してもビューに反映されません。 どうして?
DataMember?
358 :
デフォルトの名無しさん :2006/12/27(水) 12:10:03
C#の勉強としてCGIを作っています。FORMから送信された データの読み取りは、下のコードでいいでしょうか? これをやったらダメ、ここはこうした方がいいという箇所 がありましたら教えてください。 String queryString; String reqMethod = Environment.GetEnvironmentVariable("REQUEST_METHOD"); if ( reqMethod.Equals( "POST" ) ) { String conLenStr = Environment.GetEnvironmentVariable("CONTENT_LENGTH"); int queryLength = Int32.Parse(conLenStr); BufferedStream stdin = new BufferedStream(Console.OpenStandardInput(),queryLength); byte [] queryBytes = new byte[queryLength]; stdin.Read( queryBytes, 0, queryLength ); queryString = Encoding.UTF8.GetString(queryBytes); } else { queryString = Environment.GetEnvironmentVariable("QUERY_STRING"); }
.NETでCGI作るのが変態行為
>>353 System.Net.MailMessage.HeadersはSystem.Net.Message.Headersを返すから、System.Net.Mime.HeaderCollection
Addする文字列に\x0100以上の文字があればFormatExceptionがでる。
363 :
デフォルトの名無しさん :2006/12/27(水) 14:39:19
>>359 あくまでも学習用の素材なので、CGIを全否定されても
困ってしまう。DOS窓に Hello World! とか出力するのは
退屈すぎる。
>>362 すんません。例外処理は今後の学習課題です。例外処理というと、
JavaScriptのtry{}catch(e){}しか知らないんです。
最優先で例外処理を追加すべき箇所がどこか教えていただけると
助かります。
>>363 ASP使わずに.NETでCGI書くのが変態であるのは曲げようのない事実であるが。
tryで囲むのはInt32.Parseくらいでいいんじゃないかな
ストリームを一回だけ読むのにBufferedStreamを使うのはあまり意味がなさそうだけど。
文字列の比較にEqualsを使うと読みづらくならない?
365 :
デフォルトの名無しさん :2006/12/27(水) 15:49:37
>>364 ご指摘ありがとうございます。
BufferedStream については、環境変数CONTENT_LENGTHから得た値の
分だけReadメソッドでbyte配列かchar配列に標準入力を読み込めれば
なんでもよかったのですが、バッファの大きさを指定する場合、一番
簡単そうだったので使いました。
修正版は下のようになりました。
String queryString = "";
String reqMethod = Environment.GetEnvironmentVariable("REQUEST_METHOD");
if ( reqMethod == "POST" ) {
String conLenStr = Environment.GetEnvironmentVariable("CONTENT_LENGTH");
int queryLength = 0;
try {
queryLength = Int32.Parse(conLenStr);
} catch {
// 例外処理 HTMLでエラーメッセージを出力する
dispError( "CONTENT_LENGTH の Parse に失敗しました。" );
}
BufferedStream stdin = new BufferedStream(Console.OpenStandardInput(),queryLength);
byte [] queryBytes = new byte[queryLength];
stdin.Read( queryBytes, 0, queryLength );
queryString = Encoding.UTF8.GetString(queryBytes);
}
else {
queryString = Environment.GetEnvironmentVariable("QUERY_STRING");
}
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★ このスレを見ている人はこんなスレも見ています。(ver 0.20) ★S・しゃぶ・覚せい剤のスレ★質問とか part49 [薬・違法] おい、誰だw
367 :
デフォルトの名無しさん :2006/12/27(水) 16:10:32
C#でIEのWindowに図形を描画するプログラムをかいています。 強制的にIEのWindowを再描画して、書き込んだ図形を消去しようとしているのですが、 その方法に詰まっています。誰か良い解決策を教えてください。 ちなみにhWndは取得出来ています。
再描画はInvalidate() hWnd あるなら API 呼んでみては。 即反映させたいなら、Invalidateの後にUpdateWindow
hWndあるなら単に好きな範囲をInvalidateすりゃいんじゃ?
370 :
デフォルトの名無しさん :2006/12/27(水) 16:30:27
>>367 です
返信有難う御座います。
invalidate()の使い方がイマイチ良く分かりません。。。
hWndをControlにする作業が必要なのでしょうか?
>>365 Int32.Parseをtryでくくるなんてこと覚えずに
bool Int32.TryParseを使いなされ
例外を処理するところじゃない
>>370 APIのInvalidateRect()
情報ボックスの説明の文章を改行するにはどうするの? アセンブリ情報に\n入れても無視されます。
CRLF
コンテキストメニューで項目を作ってそこにショートカットを設定しています。 タスクトレイに入れてFormは消した状態にしてるんですがショートカットを受けてくれません。 どうすれば解消できますか? よろしくお願いします。
>>374 キー入力はウィンドウが受けるものだから。
ホットキーを登録しないといけない。
>>371 (A) try { queryLength = Int32.Parse(conLenStr); } catch { queryLength = 0; }
(B) bool result = Int32.TryParse(conLenStr, out queryLength);
(A)と(B)は機能的に等価で、例外処理をしなくて済む分、TryParseを
用いた方がベターだということですね。
ただ、ここでは環境変数REQUEST_METHODの値が"POST"で、なおかつ
標準入力から何も読み込まないのであれば、クライアントに
エラーメッセージを返すべきでしょう。
ですから、例外処理をしてもいいような気がしますが、どうなのでしょうか?
(A') try { queryLength = Int32.Parse(conLenStr); }
catch { DispError( 〜
(B') bool result = Int32.TryParse(conLenStr, out queryLength);
if ( queryLength == 0 ) { DispError( 〜
C#なら例外を使うほうが漏れの好みだな・・・。
ああ、いや、ていうかケースバイケースで、字面的にすっきりする方。
>>370 です。
InvalidateRect(hWnd, IntPtr.Zero, false);
UpdateWindow(hWnd);
このようなコードを書いて再描画させたのですが、再描画された部分は
IEのテキストが表示される部分の上の枠線部分のみで
全体は再描画されませんでした。
何が問題なのでしょうか?
InvalidateRectの3つ目はtrueでもやってみた?
Win32APIなんて長いこと使ってないから忘れてしまったんだが InvalidateRectって子ウィンドウに伝播しないんじゃなかったかなあ RedrawWindowには子ウィンドウを再描画するかどうかのフラグがあったような
って、HWNDってメインので、クライアントエリアのHWNDじゃないのか そりゃクライアントエリアのHWNDもってくるか、子ウィンドウまで再描画させるかかな
384 :
デフォルトの名無しさん :2006/12/27(水) 19:10:53
C#にevalってあるんでしょうか?
LCGを使って動的にILを書き下せる
386 :
デフォルトの名無しさん :2006/12/27(水) 19:17:46
C#に限ったことじゃないだろうが、.NET系のEXEは起動時、 メモリーにロードするだけじゃなくてコンパイルまでやってるから 画面が表示されるまで時間が掛かるだろ? そこでだ、例えばVisualStudio2005なんかもそうだけど、 起動するとまず素早くオープニングの小フォームだけ出して、 それから使うクラスをロード・・。 完了次第メインのフォームを表示して、最初の小フォームを閉じる。 これどうやればいいの?
>>386 そのウィンドウのことを「スプラッシュウィンドウ」という。
それでググってわからんかったらまたおいで。
>>385 ぐぐったらLCG=Lightweight Code Generatorというのは分かったけど
何かは分からなかった。これはなんでしょうか?
IronPythonなどを使ってevalしろってことでしょうか?
Microsoft.CSharp.CSharpCodeProvider
ILGenerator
391 :
384 :2006/12/27(水) 19:47:54
リフレクションを使うんですね。うーむ、DLL内の関数を呼び出すだけじゃなくて 変数に代入とかもできないと困るんですよね。 IronPythonを使ってevalしたほうが良さそうです。みなさん、サンクス。
C#始めたばかりなのですが相談です。 一応コマンドプロンプト(?)っぽい画面に文字を表示させるための文章は書き終えたのですが、表示時間の設定の方法が分りません。 一応作った文章載せておきます using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Test { static void Main() { System.Console.WriteLine(1983); System.Console.WriteLine("なにかが起きた"); System.Console.WriteLine(0x7C1); System.Console.WriteLine("なにかが起きた"); } } }
Sleep()
394 :
392 :2006/12/27(水) 20:45:54
>>393 「sleepは現在のコンテキスト内に存在しません」
と出てしまいます・・・。使ってるソフトはちなみに
visual C# 2005 Express Editionです
Thread.Sleep ちょっとはMSDN検索しいな。
ほかっとけよー
397 :
デフォルトの名無しさん :2006/12/27(水) 21:07:46
IEで表示されているテキストの位置を取得する方法って有りますか?
IEの子ウィンドウからInternet Explorer_Serverを見つけて、IHTMLDocumentをQueryInterface あとはDOMで辿っていって、screenTopあたりじゃないかな。
400 :
デフォルトの名無しさん :2006/12/27(水) 21:33:59
>>397 です。
画面上の位置を知りたいんですが、無理でしょうか?
>>400 出来るかも…
Flushはむりだよ。
けど何に使うんだ?
402 :
デフォルトの名無しさん :2006/12/27(水) 22:01:03
>>400 です。
IE上の文字をアニメーションさせたくて、
そのために画面上の位置を知りたいと思ってます。
403 :
デフォルトの名無しさん :2006/12/27(水) 22:04:38
>>400 です。
もう一つ質問が有ります。
IEでも何でも良いのですが、.netで、あるWindow内のテキストを
フォーム内にドラッグアンドドロップした時にイベントを発生させるには
何というイベントを発生させると良いのでしょうか?
DragDropイベントだとファイルのドラッグアンドドロップにしか
対応していないようで。。。
>>403 private void Form1_DragEnter( object sender, DragEventArgs e )
{
e.Effect = DragDropEffects.All;
}
private void Form1_DragDrop( object sender, DragEventArgs e )
{
if( e.Data.GetDataPresent( DataFormats.Text ) )
{
string data = (string)e.Data.GetData( DataFormats.Text );
MessageBox.Show( data );
}
}
406 :
デフォルトの名無しさん :2006/12/27(水) 22:34:47
>>405 さん
有難う御座います。
しかし、このコードでも、テキストをドラッグアンドドロップしようとしても
罰マークが出てしまい、イベントを取得できません。。。
何か他の設定が必要なのでしょうか?
フォームのプロパティでAllowDrop = trueにはしてあるんでしょ? DragEnter/DragOverとかのイベントで、ドラッグしてるデータがTextのときに きちんとDragDropEffectを設定していないと思われ 上のははしょったけど private void Form1_DragOver( object sender, DragEventArgs e ) { if( e.Data.GetDataPresent( DataFormats.Text ) ) e.Effect = DragDropEffects.Copy; } みたいな感じで まあそれでも駄目なら自分のコード貼れってこった
408 :
デフォルトの名無しさん :2006/12/27(水) 23:04:47
>>407 さん
申し訳ないです。ドラッグ&ドロップの仕方が悪かったようです。
最小化されているフォームに対して、テキストをドラッグ&ドロップしていたため、
イベントが発生しなかったようです。
最小化されているフォームに対してドラッグ&ドロップイベントを発生させることは
可能なのでしょうか?
409 :
デフォルトの名無しさん :2006/12/27(水) 23:19:47
もう一つ質問なのですが、IEのテキストをドラッグアンドドロップした際に そのテキストが元々IEのウィンドウのどの位置に有ったかという情報を 取得することは可能なのでしょうか?
可能
そんなことC#でやるなんて、自ら毒杯を呷るようなもんじゃね?
412 :
デフォルトの名無しさん :2006/12/27(水) 23:45:51
>>410 さん
それをやるにはどういう方法がありますか?
413 :
デフォルトの名無しさん :2006/12/28(木) 00:42:00
思うんだが、まず勉強だよね。 やっぱり、CやC++やWin32API、これが基本にないと混乱の源。 この、掲示板を見てそう思う。
んだな。
>>397 からみてるとC#関係ない質問ばかりだし
ビスタって全部C#で書かれてるんでしたっけ?
まじげ?
びすたもPS3みたいな運命を・・・
>>415 そんなことがあれば俺はMSに命を捧げてもかまわない
419 :
デフォルトの名無しさん :2006/12/28(木) 01:28:47
質問させてください。 C++製のDLLの中に void* get_pointer(); という関数があるとして、 それをDllImportで呼び出して戻り値をIntPtr型の変数に代入します。 その後、同じDLL内に void manage_data(void* pointer) という、渡されたポインタを構造体のポインタに変換してデータを変更する関数がある場合、 それを [DllImport("hoge.dll")] public static extern void manage_data(IntPtr pointer); という形で宣言して、 先ほどget_pointerで取得したIntPtr型の変数をそのまま渡した場合、 データを正しく処理することはできますでしょうか?
>>419 できる思うが。
つーかやってみりゃいいじゃねーかハゲ
423 :
353 :2006/12/28(木) 06:50:58
>>354 ,355,361 ありがとうございます。
自力でMIMEヘッダ対応なエンコードしなきゃだめなんですね。
Mail空間になんでMIMEエンコードクラスが公開されてないんだか・・
すみません・・・ C#でウィザードリィみたいなゲーム作れるのでせうか;
作れるよ。
警告 このスレは回廊の終わりに達しました。 : : A PIT
ゴール直前でExceptionが発生し続行不可
429 :
デフォルトの名無しさん :2006/12/28(木) 13:08:39
C#というか、.NETフレームワークに関連していると思うけど、 WindowsのEXE起動時、前回使用したときと同じ位置に フォームを表示させるのに良い方法はありますか? VB6だとLoadイベント内で位置やサイズを設定すればよかった。 が、C#.NETで同じことすると、設定前の位置に一瞬表示されてから 設定した位置に表示される。 これがみっともないから良い方法あったら教えてください。
>>429 起動時は不可視にしとけば?
設定後に可視化。
>>429 Loadイベントで設定読み込んでLocationとSizeにセットなんてしょっちゅうやってるが
Form表示し終わるまでに来る可能性のあるイベント一覧を調べる力技じゃないエレガントな方法ありますかね?
.NET 用の spy++ みたいなのがどっかにあったな
CLRSPYだっけ? 似たようなツールいくつかあった気がする。 あのツール使ってみると、正直ゾッとする。
>>429 コンストラクタで設定するのが定石じゃね?
436 :
デフォルトの名無しさん :2006/12/28(木) 14:39:18
>>435 コンストラクタ内だと設定しても反映されない不思議現象
C#でDNSのTXTレコードを取得するにはどうすればよいですか?
C#を始めようと思ってるのですが、オススメの入門サイトとかありますか? ちなみに使うソフトは Microsoft Visual C# 2005 Express edition です
>>436 これだっけ?
やってる?
StartPosition = FormStartPosition.Manual;
>>436 StartPositionをManualにしてコンストラクタでLocationを設定
Shownイベントって実際Shownされてるか関係ないよな 非同期なLoadって感じ
表示されてないのにShownが発生することはないと思うけど。
System.Console.WriteLine(); とか、なぜみんなフルネームで呼ぶ!? C#ほやほやの俺が見たところ大半はフルで表記してる 理由あるの?
初心者がusingしないでコンパイルしようとして悩むから
javaからきましたね
俺の作ったWiteLineメソッドと間違えるから
単に、WriteLineと書いた場合、何をusingしているのかがわからない。 さらに、 参照設定してusingしている場合、何を参照しているのか、 どっちのクラスを使用しているのかがわからなくなる。 たとえば、HTMLDocumentクラス これは、System.Windows.Formsにもあるし、 Microsoft.mshtmlにもある。 このクラスはクラス名は同じだが、 メソッドやプロパティ、また扱っている型が違う。 なので、 System.Windows.Froms.HTMLDocument Microsoft.mshtml.HTMLDocument とフルネーム書いたほうが、 どっちのネームスペース配下のクラスを使用しているのかがわかる。 また、Microsoft.htmlのHTMLDocuemntをしらず、 プログラム上で単にHTMLDocumentで宣言してたりすると、 System.Windows.FormsのHTMLDocumentのものだと思い込んでしまい、 初心者の場合、 「すいません、コンパイルエラーが出るんですが」 と、うざい言葉が返ってくるのが目に見えているから フルネームで書けばうざいことにならずにすむ。 (ま、フルネームで書いてもいってくる超初心者がいるのも確かだが)
usingしててもWriteLineだけにはならん。Console.WriteLineだろ。 それとWindows.FormsにあるのはHtmlDocumentな。
俺の作ったSystem.Console.WriteLineと間違えるから global::System.Console.WriteLineと書け
それ区別できないだろ
というより定義できないな。 Hoge.System.Console.WriteLine とかならできるか。
System.ThreadingとSystem.Windows.Formsを両方usingすると"Timer"だけにできないのがなんか気持ち悪い俺 両方ともよく使うnamaspaceだからちょっとぐらい長くても違う名前にしてほしかった 好みの問題だけどな!
using Timer = System.Threading.Timer;とか, using Threading = System.Threading;Threading::Timer timer;とか
エイリアス使えばいいじゃない
457 :
456 :2006/12/30(土) 16:36:15
おろ。被った
458 :
454 :2006/12/30(土) 16:52:59
エイリアスって使ったことなくて普通に存在自体を忘れておりましたw 思い出させてくれてありがとう
テキストファイルの文字コードの判定(日本語以外の対応も必要)をしたいのですが、どうすれば良いのですか? IEのMLang.dllを参照すれば可能らしいのですが、tlb(?)のないCOMらしくてVSに参照させることが出来ませんでした。mlang.idlからtlbの生成も試しましたが途中でハングアップしてしまい無理でした…。
俺は普通にmidl.exeでいけたけどなあ
461 :
デフォルトの名無しさん :2006/12/30(土) 17:33:59
メニューバーとツールバーを作ると、背景色がデフォルトで水色になりますが、 デザインはそのままで、背景色を灰色にすることはできますか? ToolStripManager.RenderMode = ToolStripManagerRenderMode.System; は試してみたのですが、デザインがいまいち。 「Visual Studio」のメニューバーとツールバーのような感じを希望 (ツールバーは丸く浮き出た感じ。背景に余計な罫線なし)。
Windowsのビジュアルスタイルを変える
>>461 ToolStripProfessionalRendererとかを継承したクラスを作って、
OnRender...()等々をオーバーライド。
そいつのインスタンスをtoolStrip.Rendererプロパティに突っ込む。
とりあえずオーバーライドして空にしとけば余計な描画しなくなる
466 :
465 :2006/12/30(土) 20:21:07
あらら、リンクが変な具合に。まぁ、察してちょうだい。
>>465 ありがとうございます。非常に簡単で大変助かりました。
一つ質問があるのですが、これはIEやMLang.dllのバージョンが上がった場合でも、そのまま利用することはできますか?
>>467 もちろんそんな保証はないが、それはTlbimpで作った相互運用アセンブリと
同じこと。
>>454 両方ともよく使うけど同じソース内で混在はあんまりないと思うけど。
同じソース内ではどっちかに使用頻度が偏るのでもう片方はusingしないで使う。
質問です。 System.Windows.Forms.WebBrowserでスクロールされたことを検知したいのですが 不可能でしょうか?
RegexOptions.Singlelineのコメントがおかしいことになってるのは私だけだろうか
>>471 うちのもおかしい\n ((((()))???
こんな感じだったかな?
ArrayからString[]なんかに変換するにはどうすればいいの?
質問させてください。 現在、System.Windows.Forms.WebBrowserを使ったアプリケーションを作っています。 WebBrowserに表示されているページのリンクをクリックするとIEが起動しますが、 そうではなくて、現在つくっているアプリケーション自身をもう一つ表示させてその中のWebBrowserに リンク先を表示させたいのですが、このようなことは可能でしょうか。
>>473 その Array が string[] であるのが明らかなら、単純にキャストで良いけど。
>>474 NewWindow2 を調べてみ。
476 :
デフォルトの名無しさん :2006/12/31(日) 16:12:35
.net frameworkって今の大体のパソコンにはインストールされてるの? それともこれで開発したプログラムを公開するには.net framwork をインストールしてもらわなきゃいけないのかな?
>>473 型の不明なリストを任意の型の配列に変換したいならこんな感じか
T[] ToArrayOf<T>(System.Collections.IList list)
{
if (list == null) return null;
T[] x = new T[list.Count];
for (Int32 i = 0; i < x.Length; i++)
{
x[i] = (T)Convert.ChangeType(list[i], typeof(T));
}
return x;
}
入ってなくても、1.1 / 2.0 なら Windows Update から入れられるようになってるしな。
480 :
474 :2006/12/31(日) 16:49:02
VB.NETとC#は文法が違うだけで全く同じものだから、脳内変換して読めばいい。
>>483 ArrayからObject[]へのダウンキャストが発生するから一般的には無理じゃね?
486 :
デフォルトの名無しさん :2006/12/31(日) 22:24:29
C#で作った、別のプロジェクトを使用して新しいプロジェクト(C#)でプログラムを作成したいのですが、 依存関係が解決できずビルドエラーになります。 この依存関係を解決するにはどうしたらいいのでしょうか? 環境はVS2005です。
まず依存関係を整理しろ それだけじゃなにをどうやってるのかさっぱりだ
あけましておめでとう。
今年こそはC#を完璧にマスターするぞっ!
名前に!omikuji!damaと入れる
名前にfusianasanと入れる
こう?
196 って何だw
192だね。新年早々間違えた・・・orz
495 :
デフォルトの名無しさん :2007/01/01(月) 09:41:15
C++とC#が出来る人に聞きたいんですけど、C#はC++に比べて何でこんなにも遅いのでしょうか?
>>495 C++/CLIは遅いよ。
VMやライブラリのせい。
でもメリットもあるわけで。
個人的には実用上遅さで困るのは GUI まわりだけだな……。
起動の遅さ…
大規模なアプリケーションはインストーラでngenしておけば、 そんなに起動に時間がかかったりしないと思うんだけど。 それに、Vistaなら初回起動以外は十分はやくなってるから気にすることはない
500 :
デフォルトの名無しさん :2007/01/01(月) 11:38:43
>>463 いろいろ試行錯誤してみました。
Rendererから作成するのが大変だったので、ColorTableだけをカスタマイズすることにしました。
併せて
ToolStripManager.VisualStylesEnabled = false;
を指定したところ、期待する描画ができました。
ありがとうございました。
501 :
495 :2007/01/01(月) 13:19:12
>>499 Vistaは初回起動や画面描画が遅いし、メモリは少し多めに食うし
新しく開くコントロールの初期化が鈍いのでかなり遅い気がするのですがどうでしょうか?
それ以外については中々早いようなんですけど
WPFはどうなんだろ
504 :
デフォルトの名無しさん :2007/01/01(月) 17:05:33
メインとは別のスレッドで新規フォームを作成したところ、 スレッド終了時点でフォームが閉じられてしまいます。 具体的には以下のようなコードとなっています。 原因がよくわからないのですが、何かわかれば教えていただけないでしょうか? よろしくお願いします。 public void ThreadTest() { Thread testThread = new Thread(fncA) testThread.Start(); } private void fncA() { Form testForm = new Form(); testForm.Show(); //**************** その他の処理 //**************** } //<-この関数が終わるとtestFormも閉じられてしまう
一言で言えばそういうもの。 スコープが外れているので当然。 testFormをどこかのメンバにしたらいい。
506 :
504 :2007/01/01(月) 17:42:53
>505 お教えいただいてありがとうございます。 実は別スレッドで処理を行う内容が不定でして、 delegateを定義して他の者に具体的な処理内容を任せると言う構成になっています。 当然、私が関与しないフォームの作成などが行われる場面も出てくるのですが、 このような場合には、一般的にはどのような方法がとられるのでしょうか? つまり、フォームの個数が予め把握できていないので、こちら側のメンバにしづらいという事情があります。 お手数をおかけして申し訳ありませんが、もう一歩だけヒントをいただけないでしょうか。 よろしくお願いします。
もっと寿命の長いとこで生成しろと
片付けられちゃ困るものを配列とかリストとかなんかその手のもんに登録する事に決めればいんじゃね
明らかに設計ミス。 c#とかいうまえに前にモデリング見直したほうがいい。
510 :
504 :2007/01/01(月) 18:16:42
>507, 508 ありがとうございます。 そうですね。本体部分でArrayListを作っておいて、 保存しておきたいものはこちらに登録するという仕様にしてみます。 色々とご助言頂き、ありがとうございました。
気をつけないとformの亡霊がいっぱいできるよ!
fncAでApplication.Run( new Form() ); とすれば、そのスレッドでメッセージループがまわるよ アプリ自体の終了でそのスレッドも終了する
>>504 メッセージループはどのスレッドで動いてるんだよ?
メッセージループが動いているスレッド以外からフォームを作成すること自体が問題じゃないのか?
なんか変だよね〜
>>513 >メッセージループはどのスレッドで動いてるんだよ?
元のスレッドと新しいスレッドの両方だよ。
別にApplication.RunじゃなくてShowDialogでも同じだけど。
つーかShowDialogのが普通でしたね。スマソ
あとアプリ自体の終了でそのスレッドも終了ってのは嘘だった。
thread.IsBackGround = true;にする必要があった
言ってる意味が違うんじゃないの?
しもた 俺へのレスじゃなかったのかorz 吊ってきます λ.....
518 :
504 :2007/01/01(月) 19:53:08
ご助言をありがとうございます。 お恥ずかしい話、メッセージループという概念自体知らなかったため、 今、勉強させていただきました。 「スレッドごとにメッセージループをまわせば」というアドバイスに従って 以下のようにコードを書換えたところ、一応、意図したとおりの結果を出すことができました。 >511 >気をつけないとformの亡霊がいっぱいできるよ! できてました(笑 危なかったです public void ThreadTest() { Thread testThread = new Thread(fncA) testThread.Start(); testThread..sBackground = true; } private void fncA() { //**************** //もしかしたら誰かがFormを作るかもしれない処理 //**************** Application.Run(); }
なにげに危険な気がする。 素人なもんで気がするだけ…かも。
フォームの表示とかは1つのスレッドで集中管理して, 別スレッドで行わないといけない処理だけ別スレッドでやればいいのに
今度はそのスレッドの寿命管理は誰がしてると思ってるんだ?
Arrayの<>が付いたやつはないですか?
普通の配列がそれに近い
Listじゃだめなのか?
EnvDTE.DTE2でつかえないみたいなんです。
どういう使い方をしようとしてるの?
EnvDTE80じゃないか
529 :
デフォルトの名無しさん :2007/01/03(水) 04:08:16
C#でAPIを利用しようと思っているのですが user32.dllなどインポートライブラリが指定されている関数ならいいんですが 中にはヘッダファイルしか指定されていないものがあるんですが こういうものは諦めるしかないんでしょうか?
DLL は DLL であってインポートライブラリではないのだが 関数ならちょっと調べればどの DLL でエクスポートされてるか見つかるだろ
>>530 通常、MSDNで調べるとどのDLLでエクスポートされているか書いているんですが
それはどのヘッダを使用しているかだけしかかかれていないんです。
例えば? 例に出したら調べかたまで説明してやるよ
選択されているタブがどれか調べたい int TabCtrl_GetCurSel(HWND hwnd); commctrl.h このヘッダがいるのはわかるんですけど よろしくお願いします
それはマクロだ。 commctrl.h の中を調べてみな。
ママ、マ、マクロの意味もわかんね・・・ 事前に見ていたんだけど意味はさっぱり・・ 取り合えずDLLとかそういうんじゃないんですね やぱ、C言語から始めてないときびしいなぁ・・ ありがとう。
ようするにTCM_GETCURSELをSendMessageするのと等価ということっしょ
C#なら.NET Frameworkのコンポーネント使えばいいんじゃないのか? なんでわざわざAPIの方を使うんだ?
もしかして
>>533 は
>>532 の返事か?
気がつかなかった・・・
#define TabCtrl_GetCurSel(hwnd) \
(int)SNDMSG((hwnd), TCM_GETCURSEL, 0, 0)
これか。
#defineだからマクロだな
SNDMSG も、#define SNDMSG ::SendMessage
で、SendMessage()関数の置き換えだ。
結局、APIの ::SendMessage(hwnd, TCM_GETCURSEL, 0, 0);
を呼んでるだけだね。
TabCtrl_GetCurSel() という関数はどこにも無いので、DLLもインポートLIBも存在しない。
結局、TabControl.SelectedIndex かな?同等なのは。 TabControl SelectedTabで直接とれるけど。 これ、名前から同じもの探すのは手間だな。
COMで公開するクラスなのですが 終了するときの処理はデストラクタに書いてもOK?
参照カウントが0になればCCWが参照を開放して、そのあとGCが食ってくれるはず。 特に問題ないと思うよ。
542 :
533 :2007/01/03(水) 14:50:34
>>536 >>538 > もしかして
>>533 は
>>532 の返事か?
そうなのです。わかり難くてすみません
すごくわかりやすい説明ありがとうございます!!
>>539 そういうC#でお馴染みの構文で別アプリのコントロールの
情報を取得したり設定できたらいいんですけどねぇ
APIでやるしかないので苦労が絶えない
543 :
デフォルトの名無しさん :2007/01/03(水) 15:30:11
ググって見て情報が見つからなかったので質問です。 自分の使用しているPCに実装されているインターフェイス情報を取得して表示する という機能を付けたいです。どこか参考になるサイトがあれば教えて下さい。
>>543 このインターフェイスってどの意味で使ってる?
>>543 > PCに実装されているインターフェイス情報
まずこれを説明してくれ
インターフェイスってCOMポートとかのことか?
COMのインターフェースだったりして、、、それは無い
548 :
543 :2007/01/03(水) 15:37:21
すみません。COMポートです。
COMポートってのはRS-232Cポートのことか? それともUSB他を含めた通信ポートのことか?
Cで書いたことあるけど、結局確実なのはレジストリから持ってくる方法だったなあ
552 :
543 :2007/01/03(水) 15:55:07
553 :
デフォルトの名無しさん :2007/01/03(水) 21:13:12
クラス1[] インスタンス1 = new クラス1[(int)this.numericUpDown数.Value]; for(int i=0; i<インスタンス1.Length ;i++) { インスタンス1[i] = new クラス1(); インスタンス1[i].変数1 = this.textBoxあ.Text; } どの時点で初期化されたんでしょうか?
>クラス1[] インスタンス1 = new クラス1[(int)this.numericUpDown数.Value]; 配列型のオブジェクトであるインスタンス1を初期化(格納されてるのはすべてnull) >インスタンス1[i] = new クラス1(); インスタンス1[i]の中身を初期化
556 :
デフォルトの名無しさん :2007/01/03(水) 21:43:36
オブジェクト参照がオブジェクトインスタンスに設定されていませんって何ですか
エラーメッセージです。
参照にオブジェクトが代入されていません
559 :
デフォルトの名無しさん :2007/01/03(水) 21:59:35
this.richTextBox1.Text += オブジェクト + "\r\n"; これで実行したら richTextBox1に"WindowsApplication1.クラス名" がそのまま出力されて笑えた
どこに笑いの要素が
>>559 ん?すまんがどこが笑いどころか教えてくれる?
Objectの中身に何の型が格納されているのか調べる手段はないの?
取りあえず GetType があるが 調べてどうしたいのかによる
is as キャストしてみる 好きなもの選べ
いま「14歳からはじめるC言語」っての見て勉強始めてる んだけど、プログラムの勉強ってどんぐらいかかるもん? とりあえずifとかelseとかは理解できたが、先が見えん…。 とりあえず、学校では勉強は出来たほう。レベルの低いとこ だったが、それなりに勉強して学年2位から5位あたりをうろ ちょろしてまんた。
C#やりたいならCよりもJavaの入門書をやったほうが早い もしくはスレ違い
立体視みたいなもんだからできんやつにはできん。
若いうちは勉強しようとするよりも、 楽しいと思えることしといたほうがいいよ。 どれくらいかかるとか関係ない プログラミングが楽しければそれでいい。 if〜elseスンゲーこれでなんでもできるじゃんって思えたら良し。 できるやつなら何からはじめても、のめり込んで究めるだろうし 駄目なやつは何をやっても駄目。
>>566 無料IDEあるんだし、すぐEXE作れて目に見えるんだし
なんか御題貰って作って見ればいいお
>>569 始めてPC-8801をやり始めたころはそんな感じだったな
足し算引き算するだけで感動してた
今の人は目が肥えてしまってる分基礎を学ぶのはつらいだろうね
VC#2005Expressの使い方についての質問だけど、 ビルドした際に生成されるobjフォルダの位置を変える方法ってある? binフォルダの位置は変えるのに成功したんだが・・・
>>572 MSBuildファイル(*.csproj)でプロパティBaseIntermediateOutputPathあたりを設定する。
詳しくはWINDOWS/Microsoft.NET/Framework/v??/あたりにあるMicrosoft.Common.targets,Microsoft.CSharp.targetsファイルを参照してくれ。
MSBuildまわりのドキュメントって少ないなあ
System._Comobjectの正体を暴く方法を教えてください。
>>574 Reflectorで中身を見てみたら?
w
577 :
デフォルトの名無しさん :2007/01/04(木) 15:16:37
C#でC++のクラス(インスタンス)を使うことってできるんでしょうか? DllImportを使ってDLLから関数を呼び出せることはわかったのですが、関数だけじゃなくクラス自体も使いたいです。 やっぱり無理でしょうか。
C++/CLIでラッパーを書く
com activex
任意のクラスについて、指定されたフィールドを指定された型でGet,Setするとしたらどういう記述がいいでしょう?(´・ω・`) やりたいことは独自のコントロールクラスでの値の取得、変更時のデータの反映なんですが。 考えたのはリフレクションを使って処理する方法。リフレクションを使わないでGenericsで記述できるでしょうか? こんな感じ?インスタンスは後からくっつけられるとします。 myTextBox.Bind(new FieldStringBinder(typeof(MyClass),"_name",BindGet|BindSet));//_nameはMyClassのフィールド名。
>>574 分からないからSystem._ComObjectなんだろw
>>580 それだとどのMyClassのインスタンスを見に行ったらいいのかわからない
なんで普通にMyClassのインスタンスを渡さないの
それともインスタンスフィールドじゃなくてstaticフィールドを見に行きたいのか?
そんな必要ある?
>>580 継承って理解してるか?
class MyClass:CollectionBase
{
public Add(MyItem item)
{
}
}
ま、簡単に書くとこんな感じ
これは独自のクラスにarraylistの基底クラスを継承して
ArrayListと同じような機能をするけど
追加できるのはMyItemというクラスのインスタンスだけって感じ
やりたいコントロールの基底クラスを継承した独自クラス作成して
同じようにやればいいだけ
>>583 勘違いする人がでるといかんので補足しておくと、
CollectionBaseはIList.Add(Object)を明示的に実装しているので、
実際にはIListにキャストすることでMyItemクラスのインスタンスでなくても追加できる。
MyClass a = new MyClass();
//a.Add(new Object()); // error
((IList)a).Add(new Object()); // ok
そういう話なのか…??
CollectionBaseを継承する場合はイベント的なプロテクトメソッドをオーバーライドして、 不正なデータの追加などはできないようにするのがルール。 しかしそれ以前にジェネリックのサポートによりこんなのはほとんど不要になった。
>>580 普通にプロパティを作ればいいんじゃないのか?
リフレクションなんてよほど特殊なことをする必要がない限り使うことはないんだが。
PropertyGridみたいなことがやりたいんでしょ
名前がコード上で文字列で出てきてる時点で、 リフレクションやそれに近い方法意外ではできないこと確定。
>>580 Foo Value;
MyClass instance;
typeof(MyClass).GetField("_name").SetValue(instance, value);
value = (Foo)typeof(MyClass).GetField("_name").GetValue(instance);
やはり邪道だな。
T Getvalue<T>(object instance, string name) { // instanceのTypeDescripterゲット // プロパティゲット // TypeConverterでTに変換 return (T)val; } 書き方忘れたからコメントだ。 ああそうさ、結局リフレクションだお。 しかも使いやすくないよ。
>>573 d
おかげでバックアップの際にずいぶん楽になった。
593 :
580 :2007/01/05(金) 12:02:09
レスさんくすこ。
質問が分かりにくくてすいません。
やりたいことはたとえば独自のテキストボックスでテキストが変わったときにバインドされたインスタンスのフィールドを直接変えることです。
その際にバインドされるインスタンスは特定の型に依存しないようにしたいと思っています。
つまりどんなクラス、ストラクトでもFieldとしてpublicのstringを持っていてそれを指定されればテキストボックスとバインドできるようにしたいんです。
>>582 今回の場合はインスタンスが動作時にインジェクトされる可能性があるため静的には動作の記述のみにしようと考えています。
>>583 使う型ごとにGenericsで専用のテキストボックスを作るという考え方はありですが、その型にテキストボックスバインド用のインターフェースを作るわけにはいきません。
あるクラスでstringのフィールドが複数あった場合におのおの別のテキストボックスにバインドすることもありえますから。
>>587 フィールドでなくプロパティ限定にしてsetter,getterのデリゲートとバインドさせるのはありかもしれません。
myTextBox.Bind(typeof(MyClass),"Name",BindGet|BindSet);
こんなかんじでしょうか?
>>589 これはリフレクション使う前提で文字列にしているだけであって文字列として記述しないですむならそれに越したことはないです。Lispみたいに文法拡張できれば済む話でしょうね。
リフレクション使えばまぁ満足できるコード記述量で望みの動作できそうですがいまいちエレガントでないきがしてます(´・ω・`)
フィールドの値を変えるためのデリゲートオブジェクトを渡せば? 柔軟に対応できるよ
593にもデリゲート云々とあるのに気づかなかったので補足 デリゲートを直接引数に渡すってことね そのつど匿名メソッドなりでフィールドの値を変更するメソッドを書けばリフレクション不要
596 :
580 :2007/01/05(金) 12:33:13
>>595 そのつどデリゲートを書いて柔軟にしたいときもありますが、今回は出来るだけ記述をしないでいける方法探っているので。
コントロールに限定するなら DataBindings が既に存在するのだが。
>>593 なんだ。フィールド言うからてっきりprivateなフィールドを操作しようとしてるんかと思った。
普通はフィールドをpublicにするのはWin32APIに渡す構造体を除けばstatic readonlyのときだけ。
class Foo { public String Bar { get; set; } }
textBox.DataBindings.Add(new Binding("Text", foo, "Bar"));
>>598 それって内部的にはリフレクション使ってるんじゃないの?聞きたいのは、こういうクラスがあるとかじゃなくて技術的にどういうやり方があるかということだろう。なんか質問者の意図を汲み取らないで回答してる人多すぎ。
ついでに質問してる人が例を限定して話してるのにpublicなフィールドつくらねーよとか余計な自己主張してる人も多すぎ。
リフレクションは絶対に使わないとダメなんだって。 選択肢はライブラリを使うか、一から自分で書くかの二通り。
>>599 技術の話ならMSDNのDataBindingsのところに全部書いてあるだろ。
>>602 みてないけどDataBindingsがどのように実装されてるかも書いてあるの?
どういう挙動をするかくらい書いてあるよ。
ま、いずれにせよ質問者のレス待ち。
もうTextChangedイベントでいいよ
607 :
580 :2007/01/05(金) 15:10:31
お世話様です。 今回は独自のライブラリを書いているので既存のDataBinderを使うことは考えていません。ただ考え方は見ておこうと思います。 見た感じだと内部でリフレクションを使っているんでしょうか?Reflactorで見ればいいんですけど(´・ω・`) Reflectionを使うのでも速度的には問題ないのでそれでいいかもしれません。 ただできればTypeを効かす様にしたかったのでそういう記述できればですが、ざっと見たところそういう記述の仕方はなさそうかと。
今どこで迷ってるの? 大体必要そうな情報は出揃ってると思うんだけど。
609 :
580 :2007/01/05(金) 15:46:02
Reflection以外でGenericsとか使ってきれいに書ける方法がないかというのを考えてます。 裏で複雑なことをしてもいいので、表は可能な限り簡潔に書ければと思ってます。
なんかGenericsに変な妄想抱いてない?
スペット挿入と ブロック挿入の違いを教えて
ズバッと解決
そらいけスマート
人をおちょくるのもいい加減にして><
スニペット挿入 : 普通の定型句挿入 ブロック挿入 : 選択した範囲をifやwhileなどのブロックで囲む 後者は手で書いた方が早い
>>609 C#でレイトバインディングみたいな真似をするにはリフレクションを使うしかないのよ。
>>609 とりあえず一番簡単な方法。
tVVLj9MwED53pf0Po5wSUUVwBVWwrLawl1JR4O4m09bItSPHyVK1/e/4mVcfqCtxyWP8eWa++Wbsolo
ymkHGSFnClCLLP1Oeo7y/29/fjQpJa6IQJJJccLaDb8vfmCkoRSUzfOalIjzDD+eQ1tczXwkPtv9d5K
PgSgoGisg1Kv/XBcylKFCqnXXiUMHUhT3VyNUZzOOG8DXmdlnjzQ7HtcMy9nyoZzKGhZKUr2FlMIneY
6owoiuIAwQmE+AVY3A4OFQwGPRopDZSvADHF3iQ62qrY8/02tOfDAtFBT918xGiYIvgPUTWZ5QYhqO2
hitqnpMm0fQLqh+7AuPEfFlcbHeOwTDTFKaMrMt07igf+tYgnIti2Hn/15m0LFyV0qmQW6LiT1EU7d8
eowhoCVwoIFATRvMmW18osYL9u2M0Bp/pKZnEZaQ2tEz7PdbhPoRMnQquRmbx2FW7FjoRwz4ODZe5d6
N14RumJ7cHddUOuNsEHzrSenuTlTs49Yr3er7wont8X/OAjIOHVypfXFN+JtSiKgohlR6kW9Vv6tXo3
qZ6Qskr3w4zXiNvYQ1zeAORn/bolVXA/1CFpQ5Jlgwb2qkpgQmUzsgWPWNnWKD6RViFcdOcultrvSl1
xCz1Yc+bSrhdZwYmCbFCoxgX2mgJ2siWc/qQuyPyK+E50ydik0DcNSc2wuBoDWvtQPbO8la8IWDeTJL
L8dJ69wjXWLw84D+5qXbcjPA/nKXfcStq7BE/JXBrDXxa/l6yeZ1Hh2unRHMJjd0Vpo+PErDPoCv24o
rYl9ulX4NBxwzY2tYYw0lk+7TtE2ge/wI=
http://www.geocities.jp/c_cpp_cs/code/code.html で展開
620 :
609 :2007/01/05(金) 17:47:37
>>619 やっぱりそんなかんじですかね。とりあえずリフレクションで行きます。
お騒がせしました(´・ω・`)
IronPythonつかうとか
>>584 >>586 ジェネリックってすげーな。今までcollectionBaseを
必死に継承してたのがバカみたいだよ
他に知っておいたほうがいい機能ないか?
ILGenerator
624 :
デフォルトの名無しさん :2007/01/06(土) 06:48:05
Panelをカスタマイズして、独自のコントロールを作ろうとしています。 キーボード入力を処理したいので、TextBoxのように、コントロールにフォーカスが来るようにしたいです。 コントロールにフォーカスが来るようにするには、どのようにしたらよいでしょうか。 なお、PanelのTabStopをTrueにしても、フォーカスは来ませんでした。 そもそもPanelをカスタマイズするという方法がダメなのでしょうか?
C#で、ソースコード内に、そのソースのファイル名や、メソッド名を取得することってできないでしょうか? C言語の__FILE__マクロみたいなものが欲しいんです
>>626 おー
いけました。ありがとうございます。
でも、わざわざStackFrameを生成してやらないといけないのは面倒ですね
ライブラリ化して呼び出すわけにはいかないし(;´Д`)
と、思ったけど、スキップするスタックの数をパラメータで指定できました。 これならライブラリ化も可能です。ヽ(´ー`)ノ
一応、 [MethodImpl(MethodImplOptions.NoInlining)] 付けといた方がいいかもしれん。 まあデバッグ実行用なら事実上不要かもしれんが。
[Conditional("DEBUG")] つけとけばいいんじゃない?
Conditionalてどうやって実装されてるんだろ 直接コンパイラに指示を出してるのかな
>>629 インリンって読んでしまった俺はどうすればいい?
>>631 cscが読んでるみたい。
出力のMSILにメソッド本体は含まれてるけど、メソッドの呼び出しが抜け落ちてる。
VC#2005Expressでプログラム中、debugとreleaseで動作が異なるという現象が起こったので色々調べてみたところ、 VC#が生成した、Program.csのMainメソッドすら呼び出されていないような感じでした。 Mainメソッドを static void Main() { MessageBox.Show("test1"); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } と書き換えた場合、debugだとちゃんとtest1と出るのですが、releaseだと全く出てきません。 一応Form1クラスのダイアログはちゃんど出てきてるのですが・・・ 何が原因なんでしょうか?
>>634 Form1から
MessageBox.Show("test1");
じゃだめなのかい?
記述的にあまりよろしくない
>>634 そんな気持ち悪いことが本当に起こるのやら
ildasmでMainの中身覗いたらどうなってるんかね。
俺の環境ではちゃんとMessageBoxが出る
ビルドできてないんじゃない?
さすがにそれはないだろw
>>638 もしやと思いexeの日付見たら古いままでした。
思い当たる原因は無いのですが、とりあえず一度フォルダごと消して再度ビルドしたらちゃんと動作しました。
お騒がせして申し訳ないですorz
正月で浮かれてるなwこのー
643 :
デフォルトの名無しさん :2007/01/07(日) 02:22:53
MessageBox.Showで出るWindowの情報を取得する方法はどのようにすればよいのでしょうか? MessageBox.Showで出現するWindowのOKボタンの位置などを取得したいのですが
また難儀なことを思いつくもんだ。 FindWindow, GetWindowPos
>>643 お勧めはMessageBox相当のフォームをつくってShowDialog、
MessageBoxを直接いじろうと思ったらC#の範疇じゃないな。
>>643 OK押したいだけなら、BM_CLICK
C#にはjavadocみたいなやつあるのでしょうか? vs2003です。
>>647 言語仕様的に持ってる。
Documentation Comment
NDoc
650 :
647 :2007/01/07(日) 16:39:54
なるほど。 ありがとうございました。
自作のクラスライブラリにイベントを持つクラスがあります。 そのデリゲートの宣言ってどの場所に書くべきですか?
652 :
643 :2007/01/07(日) 20:48:57
>>644-646 ありがとうございました。
645の方針で行こうと思います。
Win32を使用する場合、EnumWindowsなどを使用して、クラス名#32770を比較して云々しないと駄目みたいですね。
そのデリゲートが存在すべきところ。 そのクラスにほぼ特有のデリゲートなら、そのクラスと同じ名前空間が一般的じゃないかね。
Reflectorで見たときHogehogeEventHandlerとかHageHageEventArgsとか 並んでると美しくないのでクラスの中に突っ込みたくなる
655 :
651 :2007/01/07(日) 22:02:17
>>653-654 そのクラスでしか使わないイベント&EventArgsは
そのクラスの中にpublicで記述するべきでしょうか?
656 :
651 :2007/01/07(日) 22:07:15
イベントじゃないや、デリゲート。 namespase xxxClassLibrary { public class Class1 { public class xxxEventArgs { ・・・ } public delegate ・・・ public Event ・・・ public void Method1() { ・・・ } } }
私の場合ほぼ public なネストクラスは使わんな。使う時微妙に面倒だし。 .NET の標準ライブラリ見ても、例えば DataGridViewHogehogeEventHandler/EventArgs は System.Windows.Forms にあるし。
そこでEventHandler<T>ですよ
660 :
651 :2007/01/07(日) 23:27:12
>>658 サンクス。
脅しかと思うくらい「しないでください」って書いてありますねw
乱用厳禁ってことか。
今回は親クラスでしかインスタンスを作成できないクラス(でも参照可)
でなくてもいいのでネストやめておきます。
そこで、EventArgsとデリゲートをセットで定義しようと思いますが
ファイル名はどうしようかと…w
xxxxEvent.cs
xxxxEventArgs.cs
…
662 :
651 :2007/01/07(日) 23:40:24
>>661 ありがとうございます。
xxxxEventArgs.cs に EventHandler と EventArgs 書くことにします。
>イベント ハンドラではないデリゲートの名前には、サフィックス Callback を追加します。
>サフィックス Delegate は、デリゲートに追加しないでください。
知らなかった…orz
こんなガイドラインあったんだー ためになるね。思いっきり 〜Delegate とか作ってたよ俺orz
664 :
624 :2007/01/08(月) 10:47:37
自己レスです。 ScrollableControlを使うことにしました。
ためになるガイドライン だめになる俺のソース
つ リファクタリング
質問です。 using System.CollectionsのArrayListを使ってプログラムを作っているのですが class test { ... public struct dPoint { public double X; public double Y; } private dPoint pos; private ArrayList list = new ArrayList(); ..... //ユーザ定義関数1 this.pos.x = .... // 23.456... this.list.Add(this.pos.x); ..... //ユーザ定義関数2 g.DrawString("this.list[0]->"+this.list[0] ,...); //デバッグ用に出力 という風なプログラムなのですがデバッグ出力で”this.list[0]->0”と表示されるのですが原因がわかりません this.list.Add(1)と即値を入れた時は”this.list[0]->1”と表示されます よろしくお願いします
669 :
667 :2007/01/08(月) 20:36:00
>>668 あ、すいません
小文字です
public struct dPoint {
public double x;
public double y;
}
this.pos.x = .... // 23.456...
this.list.Add(this.pos.x);
Addしてるところにブレークポイント張ってxの値を確かめてみたらどう?
>>669 structで定義してるからだよ
その場合値を変更することができない
public class dPoint {
にしたらいける
672 :
667 :2007/01/08(月) 20:40:47
>>670 言われてみればVC#でブレークポイント張れましたね
確かめてみてだめなようならまたきます
ありがとうございます
673 :
あのー :2007/01/08(月) 20:47:48
初心者しかいないのか????
難しい質問を投げればエロい人も召喚できる
675 :
あのー :2007/01/08(月) 20:50:58
釣なのか? ToString げほげほ
>>675 Stringとの+はString.ConCatにコンパイルされるから型変換は不要。
class test { ... public struct dPoint { public double X; public double Y; } private dPoint pos; private List<dPoint> list = new List<dPoint>(); this.pos.x = .... // 23.456... this.list.Add(this.pos); g.DrawString("list[0]->"+list[0].x+
678 :
667 :2007/01/08(月) 21:04:41
>>668 ,671,677
うまく動作しました
ありがとうございました
・this.pos.x直出力 ・DrawStringの中身
structでもいけましたよ?
this.pos.x =0の予感!
using System; class Program { static void Main() { String hellostr = "hello"; StringBuilder hellosb = new StringBuilder("hello"); world(hellostr, hellosb); Console.WriteLine("String:{0},StringBuilder:{1}", hellostr, hellosb.ToString()); } static void world(String str,StringBuilder sb) { str = str + "world"; sb.Append("world"); } } このコードで"String:hello,StringBuilder:helloworld"と出力されるのは、 str = str + "world"においては"hello"とは違う "helloworld"が入った別のインスタンスが生成され、 sb.Append("world")においては"hello"と同じインスタンスの中身が書き換わっているから というのであっていますか?
全ての回答が的外れだったのに、 ありがとうございました、かw
>>684 生産性の欠片のない書き込みよりましだぬ
StringBuilderはでArrayで stringはクラスだからってことでしょ
>>688 StringBuilderはArrayではないし、
ArrayやStringBuilderもクラスだ。
インスタンスとオブジェクトの違いを述べよ
>>683 そそ。Stringクラスのインスタンスはimmutableなのよ。
693 :
667 :2007/01/08(月) 21:31:11
>>680 すいません、うまくいったコード書き忘れました
書きなれていないので汚いですけど
public struct dPoint
{
public double x;
public double y;
}
public struct ArrayPosList
{
public ArrayList listx;
public ArrayList listy;
}
private ArrayPosList list = new ArrayPosList();
private dPoint dx_pos;
//コンストラクタ内
this.list.listx = new ArrayList();
this.list.listy = new ArrayList();
...
//timerで呼び出される関数内
....//座標計算
this.list.listx.Add(this.dxy_pos.x);
this.list.listy.Add(this.dxy_pos.y);
int count = this.list.listx.Count;
g.DrawString(""+this.list.listx[count-1],f1,Brushes.Gold,10,this.lineheight*7);
>>681 structでいけました
>>693 だからどこが間違ってたのか言えよ
コードなんて書かれてもわかるわけないだろ
695 :
667 :2007/01/08(月) 21:35:39
>>694 メンバ変数すべて書き直したのでどこが間違ってたかは分からないです・・
分かるようなら代わりに書いてください
目が潰れそうなコードだな
>>695 やってる内容は最初に書いたコードと変ってない気がする。
記述ミスしてただけでは?
698 :
667 :2007/01/08(月) 21:40:58
>>695 おそらくご覧の通り目潰しコードなのでたぶんそうだと思います
昨日始めたばっかりなもので、もう少し精進します
皆さんお騒がせして申し訳なかったです
699 :
667 :2007/01/08(月) 21:42:05
public struct ArrayPosList { public ArrayList listx; public ArrayList listy; } X座標とY座標を別々のcollectionで管理してるのにはワロタww
上のコードで上手くいきましたよ。 ヒントにあるように メソッドに構造体渡してそこで代入して、また別のメソッドでaddしたのかな? それか、コピペのあと書き直し忘れたか。 aaaa.x=100; をコピペして aaaa.x=100; aaaa.y= 0; としようとして aaaa.x=100; aaaa.x= 0;のままとか。これは俺が良くやるミスw
どうやったのかわからないけどうまくいった ってときが一番危険なんだぜ 覚えときな
なにカリカリしてんの?
急に初心者スレに大型新人が現れたので
ねもい・・・ 12時前には寝るはずだったのに。。。
これって、構造体でToStringをオーバーライトして文字列として出力するものを指定しないといけないんじゃないの?
C#を学びたいと思っています。 XNAが楽しそうなので、C#の文法からライブラリの使い方までを学べる本を探しています。 自分はCを学校でやった後、VB6、JAVA、VB.NET、VB2005と使ってます。オブジェクト指向は一通り理解してます。 できればVB2005との比較が掲載されているような文法書だとよいのですが。 これ読んどけってのがあったらお願いします。
>>707 は純粋に興味です。趣味、日曜PG程度でかまいません。
VBわかってるなら、実際にやりながらMSDNのヘルプでいけると思うけどなあ xnaは非常に範囲が狭くて深いのであまり一般的な入門書は役に立たないかも。
一応比較式の書籍はあったと思うが、ちょっと古い。 でもまあ役には立つ。 諦めてC#の本でも大丈夫だと思うけどね。 javaやってたなら特に。
独自のListクラスで行の高さをあるインタフェースを継承したクラスに問い合わせるようにしたいと思ってます。 固定長の場合と行内容によって高さを変える場合と選択できるようにするためです。 実装クラスの名称はFixHeightほにゃららとVariableHeightほにゃららにしようと思っています。 おまいら的にはほにゃららにどんな名前をつけますか?
Listクラスって何だ?ListBoxみたいなものか? それなら普通にFixedHeightListBoxとかつけとけばいいと思うが。
>>711 FixHeight固定長List
VariableHeight可変長List
>>712 ジェネリックスも知らないのか
>>711 FixHeightGets
VariableHeightGets
716 :
711 :2007/01/09(火) 16:24:37
いやList(独自のクラス)の中で行ごとのHeightを管理してるクラスです。 メソッドとしては float Height(int rowIndex) float YPosition(int rowIndex) などがあります。 HeightManagerでもいいんですが、Managerというほどのものでもないので・・・
FixHeightDataSet
FixHeightItems
答えてるのにシカトかよ どこが気に入らないんだよカス
>>722 ColもDataSetもItemsもHeightの管理を行ってるって内容にそぐわないだろうがボケ。
>>723 管理つっても、idxもらって数値返すだけだろカス
>>724 その内容に対してColとかDataSetとかItemsつけるなんてセンスじゃないんじゃないのデベソ。
>List(独自のクラス) ここらへんが……
難しく考えなくてもList<Row>でいいだろ
>>725 ListViewItemCollectionはidxもらったらアイテムを返すけどな
これがおかしいというのか?
インデクサを使えと言いたいんじゃないか?
>>729 だから上の人はItemの管理をそのクラスに任すんじゃなくてItemにおうじたHeightの管理をそのクラスで行うといってるんだろうが。
勝手に仕様変えてこれでいいだろとは何事だアホタレ。
昨日か一昨日くらいのJavaスレの二の舞になってきました
冬だからな
最近どこもかしこもこんな感じなのはそういった理由か
ゆとり世代、馬鹿の壁。
あっちでも「バカの壁」使ってた奴か?
737 :
デフォルトの名無しさん :2007/01/10(水) 00:35:03
System.Runtime.InteropServices の Marshal クラス調べれ。 あと DllImport に手を出すなら MSDN のアンマネージ コードとの相互運用以下を熟読、これ必須。
739 :
まよい羊 :2007/01/10(水) 08:26:42
Visual Studio 2005にてC#であるアプリを作っているのですが、日本語環境では 問題なく動作。 ただ、中国語OSでCLICKONCEでDownloadして利用すると、Corelab.Oracle原因 でエラーが出ます。 多分、Oracleクライアント使うと問題無く動くのですが、どうしてもクライアント側 の運用に負担をかけたくなく、corelab.oracleで完結させたいと考えています。 このエラー回避について何かご存知の方がいれば、お知恵を拝借したいと思います。
740 :
デフォルトの名無しさん :2007/01/10(水) 08:43:49
俺新年になってからしみじみと思ったんだが、 「日東紡」と「ニット帽」てすげえ似てるよな、と・・・
ニート坊
つかおまいら答え返すときは2chだからといってもちゃんと質問の意図を汲み取ってからしなはれ。 前述の質問でもちゃんと読んでたらそうは返さないだろうっての多すぎ。 ねたにしてもねたになりきれてないし。
ちゃんとした質問にはちゃんとした答えが返ってると思うが
継承とインターフェースの違いを述べよ
遺伝と学習
メロンとバナナどっちがみかんか
りんご!
ちんぽと右手
でっかいみかんと、でっかいメロン、その上にはでっかいバナナ
もう少し真面目に。
751 :
まよい羊 :2007/01/10(水) 19:01:03
質問がわかりにくいか、難しかったのでしょうか?
中国語OS使ってるのはこのスレにあなただけみたいですよ。
CoreLab使ってかつ中国語OSとなるとレアだねやっぱり。 あきらめてOracleクライアントを入れるか、WebサービスにしてDBアクセスはサーバーでやらせるか・・
はたしてCoreLabの動作環境とか満たしているのかな? ところで… 〜でエラーが出ます。 これは何も言ってないのと同じ。 具体的にどんなエラーが出たか書くべき。
質問はこんな感じでどうかな? Visual Studio 2005のC#で、CoreLab.oracleを使ってOracleにアクセスするアプリを 作っているのですが、日本語Windowsでは問題なく動作します。 しかし中国語Windows上では、CLICKONCEでDownloadして利用するとCorelab.Oracleが原因 で 〜〜エラーが出ます。 多分、Oracleクライアント使うと問題無く動くと思いますが、どうしてもクライアント側 の運用に負担をかけたくなく、corelab.oracleで完結させたいと考えています。 このエラー回避について何かご存知の方がいれば、お知恵を拝借したいと思います。
で、何のエラーがでるわけ?
中国公安部エラー
ライセンス登録されていませんエラーじゃないのかw
そういえば、中国語というか日本語以外の環境で動かすと日付などのフォーマットが変わるから DateTimeの引数なしのToString()とか意識してなくて挙動が変わったりとか。 CoreLab.oracleは使ったことないのでよくわからん。 漢字が微妙に違ってるけどなんとなく読めてなんとなく意味が通じるのがちょっと楽しい。 漢字のみの部分が多言語対応されてないリソースで日本語が表示されてるのか ちゃんと中国語になってるのか一瞬わからなくて困ったりする。
既に起動してあるWindows Live Messengerの人との会話の窓を アプリ上のボタンを押下することによってアクティブ化し タイマーを使って一定間隔でメッセージを自動送信したいのですが可能でしょうか? もし可能だとしたらどのような方法でメッセの窓をアクティブ化するかご教授ください。 下記が途中まで作ったコードです。タイマー周りは後から実装予定です。 private void button1_Click(object sender, EventArgs e) { // textBox1 で指定した「クラス名」の Window をアクティブにする IntPtr hwnd = FindWindow(textBox1.Text, null); if(hwnd != IntPtr.Zero) { if(IsWindowVisible(hwnd)) { SetForegroundWindow(hwnd); // アクティブにする } } SendKeys.Send("保守{ENTER}"); } この方法だとnotepadなどはアクティブ化できましたが、他のTeraPadやメッセなどは まったく動きませんでした。
761 :
760 :2007/01/11(木) 07:57:38
要はあるボタンを押したら タスクをメッセ窓に切り替えて自動でメッセージ送信したいということです。
SetForegroundWindow()には条件が書いてあったろう SetWindowPosも使ってみ
ほんとにインターフェースとクラスの区別をしたせいで実装がすごいめんどくさくなるときがある・・・ クラス自体にはメソッドの規約などの概念をもたせないで実装についての定義のみを記述するように分離すればインターフェースとクラス共存できて実装の多重継承とか出来るのに・・・(´・ω・`)
WindowsFormでいろいろFormをいじってる最中に描画をしないで、まとめて描画させることって出来ますか?
>>763 >ほんとにインターフェースとクラスの区別をしたせいで実装がすごいめんどくさくなるときがある・・・
共通して使うメソッドをまとめて別クラスつくればいいんじゃないの?
>>764 SuspendLayout/ResumeLayout
C#でJavaのstatic import と同じようなことを行わせたいのですが、 どのように記述すれば良いのでしょうか? using キーワードで出来そうで出来ないみたいのですが。。。
>>766 さんくすこ。
ついでにGenericsだと
T Max<T>(T lhs,T rhs){
return Max(lhs,rhs);
}
みたいなことってかけない?
>>768 T Max<T>( T lhs, T rhs ) where T : IComparable
{
if( lhs.CompareTo( rhs ) > 0 )
return lhs;
else
return rhs;
}
T Accumurate<T>(T lhs,T rhs){ return lhs+rhs; } みたいなのは?
ルビーの指輪か
>>767 あえて付けてない
というかJavaの暴挙
ふー、鯖が移転していることにやっと気づいたぜ。
>>773 thx。やっぱり無いのか。
これまでの有名な言語から色々インスパイアして出来上がった言語だからか、
移行しやすいのは良いけど、半端に似ているので混乱しますね。
悪いところまで真似したら新しく言語を作る意味なし
777 :
デフォルトの名無しさん :2007/01/12(金) 00:18:15
P/Invoke を使ってネイティブ DLL 内のメニュー文字列を取得しようと していますが、LoadMenu で 0 が返ってきて取得できていません。 どこかおかしいところはありますでしょうか。 [DllImport("user32.dll", EntryPoint = "LoadMenu")] static extern IntPtr LoadMenu(IntPtr HInstance, string lpString); [DllImport("user32.dll")] static extern bool GetMenuItemInfo(IntPtr hMenu, uint uItem, bool fByPosition, ref MENUITEMINFO lpmii); [StructLayout(LayoutKind.Sequential)] public struct MENUITEMINFO { public uint cbSize; public uint fMask; public uint fType; public uint fState; public int wID; public int hSubMenu; public int hbmpChecked; public int hbmpUnchecked; public int dwItemData; public string dwTypeData; public uint cch; public int hbmpItem; }
778 :
デフォルトの名無しさん :2007/01/12(金) 00:19:43
つづき public static string LoadMenu(string dllname, string menuname, uint menuID) { // DLL を開く IntPtr lib = LoadLibrary(dllname); IntPtr hMenu = LoadMenu(lib, menuname); MENUITEMINFO mif = new MENUITEMINFO(); mif.cbSize = (uint)Marshal.SizeOf(typeof(MENUITEMINFO)); mif.fMask = 0x40; mif.fType = 0; mif.dwTypeData = null; bool ret = GetMenuItemInfo(hMenu, menuID, true, ref mif); // DLL を開放 FreeLibrary(lib); return mif.dwTypeData; } Console.WriteLine(ReadDLLResources.LoadMenu("res_ja.dll", "32409", 32410));
LoadMenu の第二引数、実はリソース名じゃなくてリソース識別子だったりしないか?
780 :
デフォルトの名無しさん :2007/01/12(金) 00:38:12
>>779 レスありがとうございます。
hogehoge.rc ファイルの
32409 MENU
BEGIN
POPUP "ポップアップ"
(略)
↑の32409 を指定したのですが、これではないですか?
C++では取得出来た?
>>781 C++ では試してないです。C# しかできないので orz
""でくくるなら両方やる
>>783 どもです。リソース識別子を string → uint 渡しにすることで、LoadMenu で
メニューのハンドルは取得できました。
ですが、GetMenuItemInfo でメニューの文字列はまだ取得できません。
mif.dwTypeData にメニューの文字列が入っているはずなのですが・・・
>MFT_STRING 型のアイテムの情報を取得するには、まずこのメンバに 0 (NULL) を >指定して GetMenuItemInfo 関数を呼び出します。このとき、 cch メンバにはアイテ >ムのテキストを格納するのに必要なバッファのサイズ(Unicode 版では文字数)が格 >納されます。バッファを確保した後、このメンバにバッファアドレスを指定して再び >GetMenuItemInfo 関数を呼び出します。
GetMenuItemInfo は3番目がtrueだったら2番目は何番目かの数字だぞ ID渡すならfalseで
というか GetMenuString のほうがてっとりばやかろ GetMenuItemInfo だと微妙に微妙だし
>>787 お返事ありがとうございます!GetMenuString を使ったら文字列が取得できました!!
色々探しているときに GetMenuString は obsolete だから GetMenuItemInfo を
使えと書いてあったので、GetMenuItemInfo でやろうとしていました。
今後の人の参考に、コードを書いておきます。
ありがとうございました。
[DllImport("user32.dll", EntryPoint = "LoadMenu")] static extern IntPtr LoadMenu(IntPtr HInstance, uint lpString); つづき [DllImport("user32.dll")] static extern bool GetMenuItemInfo(IntPtr hMenu, uint uItem, bool fByPosition, ref MENUITEMINFO lpmii); [DllImport("user32.dll")] static extern int GetMenuString(IntPtr hMenu, uint uIDItem, StringBuilder lpString, int nMaxCount, uint uFlag); public static string LoadMenu(string dllname, uint menuname, uint menuID) { // DLL を開く IntPtr lib = LoadLibrary(dllname); IntPtr hMenu = LoadMenu(lib, menuname); StringBuilder sb = new StringBuilder(); GetMenuString(hMenu, menuID, sb, 256, 0x00000000); // DLL を開放 FreeLibrary(lib); return sb.ToString(); } Console.WriteLine("'" + ReadDLLResources.LoadMenu("res_ja.dll", 32409, 32410) + "'");
private void listBox1_DoubleClick(object sender, EventArgs e) { Process sprocess = (Process)((ListBox)sender).SelectedItem; Hide(); if(sprocess == null) { Debug.WriteLine("sprocessがnull"); } else { SetForegroundWindow(sprocess.MainWindowHandle); sousin(); } Show(); } private void timer1_Tick(object sender, EventArgs e) { Hide(); if(sprocess == null) { Debug.WriteLine("processがnull"); } else { SetForegroundWindow(sprocess.MainWindowHandle); sousin(); } Show(); } リストボックスのウィンドウのタイトルをダブルクリックして画像を送信するプログラムを書いてるのですが ダブルクリックして取った値 プロセス変数 sprocess をタイマー処理の中でも使う方法ってありますか? このままですと、当然ですがエラー 1名前 'sprocess' は現在のコンテキスト内に存在しません. と出てきてしまいます。
2chがなくなりそうなのに、のんきだなw
VSTFSでチームビルドを行うと以下のようなエラーが出てしまうんですが どなたか解決策等ご存知の方いらっしゃいませんか? Buildフォルダのパーミッションとかは問題ないはずです ターゲット InitializeEndToEndIteration: UpdateBuildNumberDropLocation BuildNumber='BuildTest_20070112.11' DropLocation='\\dev01\VSTFSWork\BuildTest_20070112.11' C:\Program Files\MSBuild\Microsoft\VisualStudio\v8.0\TeamBuild\Microsoft.TeamFoundation.Build.targets(165,5): error : 許可されていない操作を実行しようとしました。 プロジェクト "TFSBuild.proj" 内のターゲット "InitializeEndToEndIteration" のビルドが終了しました。 -- 失敗 プロジェクト "TFSBuild.proj" のビルドが終了しました。 -- 失敗 ビルドに失敗しました。 C:\Program Files\MSBuild\Microsoft\VisualStudio\v8.0\TeamBuild\Microsoft.TeamFoundation.Build.targets(165,5): error : 許可されていない操作を実行しようとしました。 0 警告 1 エラー
>>790 よくわからんが
Process sprocess = (Process)((ListBox)sender).SelectedItem;
をタイマーの方にも書けばいいんじゃないの?
794 :
デフォルトの名無しさん :2007/01/12(金) 19:36:38
C#で全角英数字を半角英数字に変換する方法をどなたか教えてもらえないでしょうか。 Regex.Replace()を使えばできそうな気もするんですが、書き方がよくわからない。 VisualBasic.StrConv()はいらんものまで変換してしまって…
回答ありがとうございます! 1回ダブルクリックしたらそれ以降はタイマー処理で自動でやっていきたいので それだと無理なんです。 private void timer1_Tick(object sender, EventArgs e) { Process sprocess = (Process)((ListBox)sender).SelectedItem; Hide(); if(sprocess == null) { Debug.WriteLine("processがnull"); } else { SetForegroundWindow(sprocess.MainWindowHandle); keysousin(); } Show(); } と書いた場合、 Process sprocess = (Process)((ListBox)sender).SelectedItem; の行で InvalidCastException はハンドルされませんでした。 型 'System.Windows.Forms.Timer' のオブジェクトを型 'System.Windows.Forms.ListBox' にキャストできません。 と出てしまいます。
604 名前:デフォルトの名無しさん[sage] 投稿日:2007/01/05(金) 19:29:13 Regex.Replace / MatchEvaluator / StrConv 組み合わせる
603 名前:599[さんくすsage] 投稿日:2007/01/05(金) 19:26:22
>>600 さんくす。とりあえず
String.Normalize(NormalizationFrom.FromKC)
で、全角英数空白記号が半角になった。FromKDとの違いがワカラン...
副作用ってどんなことか気になるが、とりあえずOK?。
>>601 今回は数字のみだったので、ループで済ましてたが、
英字や記号までとなると、なんか馬鹿らしくなる。
だれかPHPのmb_convert_kana関数を移植してくれんだろうか?
>>796 上手くいかないよと言う前に。
エラーメッセージを良く見ろ。
>>796 sprocessをメンバに格上げすれば?
>>796 ああ、失敬。(Process)((ListBox)sender).SelectedItemじゃなくて
(Process)listBox1.SelectedItem か。
つかそれくらい適当に書き換えてくれよ・・・
多分、senderを理解してないんだろう。
>>799 すみません。読んだのですが。。。キャストの問題ですか・・?
>>800 static Process sprocess = (Process)((ListBox)sender).SelectedItem;
ってことですか?
>>802 (Process)listBox1.SelectedItemですか?
>>803 その通りです。ちょっと勉強します;
sprocessをタイマのtagにでも突っ込んどけばいいんじゃね?
静的フィールドにしてしまうよりはずっとマシだが
>static Process sprocess どこからこの発想が出てくるんだ?
ニュース速報でこんなのが出るんだが… だれが遊んでるの? 17 名前:赤羽地方裁判所 ★[停止] 投稿日:停止 差し押さえました。
>>806 タイマーのtag に sprocess といれましたがダメでした。
>>807 staticをつければいいのかと・・
最初の1回のみのダブルクリックによって発生したイベントでとった値をそのまま
タイマーで1分ごとで使いまわす というのは無理ってことでしょうか・・。
form1(多分この名前だろ)のメンバーにしろよ。 staticじゃ無くて。
>>821 sprocessをform1クラスのメンバー変数にしろってことですよね?
Process sprocess = (Process)((ListBox)sender).SelectedItem;
ごと外に出したのですが
名前 snder' は現在のコンテキスト内に存在しません
と出てきてしまいました orz
>>813 悪いこと言わないから何か適当な入門書買って
一から勉強し直したほうがいいと思うよ。
これ以上はこのスレで質問することじゃない。
>>814 俺も同意見
>>813 明日本屋か、図書館行ったほうがいいよ。
お勧めの入門書とかは聞かないでね。
入門は遥か前なので…
816 :
794 :2007/01/12(金) 21:06:26
別スレで1週間前にも同じ質問した人がいたんだな。失礼。
>>797 の方法ですませた。
string replaced = Regex.Replace(str, "[a-z0-9]", new MatchEvaluator(RegexReplaceEvaluator));
///
static public string RegexReplaceEvaluator(Match m)
{
return Strings.StrConv(m.Value, VbStrConv.Narrow, 0);
}
みなさんとても優しいですね
>>816 "[a-z0-9]"
これじゃ一文字ずつの置換になって効率悪い希ガス
>>818 816でいいと思うよ。
何か代替案あるなら教えて!
[a-z0-9]+
821 :
代替案 :2007/01/12(金) 23:31:02
string 全角To半角(string text){ StringBuilder sb = new StringBuilder(); for(int i = 0; i < text.Length; i++){ switch(text[i]){ case 'A':sb.Append('A');break; case 'B':sb.Append('B');break; ...以下略 }}
('A');
俺ならこうする static String ToHankaku(String str) { if (str == null) return null; StringBuilder sb = new StringBuilder(str.Length); foreach (Char c in str) { if ('0' <= c && c <= '9') sb.Append((Char)(c - ('0' - '0'))); else if ('A' <= c && c <= 'Z') sb.Append((Char)(c - ('A' - 'A'))); else if ('a' <= c && c <= 'z') sb.Append((Char)(c - ('a' - 'a'))); else sb.Append(c); } return sb.ToString(); }
('A' - 'A')));
顔文字だらけだな
とりあえずA-Za-zだけ private string ToNarrow( string str ) { StringBuilder sb = new StringBuilder( str.Length ); for( int i = 0; i < str.Length; i++ ) { short s = (short)str[i]; if( ( s <= -198 && s >= -223 ) || ( s <= -166 && s >= -191 ) ) { s += 288; } sb.Append( (char)s ); } return sb.ToString(); }
マニアックに行くぜ A-Za-z0-9で return new string(Array.ConvertAll<char, char>(str.ToCharArray(), delegate(char c) { return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') ? (char)((int)c - 0xfee0) : c; })));
0xfee0引かんと288足したらええやん
'A' &
('A' <=
<= '9') <= 'Z') <= 'z')
>>829 桁あふれを期待するコードは好ましくないな
いやまあこんなネタコードに好ましくないも何もないけど
834 :
813 :2007/01/13(土) 02:30:46
みなさんありがとうございました。 色々勉強しなおしてみます。
C#に限った質問ではないのですが、 .NETでグラフを書くプログラムを作っているのですが ラベル用にn個の要素を「いい感じ」に色分けするColorの計算方法はないでしょうか? いまのところ色相をn等分してHSV→RGB変換していますが、いまいち目立ちません
隣り合うのは別の色になるように3原色n/3回ずつ使うのは?
837 :
813 :2007/01/13(土) 03:36:45
すみません。最後にひとつだけ教えてください。 String kaiwamozi ="会話"; private void updateTaskList() { System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses(); listBox1.BeginUpdate(); listBox1.Items.Clear(); foreach(System.Diagnostics.Process p in processes) { if(p.MainWindowHandle != (IntPtr)0 && p.MainWindowTitle != "") { // if(Regex.IsMatch(p.MainWindowTitle, kaiwamozi)) { listBox1.Items.Add(p); // } } } listBox1.EndUpdate(); } タスクのウィンドウを全て拾ってリストボックスに表示させたいのですが 例えばMSNメッセを開いてた場合に メインウィンドウ 誰かとの会話窓その1 誰かとの会話窓その2 とあった場合に、一番手前側にあるウィンドウしか拾ってくれないのですが これを拾う方法ってありますか?
グラフっていってもいろいろあるな。
色相を順番に変えるって一番目立たない方法を…
840 :
デフォルトの名無しさん :2007/01/13(土) 04:01:07
841 :
840 :2007/01/13(土) 04:10:37
わりい 全然普通に動いたわ 何勘違いしてたんだろ俺
>>835 RssBanditのコードにOneNoteのタブの色分けを真似してるとこがあった
アートのプロの配色だけにとてもきれい
>>837 EnumWindows 関数とか使うしかない
844 :
813 :2007/01/13(土) 08:36:02
>>837 ありがとうございます!早速調べてみます
スレッドの保有してるウィンドウを列挙するやり方はあるから、 プロセスの中のスレッドを列挙すれば行けない?←やりかたしらんけど。
その手のやつは初心者の練習台としては難しすぎて全く向いてない ちゃんと勉強してからにしたほうがいいよ
初心者は分からないからへんなところに突っ込んでいきがち。
848 :
デフォルトの名無しさん :2007/01/13(土) 12:26:25
ったく… また祭りかよ〜 すっかり騙され値待った。 安心してスレたぁてよっと。
849 :
835 :2007/01/13(土) 12:54:23
>>842 さん
情報ありがとうございます、ソースを見ましたが固定で色の配列をもっていますね・・
ある程度は固定で持って足りなくなった時に中間を求めるやり方のほうがいいかなぁ
やってみてわかってると思うけど中間職つかったら 目立たない。
そんなにたくさんの系列を一緒に表示するようなグラフで 色分けで区別するのは無理があると思う
>>849 収束に向かっているようですが蛇足で。
人間の目(感覚)にとって適切な色を出力するということなので、固定の配列を用意するというのは、理にかなった正攻法かと思われ。
固定の数を超えた場合は、固定の配列をループして再利用。ただしその色の濃淡を変えていくというのがよいのでは?(もしくは網掛けの利用とか)
853 :
デフォルトの名無しさん :2007/01/14(日) 23:34:34
c#って、.netじゃない普通のvbと比べてどれくらいの速さになりますかね? やっぱり、ネイティブなvbの方がc#よりも早いのですか?
勘違いしてる人が多いけど,.NETのアプリは実行時にネイティブにコンパイルされて から実行されるから,ネイティブじゃないからから遅いってことはないよ
>ネイティブなvb って表現に違和感アリ
まあインタプリタだろうが何だろうが最終的にはネイティブにはなる
どこからインタプリタの話が出てくるんだ
速さの比較、てことになると、 どういう部分の処理かによるんじゃね? WinFormまわりか、純粋な計算なのか
ネイティブで動いてるのかマネージドで動いてるのか わからんくせに気にする奴大杉
起動してしまうと.NETの方が一般的に速い。 起動が遅いことについては要因が二つあって、ひとつはJITによるもの。これに関してはngenで改善する。 もうひとつ我慢ならないぐらい遅くなるのは必要なメモリ使用量と仮想記憶サイズの合計が大きいことで、 起動時にはその多くを実メモリに一旦ロードするためにページングなどが多く起きる。 これによる遅延が相当に大きい。 起動してしまえば実際に必要な箇所は限られるので実メモリ(ワーキングセット)は減少し安定してくる。 この問題を解決するには基本的に実メモリを増やすしかない。 そしてユーザーの多くのPCは旧VBはそれなりに動くメモリは搭載しているが.NETには足りないサイズしか搭載していない。
>>860 マネージドの対義語はアンマネージドであって、ネイティブではない。
べつに対義語じゃなくてもいいと思うが。
意味合い伝わればいいだろ。けつの穴のちぃせぇ野郎でございますね
対義語と対意語の違いがわからないやつがいるな
対意語 の検索結果のうち 日本語のページ 約 105 件中 1 - 48 件目 (0.21 秒)
VBったってインタープリタでやってたころの話じゃなかろ?
既存のネイティブなアプリのコントロールを 同じスレッドに潜り込み済みのC#製dllからサブクラス化したいと考えています。 常套手段のSetWindowLong/CallWindowProcで実現できたのですが、 その場合注意することってありますか? フィールドにおいたコールバックのデリゲートがGCされたり なんてやばい局面は想定されたりするんでしょうか。
869 :
デフォルトの名無しさん :2007/01/15(月) 12:23:52
教えてください。 switch文にて、いくつかの条件で指定するには どうすればいいのでしょうか たとえば case 1 or 2 or 3: ↑1と2と3を指定したいのです。
>>869 case 1:
case 2:
case 3:
文;
break;
case 4:
出来ました。 ありがとうございます
System.IntPtr型をbool型に変換するのはどうやればいいんでしょうか? 中身が入っていればtrueを返すような感じでやりたいのですが。
>>872 System.IntPtr p;
// ...
bool b1 = p != System.IntPtr.Zero ? true : false;
bool b2 = System.Convert.ToBoolean(p.ToInt64());
>>873 ありがとうございます。
b1とb2には何が入るんでしょう?
b2にbool型のpの内容が入るんですか?
>>873 普通に
bool b1 = p != System.IntPtr.Zero;
でいいんじゃね?
>>875 b1もb2もお前さんの期待しているもの(>872)が入る
ありがとうございましたー
>>873 何この記述。簡略系って奴か?
すごいねびっくり
b1の値は、pの値の変化に動的に変化するの?
それとも、この代入式を入れて更新しないとだめなの?
>>879 常識だ
もう少し勉強してから出直してこい
882 :
868 :2007/01/15(月) 17:32:24
クラス内だとeventを同じ型のデリゲートを引数に持つメソッドに渡せるんだね(´・ω・`) ちょっと便利。
885 :
813 :2007/01/15(月) 19:14:13
質問です。文法の本を読んで勉強してきましたがどうしても分からないので教えてください
ttp://www.office-matsunaga.biz/cs/description.php?id=17 を参考にしてリストボックスのに列挙してあるウィンドウ名がダブルクリックされたら
それをフォアグラウンドにセットしてキー送信というのを作っているのですが
private void Form1_Load(object sender, EventArgs e) {
updateTaskList();
timer2.Interval = 5000; //5秒毎にリストボックス更新
timer2.Enabled = true;
}
つづく
886 :
813 :2007/01/15(月) 19:15:16
private void updateTaskList() { System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcesses(); listBox1.BeginUpdate(); listBox1.Items.Clear(); EnumWindows(new EnumerateWindowsCallback(EnumerateWindows), 0); listBox1.EndUpdate(); } private void listBox1_DoubleClick(object sender, EventArgs e) { Process process = (Process)((ListBox)sender).SelectedItem; Hide(); if(process == null) { Debug.WriteLine("processがnull"); } else { SetForegroundWindow(process.MainWindowHandle); keysousin(); } Show(); } private void timer2_Tick(object sender, EventArgs e) { updateTaskList(); } Process process = (Process)((ListBox)sender).SelectedItem; この部分で InvalidCastExeption例外が発生し、InvalidCastExeptionはハンドルされませんでした。 型 'System.String' のオブジェクトを型 'System.Diagnostics.Process' にキャストできません。 と出てきてしまいます。どうしたら例外を起こすことなく処理が実行できるか教えてください。
ListBoxには文字列をいれてんだろ?キャストできるわけないじゃない
>>885 文字列をプロセスにキャストできるほど万能じゃない
キャストが何かおぼえたほうがいいよ!
じゅもんをとなえることだな
892 :
813 :2007/01/15(月) 19:42:15
あ、確かに。。出直してきます;; みなさんありがとうございました。
893 :
813 :2007/01/15(月) 19:49:06
public int EnumerateWindows(IntPtr hWnd, int lParam) { StringBuilder sb = new StringBuilder(0x1000); String kaiwamozi = "会話"; if (IsWindowVisible(hWnd) != 0){// ウィンドウが可視の場合 if (GetWindowText(hWnd, sb, 0x1000) != 0){ // ウィンドウのキャプションを取得 String S1 = sb.ToString(); String S2 = "(" + hWnd.ToString() + ")"; if(Regex.IsMatch(S1, kaiwamozi)) {//これでメッセウィンドウだけ引っ張ってくる。 Console.WriteLine(S1); //ウィンドウのタイトル出力. listBox1.Items.Add(S1); } } } // 列挙を継続する為に0以外を返す return 1; } これがリストボックスにItems.Addしてる部分なんですが。 ウィンドウの名前に関連付けてプロセスを取る方法ってありますか?
>>893 チャットとかのログを自動で収集したいのか?
そんあことして、何がしたい?ストーカーか?
無駄なことしすぎ。意味分かって書いてる? せっかくプロセスの一覧とってるんだから使えよ。 Process[] processes = System.Diagnostics.Process.GetProcesses(); foreach(Process p in processes) { if(Regex.IsMatch(p.MainWindowTitle, kaiwamozi)) { listBox1.Items.Add(p); } }
896 :
813 :2007/01/15(月) 19:58:15
>>894 Windows liveメッセって多人数で同じ窓で会話してる時
長時間誰も発言なしで放っておくと参加者が削除されてしまうので
自動で一定時間ごとにメッセージを送信するプログラムを作ってるのです。
多分
>>896 には無理だと思うよ。
何故プロセス取ってるの?
プロセスとってそこからどうするつもり?
メッセージ送るだけならプロセスいらんやん
899 :
813 :2007/01/15(月) 20:07:51
複数の相手とメッセしてる時に
ListBoxにウィンドウ開いてる分だけ表示して任意の窓をダブルクリックしたら
そのプロセスに対して自動キー送信を一定時間ごとに実行したいということです。
>>895 それですと、メッセウィンドウを複数開いていても1つしかとってきてくれないのです。
name1 - 会話
name2 - 会話
と開いていた時に一番手前側のやつしかとってこない。
プロセスとる必要がどこにあるよ? ウィンドウハンドルだけで十分じゃないか
アホの予感・・・
SKYPEじゃダメなのか?
ToStringをオーバーライドした構造体でも作ってぶち込んどけ
初心者って出来ない方向に向かって突き進み 出来ないと判ってから、「その手段で」解決する方法を 質問してくるから問題だ…
905 :
813 :2007/01/15(月) 20:16:03
ウィンドウハンドルとはMainWindowHandleのことですよね? リストボックスに会話開いてる分だけウィンドウのタイトルを列挙し それをダブルクリックしてフォアグラウンドにしてSendKeys.send()を 同時にしたいので メインウィンドウだけ取ってくる方法じゃ不可能な気がするのですが。
誰がメインウィンドウのハンドルを取れといった 手前でEnumWindowsしてるんだからハンドル全部覚えとけばいいだろうが
祭りの予感・・・
はっきり言って初心者の手に余るもの作ろうとしているよ。 プログラムじゃなくて、 別の方法考えたほうがいいんじゃないか?
もしかしてメッセンジャーを操作するためにC#はじめたの?
910 :
813 :2007/01/15(月) 20:27:33
>>906 ごめんなさい。覚えておくというのは
StringBuilderで変数宣言したものに対して
数分だけforなどでまわして配列に格納しておいてそれを使うということでしょうか?
>>908 よく言われますし自分でもそう思います。
>>909 そういうわけではありません。
向いてないからやめとけ
>>905 sendkeyならアクティブにせにゃならんけど
メッセウィンドウ内のテキストボックスなどのハンドルわかってるんなら
SETTEXTなんかで文字列送ればアクティブにしなくていいよ
SendKeysだとアクティブにしなければならないが
アクティブって状況に応じて変化するから、失敗する場合あるしね
EnumChildWindowかなんかで、テキストボックスなどのハンドルと
そのフォームのキャプションを関連付けてリストに保存しておけば
もっと簡単にできるぞ
まずWindowsの基本的な事を勉強した方がいいかと
914 :
813 :2007/01/15(月) 20:31:53
>>911 ごめんなさい。どうしてもやりたいのです。。
>>912 貴重な意見ありがとうございます!
SETTEXTというのがあるのですね。早速調べてみます。
その前に!!!!! windows メッセのスレで質問したほうがいいよ… 自動で切断されないようにするにはどうしたらいいのか。
自動で切断しないオプションがある予感
917 :
813 :2007/01/15(月) 20:37:36
驚く所が違いました。
settextってただのあのせっとてきすとですね;;
EnumChildWindowというので特定のWindowのテキストボックスのハンドルを取れるのですね。
ありがとうございます!
>>915 なるほど・・
918 :
915 :2007/01/15(月) 20:41:00
ぐぐったが自動退席になるまでの時間設定できるみたい。 あと自動退席のチェックボックスがありそうな感じだった。
WindowsというかWindowに関する碌な知識もなくそんなことをしようなんておこがましいとは思わんかね
このスレじゃメッセ使ってない人しかいないんだな。
921 :
813 :2007/01/15(月) 20:45:56
複数人同時に参加してるメッセで誰かが退席中になれば そのウィンドウで長時間、誰からのメッセージの送信がなくても 保持されるという訳ではないですよね?だから作ってるのです。 あと個人的に退席中と表示するのがイヤなので・・・。
922 :
912 :2007/01/15(月) 20:47:26
おれも初心者だからくじけずかんばろうぜ 1.メッセウィドウのハンドルをすべて取得:EnumWindow 2.1のメッセウィンドウ内のテキストボックスなどのハンドルをすべて取得:EnumChildWindow、FindWindowExなど 3.リストボックスに、メッセウィンドウのタイトルと2のハンドルを格納 4.メッセージを2のハンドルに送る class メッセWndItem { string hwnd="";//テキストボックスなどのハンドル string Title="";//メセウィンドウのキャプション } List<メッセWndItem> lbメッセWndList=new List<メッセWndItem>(); const uint WM_SETTEXT = 0x000C; string msg="自動ログ:ただいま離席中"; //メッセージを送る SendMessage(lbメッセWndList[lbメッセWndList.SelectItem.Index].hWnd, WM_SETTEXT, 0, (int)Marshal.StringToHGlobalAnsi(msg));
退席中にしなけりゃいいじゃん?
924 :
813 :2007/01/15(月) 20:54:28
>>912 ありがとうございます。がんばります。
そんな方法があるのですか・・・。調べながらちょっとやってみます!
>>923 恐らく誰かが(自分も含む)退席中になってようがなかろうが、
自動で参加者が削除されるのだと思います。
そして発言なしで参加者が自動的に削除されるまでの時間は4分という情報もあります。
925 :
912 :2007/01/15(月) 20:54:53
一部訂正 ListBox lb=new ListBox(); //メッセージを送る SendMessage(lbメッセWndList[lb.SelectItem.Index].hWnd, WM_SETTEXT, 0, (int)Marshal.StringToHGlobalAnsi(msg));
見づらいからいちいち煽りにレスつけんなよ
本間教授がここにも
928 :
デフォルトの名無しさん :2007/01/15(月) 23:16:20
デスクトップのサイズはどうしたら取得できますか? 1024×768 みたいな解像度で設定されている値です。
Screen.PrimaryScreen.Bounds
930 :
928 :2007/01/15(月) 23:27:24
さっそくの回答ありがとうです。 2chの人は親切だって話は本当なんですね。
SystemInformationもあるな
先生方、.NetFramework のコントロールって Java みたいに Action って無いの? 右クリックメニューの中のメニューアイテムと、 メニューバーの中のメニューアイテム、いちいち Enabled とかの 同期を取るように書くの、めんどくさいよ・・・。
>>934 MenuItem.Selected=ContextMenuItem.Selected;
string A ="hogehoge"; string B ="hoge"; int C = A.IndexOf(B); のように、文字列を検索するコードを書いたのですが、 'System.NullReferenceException' のハンドルされていない例外が ConsoleApplication.exe で発生しました。 と表示されます。どうすればエラーは消えますか?
それだけのコードじゃ例外は発生せん。別の箇所じゃろ
string A の内容がループで毎回入れ替わるようになっているんですが、もしかしてそれが原因でしょうか?
追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 って出てます。 ループの回数も結構多いので、実行して終了したあと少し時間を置いてエラーが出ます。
A が null なんだろ
if(A==null){break;}を入れたらうまくいきました。 ありがとうございました。
942 :
813 :2007/01/16(火) 08:26:59
912さんの教えいただいた SendMessageメソッドの第一引数 lbメッセWndList[lb.SelectItem.Index].hWnd をどのように書けばいいか分かりません。 教えてくださいm( )m とりあえず適当にテキストボックス作って SendMessage(this.textBox1.Handle, WM_SETTEXT, 0, (int)Marshal.StringToHGlobalAnsi(msg)); とし、SendMessage送ることだけはできるようになりました。
Dictionary<int, IntPtr>かDictionary<string,IntPtr> あと、そのコードリークしてるよ? StringToHGlobal***はちゃんとIntPtrで受けて SendMessageのあとにFreeHGlobalしろ
下のような、List<>を継承したクラスにプロパティを追加したものを、XmlSerializerを使ってXMLへシリアライズしたいんだけど、XMLへプロパティ(ID)が出力されません。なにか属性指定などが必要ですか? --- Listのサブクラス public class HogeList : List<Foo> { private int id = 0; public int ID { get { return this.id; } set { this.id = value; } } } --- 出力結果(かなり省略版) <?xml> <Hoge> <Foo>...</Foo> <Foo>...</Foo> </Hoge> </xml>
>>884 こんな感じ
class EventTest {
public event VoidDelegate Left;
public event VoidDelegate Right;
void ExecEvent(VoidDelegate deleg) { deleg(); }
public void DoEvent() {
ExecEvent(Left);
ExecEvent(Right);
}
}
static void OnRight() {
Console.WriteLine("Right!");
}
static void OnRight2() {
Console.WriteLine("Right2!");
}
static void OnLeft() {
Console.WriteLine("Left!");
}
static void Main() {
EventTest et = new EventTest();
et.Left += OnLeft;
et.Right += OnRight;
et.Right += OnRight2;
et.DoEvent();
C:\Documents and Settings\Owner\Local Settings\Temporary Internet Files の中にあるファイルはSystem.IO.File.CopyやSystem.IO.File.Moveで移動させることはできないんでしょうか? ファイル名の指定が間違ってるのかな・・・ また、他にもファイル移動の方法がありましたらご教授ください。
そのフォルダは仮想フォルダみたいなもんだからじゃ? コマンドプロンプトからTemporary Internet Filesに移動してdirしてみたら
>>942 [DllImport("user32.dll", CharSet=CharSet.Auto)]
static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, String lParam);
と定義すればわざわざ自前でマーシャラつかわなくてすむよ。
>>945 イベントアクセサ(add;remove;)を使ってLeftイベントを定義してみたら
「イベント 'EventTest.Left' は += または -= の左側にのみ表示されます。」とエラーになった。
当たり前といえば当たり前だけどなんか気持ち悪い
dirってフォルダ表示ですか?うまく表示されないんですけど・・・。 あぁこのフォルダ厄介だぁ。移動がうまいこといきません
だから「移動がうまいこといかない」ってどういうことなんだよ!!
触るな危険って意味がわからないのかな?
>あぁこのフォルダ厄介だぁ おまえは何を言っているのだ
>>944 コレクションとかIEnumerableを継承しているとプロパティは出力されない
XmlSerializeのトピックに例外事項として書かれているはず。
955 :
デフォルトの名無しさん :2007/01/16(火) 22:09:32
API使ってて、結果の集合を返す関数が提供されているとき 配列で返すなら、List<T>で返して欲しいな。とか思うことありません? 自分でAPI定義してても、IEnumerable<T>で返すか、IList<T>, T[], ICollection,List<T> どれで返すのか迷ったりしてましたがList<T>で返すと特に嫌がられることってありますかね? (相手は.Net2.0以降を仮定してもよいとして)
順序さえ分かればいいのであればIEnumerable<T>、序数が重要であればIList<T>で返して欲しい。 クラスで返す必要はないだろ。
クラス内部でListじゃなくて自作のIList実装を使いたくなるかもしれないし
>>956 List<T>ならList<T>で返して欲しいけどなあ。
IEnumerable<T>で返されたらIList<T>やその他のインターフェースのメソッドが一切使えなくなるわけだし。
でも
>>957 の言うことももっともかも。
>>944 シリアライズについて詳しくないけど
プロパティって、外部に見せるためのラッパーみたいなものでしょ(表現おかしい?)
で、内部的に保持するidがきちんとxmlとして出力されてるなら
プロパティも仮想的に保持されるし、なにも問題ないんじゃないの?
次スレの季節。 無駄なことで消費が早かった。
>>959 >(表現おかしい?)
なぁ・・・表現だけなのか?
>>959 >プロパティって、外部に見せるためのラッパーみたいなものでしょ
フィールドのように使えるが、実際はメソッド。
メソッドをシリアライズするのか? ということ。
XMLシリアライズについtで勉強して来い
日本語読め・・・XMLは日本語でもねぇな 文字読めるようになってから書け
それ以前にシリアライズが何かが分かってない予感とエスパーしてみる
誰に言ってんのか分からない… XMLシリアライズは、いわゆるシリアライズのイメージと違う部分が多い。 プロパティのシリアライズなんてそんな感じ。
XMLシリアライズはpublic限定名時点で終わってる
public限定はむしろメリット Setterさえ制御できれば・・・
オブジェクトを保存するのにその内部状態にアクセスできないのは致命的でしょ・・・
何でXMLシリアライズでそういう話になる? やりたきゃIXmlSerializablでも実装すれば?
( TДT)ゴメンヨー、内部状態にアクセスできないXMLシリアライズにどういう使い道あるのかまったく分からん。
内部状態にアクセス出来ないって、何からみての話だよ。 意味通じてねーよ
あほか。知り荒いざーから見てに決まってんだろ。 いいから内部状態を再現できないシリアライズに何の意味があるのかとっととかけボケ。
じゃあ何をシリアライズしてるわけ?
976 :
デフォルトの名無しさん :2007/01/18(木) 15:36:37
1000 が近いけれど質問です。 Form1、Form2、Form3 と 3 つのフォームを作り、Form1 と Form2 には button1 を 置きます。また、Form3.ShowInTaskbar = false とします。 Form1 の button1_Click() を以下のようにします。 private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.ShowDialog(this); f2.Dispose(); this.Show(); } Form2 では、Form2_Shown() と button1_Click() を以下のように書きます。 private void Form2_Shown(object sender, EventArgs e) { this.Owner.Hide(); } private void button1_Click(object sender, EventArgs e) { Form3 f3 = new Form3(); f3.ShowDialog(this); f3.Dispose(); }
977 :
976 :2007/01/18(木) 15:37:51
実行すると Form1 が表示され、Form1 のボタンをクリックすると Form1 が非表示に なって Form2 が出ます。タスクバーには Form2 のアイコンだけが見えています。 次に Form2 のボタンをクリックすると Form2 は見えたままで Form3 がモーダル ダイアログとして表示されます。タスクバーには Form2 のアイコンだけ。ここまでは 希望どおりの動作です。 さて、ここでタスクバーの他のアイコンをクリックしてから Form2 のアイコンを クリックすると、Form3 ではなく Form2 がアクティブになってしまいます。この 状態で [Enter] キーを叩くと Form2 のボタンが押され、Form3 がもう 1 枚開いて しまいます。 タスクバーの Form2 アイコンをクリックしたら Form3 がアクティブになってほしい ものですが、いいテはないものでしょうか。それとも私がヘンなコーディングを している? なお、Form1 を非表示にしなくても同じ動作をするようです。 助けてエロい人。
だからXMLシリアライズはそういう目的のものじゃない、 かつどうしてもやりたかったらインターフェイス実装しろってんだろーがよ 全部無視して意味ねー意味ねーうざいんだよ
>>976 private void Form3_Load(object sender, EventArgs e)
{
this.Owner.Activated += new EventHandler(Owner_Activated);
}
private void Owner_Activated(object sender, EventArgs e)
{
this.Focus();
}
Form3にかけ
980 :
976 :2007/01/18(木) 16:15:32
>>979 うまくいきました。他フォームのイベントハンドラを自フォームに記述するという
発想は出て来ませんでした。
これで心置きなく納品できます。どうもありがとうございました。
>>978 だからどういうときに使うのか質問されてんだろが。会話読めボケ。
Webサービスのデータとか 読める形での設定情報の保存とか パブリックなフィールドやプロパティを シリアライズ・デシリアライズする場面ならなんでも。 状態を完全再現したけりゃバイナリシリアライズすりゃいい XMLシリアライズはそういう目的じゃないってだけだろ
>>981 いつそんな質問があったんだよ。
お前が一人でとにかく使えんてわめいてるだけ。
独り言だろそれ
説明したんだから読めよ馬鹿
使い道が分からんなら使うなよ、もう
つーか後から書いてるやつ別人だろ。
今日地震くるの?
世界のどこかであるかもね
梅が咲きましたね
はやく病院へ行け
桜はまだかいな
996 :
813 :2007/01/19(金) 11:10:53
>>943 Dictionary<string,IntPtr>
SendMessage(this.textBox1.Handle, WM_SETTEXT, 0, (IntPtr)Marshal.StringToHGlobalAnsi(msg));
Marshal.FreeHGlobal(msg);
こういうことですか?
>>948 SendMessage(this.textBox1.Handle, WM_SETTEXT, 0,msg);
という風に書くことが出来るようになるということでしょうか??
梅といえば桃
>>991 地震は来るものじゃなくて起こるもの。
「その自信はいったいどこから来るの?」とは用法が若干異なる。
ume
デスマーチ梅
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。