ふらっとC#,C♯,C#(初心者用) Part37
このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>980 を踏んだ人は新スレを建てて下さい。
>>980 が無理な場合、話し合って新スレを建てる人を決めて下さい。
前スレ
ふらっとC#,C♯,C#(初心者用) Part36
http://pc11.2ch.net/test/read.cgi/tech/1232455653/l50
うんこ
5 :
デフォルトの名無しさん :2009/02/08(日) 00:50:53
質問があります。 Formにボタンを作り、それを押すと「終了しますか?」というロゴが出て 「はい」を選択するとプログラを終了、「いいえ」を選択すると そのまま続行させるプログラムを書きたいのですが、 if文をどのように書けばこのように処理できるのでしょうか?
void button1_click(object sender, EventArgs e) { if(MessageBox.Show("終了しますか",??.OkCancel) == DialogResult.OK) this.Close(); } こんなんだったと思うけど
DialogResult result = MessageBox.Show("終了しますか?", "確認", MessageBoxButtons.YesNo); メッセージボックスで押されたボタンによってresultの値が変わるので、 Yesのときはフォームを閉じ、それ以外のときは何もしなければいい。 if (result == DialogResult.Yes) { Close(); } でおk。
メッセージボックスの返り値ならifよりswitchを勧める
9 :
7 :2009/02/08(日) 01:08:16
それから、条件式の中にMessageBox.Show()を突っ込むのはやめたほうが無難。 一概には言えないけどね……
10 :
デフォルトの名無しさん :2009/02/08(日) 01:10:59
なんでswitchのがいいの?
それから、条件式の中にMessageBox.Show()を突っ込むのはやめたほうが無難。 これも知りたい
Formsのイベントハンドラの中でMessageBox.Showを使うのが良くないというのなら分かる。 中でメッセージループを回す結果、イベントの処理中にもかかわらず 他のイベントが発生する可能性があるためという話だけど。
じゃあどうすんの?
確かにw
タイマーイベントで使うと再入があるから問題が起きるが、 Form上のコントロールからのイベントならFormからフォーカス奪うから問題なし。 switch使えはエスパーするとYesNoCancelなどの3値型の場合かなぁ。 2値型ならifでいいと思うけど。
結局、何の根拠もないってことか 自分の流儀ってならわかるけど、それを人に勧めるのはどうなのよ
formのイベントでmessagebox中にタイマーイベントが発生した場合は?
やってみな 発生しないから
>>17 タイマーイベントが呼ばれる。
本当に再入注意ってだけ。そのタイマーイベントの中でメッセージボックスを呼ぶとかしたらw
発生してそれで何か困ることがあるの? 起きて困るのは同じ種類のイベントが再入した場合だと思うのだけれど。
>>18 発生しないんだ
>>19 呼ばれるんだ
>>20 >発生してそれで何か困ることがあるの?
このように今困ってる
Windows.Form+Windows.Forms.Timerだと発生する。 VB6の頃は発生しなかったような記憶があるけど。
private void timer1_Tick(object sender, EventArgs e) { MessageBox.Show(”Take it easy !”); } ブラクラみたいな状態になる・・・
閉じる確認のmessageboxを表示するようなメソッドを作ることはよくある手法でしょ そのメソッドがユーザの動作で呼ばれることもあれば、 タイムアウトで呼ばれる事もあるでしょ どうなんの?
その場合は慎重に再入を避けるロジックを追加すればいいでない。 どちらかが終了確認に関する処理を始めたらもう一方はすぐに処理を終えるようにする。
じゃあ結局、どんな場合でも回避する余地が必要なんじゃん staticなクラスを作って、それで表示させてあげればいいだけだが で、条件式の中にMesssageBoxをいれてはいけない理由と、 結果をswitchで判断すべき理由は?
>>5 いちおう、本人がそこまで求めてなかろうが何だろうがこれも。
void button1_Click(...)
{
this.Close();
}
void Form_FormClosing(...FormClosingEventArgs e)
{
DialogResult result = MessageBox.Show(this, "終了しますか?", this.Text, MessageBoxButtons.YesNo);
if (result != DialogResult.Yes)
{
e.Cancel = true;
}
}
>>5 そのうち「フォームの[X]ボタンで閉じたら聞いてこなかったぞ?」という
問題に出くわすかもしれませんが、そのとき、Form.ControlBox = false に
する前にこれを思い出してください。
// でも確かFormClosingのキャンセル機能はバグがあるんだっけ?
>>27 Xでもちゃんとイベントは発生してる。
FormClosingEventArgsに終了の理由(原因)を示す情報が入ってたと思うけど。
>>12 はもう寝てるんじゃね?
しかしclose時の確認ダイアログなんて何十年前からある命題なのに その最適解が存在しないなんて何もは進歩してないんだな
>>5 の書き方だとDialog使わなくても良さそうな感じだけどな
ボタン押す → OKとCancelボタン付きForm表示 → それぞれのイベントハンドラ実行
って感じで
CloseReason使うとわけわかめになるから極力使わない
33 :
5 :2009/02/08(日) 04:45:06
回答をくださった方々、本当にありがとうございました。
無事に追加できました。
>>27 ご丁寧にありがとうございます。
FormにFormClosingイベントを追加するにはどうすれば良いのでしょうか?
Visual StudioのGUIエディターで formを選択してプロパティウインドウのカミナリマークを押して探す
35 :
5 :2009/02/08(日) 05:08:29
>>34 ありがとうございます。
こういうメニューがあったんですね。
いつもはコンソールでプログラムを書いている為、分かりませんでした。
ツール使ってないなら form.Closing += (sender,e) =>{ //処理を書く }; こんなんでいい
流れとは関係ないけど、 閉じるボタンでいちいち尋ねてくるなって感じる。 閉じるから押したんだよみたいな。 本当に閉じられたら困るときは別だけど
if (MessageBox.Show("終了しますか?","",MessageBoxButtons.YesNo) == DialogResult.YesNo) { if (MessageBox.Show("本当に終了しますか?","",MessageBoxButtons.YesNo) == DialogResult.YesNo) { if (MessageBox.Show("本当に終了しますよ?","",MessageBoxButtons.YesNo) == DialogResult.YesNo) { MessageBos.Show("じゃぁ終了します"); return; } } }
それいいな VSデバッグ時にアプリをバツボタンで終了させる間違って裏のVSまで押す時ある デバッグを終了しますか?ってメッセージでるからはいって押すとVSが閉じるのが最初めちゃくちゃムカついた VSもそれぐらいしつこいUIにしてほしい
慣れたら連打するだけなんだから意味ないだろ。 それよりも「デバッグを終了しますか?」でいいえを押す事に慣れろ。
>>39 コンパイルエラー
DialogResult.YesNo は存在しません。
MessageBos は存在しません。
自作クラスですから
class MessageBos:MessageBox
保存しました って表示しといて保存してない方がシュールだ
>>41 3回とも「しますか?」と「しませんか?」がランダムに入れ替わるようにして、
かつ[スタート]メニューに[今間違えて終わらせたプロセスを元に戻す]コマンドを
つけ、「元に戻しますか?」くらいやっとけば大丈夫だろ。
[今間違えて終わらせたプロセスを元に戻す]はおもしろいな
>>39 最後のメッセージは「運がよかったな。今日はMPが足りないみたいだ。」で。
[帰れよ]ボタンもいるな。
再利用を考えるよりハードコーディングの方が動作は速いんですよね?
概ね
他のクラスのbool型変数が変わった瞬間に、 とあるForm1をClose()するにはどうしたらいいでしょうか?
>>51 bool flag=true;
bool Flag{
get{return flag;}
set{〜}
}
じゃだめ?
boolのプロパティを作成して変更時にClose()を呼ぶ
リロードしてなかった すまそ
ナイスアドバイス! bool flag=true; bool Flag{ ←これから先もbool型変数があるクラスに書くの? get{return flag;} set{〜} }
>>55 うん
でset{〜}
にやりたい処理書けばいい
最初にflag=trueにしたりして
あとpublic付けるの忘れたFlagの方
いらないなら良いけど
あ、すまん set{ flag=value; if(value==true){ //やりたい処理 } }
>>53 プロパティというのはクラス[デザイン]のプロパティ?
>>51 他のクラスが何なのかによるけど、
少なくともForm1の状態変化に関する処理は、なるべくそのForm1に記述したほうがいいと思う。
なんで、他のクラスのboolがtrueになったらイベント発生させて、Form1の特定のメソッドを実行させる。
んで、そのメソッド内でCloseする。
なぜだ・・・。getしてくれない。 デバックで見ても作成したメソッドに飛ばない
>>59 ×なんで
○なので
なぜ〜に見えるから最後まで読まないとわからないからね
62 :
デフォルトの名無しさん :2009/02/08(日) 21:52:58
Form1から呼び出した2枚目のFormをアクティブにしない (常にForm1をアクティブにする)方法を教えてください。
全スレでも同じレスがあったと思うんだが Form.ShowWithoutActivation クリックされてもアクティブにならないなら ContextMenuStrip あたり改造
65 :
デフォルトの名無しさん :2009/02/08(日) 22:01:01
>>63 どうやって使えば良いのかわからないんです。
呼び出した後も絶対に2枚目をActiveにしたくないの? それとも呼び出し時にForm1をActiveにしたいだけで、その後は2枚目がActiveになってもいいの? 後者なら2枚目が表示された段階で、呼び出し元がForm1なら、 Form1.Activate();すればいいだけじゃない?
>>65 Form2 で override して true 返すだけだよ
>>68 実際にはインテリセンスが効くからあっという間にオーバーライドできる。
ov[space]showw[space] くらいタイプすればプロパティの形ができるから、
あとは戻り値をtrueに書き換えればおk。
こういうのって、何で最初から設定できないんだろうな TableAdapterのタイムアウト時間が設定できないとか、ほんと糞仕様だわ
開発者も全部が全部必要な機能に気がまわんないだけ。 MS はまだフィードバック入れたら修正されるだけマシ。
TableAdapter は別にしてこれ(ShowWithoutActivation)は実装上、互換性上 自然だと思う。細かい話をするとめんどくさいんでしないけど。
人間だから仕方ない、放置より修正されるほうがマシ的な論議は飽き飽き。 最初から糞仕様には糞仕様と言い続けることが圧力になって反映されやすくなる。
2chで騒いでも何にもならん。時間の無駄。 然るべき場所からフィードバックとして送らんと意味がない。
77 :
デフォルトの名無しさん :2009/02/08(日) 23:11:16
Expression Blend 2 欲しいよ。だれか、買って。SilverlightとC#でばりばりしたい。
Web2とBlend2を2万円で買う方法を教えてください。
評価版を仮想OSに入れてOS時間をストップさせるのはどうでしょうか
amazonの新品を中古リストから買うとアカデミックが手続きなしでいきなり送られくるのは常識
なら、尚更、人間だから仕方ない、フィードバック反映されるからマシ的な書き込みのほうが無意味だろ 何言ってるんだ?
int型より小さいサイズの演算はint型に揃えられると書いてあるんですが、 uintの値を演算で使うとintにそろえられるんでしょうか?それともlongですか?
>>81 それ書いたの俺じゃねぇし
どっちも無意味で程度の差などない。何言ってるんだ?
まぁ、俺もお前もスレチだな。
blendはvistaとC#を戦略的に広めるためのものだからわざわざ買う必要ない 学生には配ってるし、知り合いいないのか? 使ってくれるだけでもうれしいはず。それで作ったアプリが宣伝になるからね。 俺はお金をもらわなきゃblendなんか使わない
WPFとSilverlightの動作の重さには絶望した
>>83 別にお前に対して言ってるわけじゃないんだが?
一方的にお前だけがスレチだな
Formアプリケーションを新規プロジェクトで作ったのですが、 このあと何ができるのか知るにはどうすればいいんですか? 置ける部品はリストにあるので置けばいいのはわかるんですが その中の細かい動作のプログラムの部品の一覧はどうやってわかるんでしょうか?
WPF,そんなに遅いのか? DirectX使ってるってんで期待してたんだが
今日K'sでOffice.macのアカデミックパケ見たら 「身分証の提示は一切必要ありません」って書いてあってワラタ
配列を作るには int []a = new int[10]; 絶対こう書くしかないんですか? int a[10]; こういう風にかけませんか?
>>89 まあ、高機能な分、少々重い。
でも、たぶん、WPF に限らず .NET 全般の、初回起動時の遅さが一番でかくて、
後はそんなに気になるレベルじゃないと思う。
ただ、DirectX 使ってるからってゲームに使えると思っちゃダメ。
マシンが遅いからいけないとか本末転倒なこと言い出すからやめろよ
>>91 基本的に書けない。
unsafe な struct 内限定で、
fixed int a[10]; とは書けるけども、
これは基本的にネイティブとの相互運用専用。
>>94 ありがとうございました。
変数の宣言はすべてnewをつけないといけないの大変じゃないですか?
>>91 var a = new int[10]
が限界かな
Formをダブルクリックして自動で作られたFormLoadを丸ごと削除したら コンパイルできなくなりました。 一度自動で出来たメソッドをきれいになかったことにするには、後どこをいじればいいんでしょうか?
>>87 お前に対してレスした記憶がないんだが?
何で突っかかってくるんだ?
梅
>>95 変数は実体持たないただの入れ物。
new 付けてる方が本体。
プロパティウィンドウのイベントマークをクリック ドロップダウンのハンドラを削除
入れ物を作ったあと、その変数に値を代入すれば newがいらないってことですか?
>>97 デザイン画面で、Form1 の [プロパティ ウィンドウ]->[イベント タブ]->[Load] に、Form1_Load があるから、それを消すとおk
もしくは、Form1.Designer.csを直接編集して↓の一行を削除。
> this.Load += new System.EventHandler(this.Form1_Load);
>>101 thx。しかし項目になにもないんですけど、
手動で削除するのはもう無理ですか?
新しくプロジェクトを作ってイベントから削除したらコードからも消えてました。
間違ってコードから消した場合、すでに大量に中身を書いていたらもうお手上げなんでしょうか?
ここはコード エディタで変更しないでください。と書いてありました。 今後気をつけますthx
コードとデザイナを切り替えるたびに5秒前後PCが固まるんですが、 これは許容範囲ですか?みなさんどのぐらいかかりますか? PenD3.2*2 Mem3.3BG です。
>>108 とりあえずスタートページOFF
ついでに、スタートアップのコンテンツをダウンロードする間隔もOFF
こりゃVSをゲストOSで使うのは無理っぽいですね
>>103 そりゃ、だって、
var a1 = new int [10];
var a2 = a1;
は合法なわけで。
構造体にメソッドが入れられると書いてあるんですが、 もしかしてCの構造体とは別物と考えたほうがいいんでしょうか?
>>112 DateTimeの定義をたどってみてみるといいよ
構造体なんだけど、クラスのようでもあり、メソッドらしきものもある
>>88 をお願いします。
ストップウォッチを作りたいんですが、時間が来たら音で知らせる物にしたいんです。
音を出すの部分はどうやってコードにするんですか?
キリがないと思うので一覧のある場所を教えてほしいです。
おーありがとうです。 組み合わせて頑張ってみます!
>>95 そんなあなたにはVisual Basicをおすすめします。Dim a(9) As Integer
>>117 どう考えても、DelphiかC++/CLIのほうがいいだろ
C#はDelphiのぱくりだし、ぱくりというか設計者が同じか。
今となってはマイナーなC#よりC++/CLIのほうが将来的に役立つ。
どう考えても、F#のほうがいいだろ C#はDelphiのぱくりだし、ぱくりというか設計者が同じか。 今となってはマイナーなC#よりF#のほうが将来的に役立つ。
(´・∀・`)… どう考えても、JScript.NETのほうが
C#はなんでこんなにマイナー言語なんだろうなぁ
WPFとかがC++/CLI絶対対応しないからしょうがなくc#やってんじゃないの? で結局WPFが糞だったみたいなw
普通にVBかC++でよかったよな C#は中途半端 騙された
Delphiは良い言語だと思うが、会社がころころ変わって行く末が不安だ
最初は低レベルな所をやって基本を固めるべき。 MSILしかありえんだろw
ニーモニックをマスターすれば、オブジェクト指向はマスター出来たも当然ですか?
>>124 Delphi Prismは機会があれば使ってみたいけど、その機会が(ry
言語選定に関しては顧客の意見が優先されることもあるからな 普段、Windowsの仕様をボロクソに言うクセに、開発言語はMS製にしろという矛盾
つかC#はdelphiそのもの
frameworkもvclそのものだよな
Objectってvoidのようなものですか?
いいえ
ということにしたいのですね。
C++のスレでC++は重いからアセンブラが必要とかいってるんだけどwww C#って勝ち組じゃね?
だってObjectに一度する必要なくないですか? どういうときに使うんですか?
んで、C++とC#はどっちが思いっていってた?
ある意味勝ち組
>>136 一度ってどういうことよ
条件があとからどんどん変わっていったら誰も正確な意見なんていえないぜ
一度というか型がわからないからObjectにするんですよね で後でstringにするみたいな Objectはどう必要なんですか?
じゃあvoidとの違いを教えてください
もしかして、void*のようなものと言いたかったんじゃないの?
>>140 型がわからないんじゃなくて、どんな型でも入れられるようにobject
クラスの状態などが変化した場合、それに応じてコントロールを変化させたいような場合、
そのクラスにコントロールのポインタを格納できれば便利でしょ
C#でもあるっちゃあるな unsafe { void* p = stackalloc byte[100]; }
VS2010からC++が0xになるみたいですが、C#にはなにか追加されないんですか?
147 :
デフォルトの名無しさん :2009/02/09(月) 18:05:04
A 変数a =(A)b ってなんぞ。わけわかめです New使うのと、左辺の変数に右辺の値を入れるくらいしかわからんのです。
こんなところでアホ晒しとらんと勉強しなはれ
149 :
デフォルトの名無しさん :2009/02/09(月) 18:18:30
どこ勉強すればいいかわからないです。 何で検索すればでてきます?カッコでキーワード?囲う意味がわからない
クラスを継承した時に基本クラスのコンストラクタに引数がある場合はどうすればいいですか?
あと、静的コンストラクタがよくわからないんですが、 一つのクラスにインスタンスコンストラクタと静的コンストラクタがある場合 インスタンスを作ったら両方よびだされるってことですか?
>>153 質問する前にできる事は一度自分で試してみたほうが勉強になると思います。
すいません。一通り入門書を読まないとコンパイルまで行かないような気がして。すいません
using System; namespace HogeHoge { class Test { static int i; static Test() { i = 100; Console.WriteLine(@"staticコンストラクタ i={0}", i); } public Test() { Console.WriteLine(@"コンストラクタ1 i={0}", ++i); } public Test(string str) { Console.WriteLine(@"コンストラクタ2 i={0}", ++i); } } class Program { static void Main(string[] args) { Test t1 = new Test(); Test t2 = new Test(@"test"); Console.ReadLine(); } } }
ありがとうございます! t1の後ろにもConsole.ReadLine();を入れて静動両方のコンストラクタが呼ばれているのが確認できました。 しかし、これがうまくコンパイルできませんお願いします class Test { static int i; static Test() { i = 100; Console.WriteLine(@"staticコンストラクタ i={0}", i); } public Test() { Console.WriteLine(@"コンストラクタ1 i={0}", ++i); } public Test(string str) { Console.WriteLine(@"コンストラクタ2 i={0}", ++i); } } class test2 : Test { test2() : base(str) { } } class Program { static void Main(string[] args) { Test t1 = new Test(); Console.ReadLine(); Test t2 = new Test("test"); Console.ReadLine(); test2 t3 = new test2("test"); Console.ReadLine(); } }
>しかし、これがうまくコンパイルできませんお願いします たぶんこういう発言している間はあなたはプログラミングに向いていないと思います。
アイちゃんが終わっちゃう
うはまじごめん誤爆
161 :
デフォルトの名無しさん :2009/02/09(月) 20:16:55
>>150 ありがとう。アイちゃんには難しすぎた;;()内の型にデータを変換できるって適当に覚えちゃっていいのかな
C#ってなんで流行ってるの? ソースコード見られちゃうのに。 それと、C#で書いたコードは、 PHPみたいに、WEB上だけで動かせられるの? つまり、ソースコードを見られないで運用する、って意味だけど。 それがC#.NETなの?
なにを言っているのかね君は
164 :
デフォルトの名無しさん :2009/02/09(月) 21:01:12
おいらはVS2005でC#使うからー C#以外でも動作するの?まあ、デザインはJavaとHTML使ってるけど
デザインはJava(笑)
>デザインはJava これは流行る
javafx script だったりして(笑
デジャバ
baseの使い方わかる方はいませんか? 157です。
>>169 どこでどんなエラーになるかまで書かないと
自前でコンパイルまでしてくれる人はあんまりいないよ。
おそらくコンパイルエラーのメッセージがそのまま答えなのだろうけど。
>>157 > test2 t3 = new test2("test");
これがどのコンストラクタを呼んでるのか考えてみろ
PHPだってみられちゃわないか?
class test2 : Test { test2( string str ) : base(str) { } }
引数がどうしても渡せません string a = new string("test"); test2 t3 = new test2(a); どこがだめですか?
大事なことなので2回言います >どこでどんなエラーになるかまで書かないと
str2は現在のコンテキスト内に存在しませんです。 class BASE { public BASE(string str) { Console.WriteLine(str); } } class TEST : BASE { public TEST(string str) : base(str2) { } } class Program { static void Main(string[] args) { string str = "abc"; TEST t3 = new TEST(str); Console.ReadLine(); } }
public TEST(string str2) : base(str2) { }
おーできました!ありがとう!
デリゲートがよくわからないんですが、 イベントハンドラをまとめたクラスを作ってイベントに対応させるように使えばいいんでしょうか? それとも個々にイベントハンドラをクラスに混ぜて使っていくものなんでしょうか?
WPFとFormアプリって何が違うんですか?
何が違うか・・というか、完全に別物。
GUIエディターがFormなみになったらWPF使おうと思ってるけど いつなるの?
Form並ってどの辺を指して言ってるの? SP1で改善されたが、それでも不満ならBlend使うかVS2010待つかしかないだろうね。
184 :
デフォルトの名無しさん :2009/02/10(火) 07:12:56
Visual StudioのGUIデザイナからFormBorderStyle.FixedSingle;を追加するにはどうすれば良いのでしょうか?
フォームを選択して、プロパティ ウィンドウのFormBorderStyleをFixedSingleに設定するだけ
186 :
デフォルトの名無しさん :2009/02/10(火) 07:51:17
>>162 欠点差し引いても言語仕様がいいから。
ソース見られちゃうってのでいうと、JavaScript とか Flash だってそうだし。
PHP みたいなのの .NET 版は ASP.NET。
ASP.NET と比べたら PHP はかわいそうな子。
188 :
デフォルトの名無しさん :2009/02/10(火) 08:42:00
そんなこたーねーよ。 アメリカ軍とベトコンくらいの違いだろ
逆に言えば.NETソフトをぱくって.NETソフト作ってもソースが丸見えだから パクッたかどうかもバレバレ パクられて困ってるなら訴えればいい
難読化 訴訟コスト 巷のフリーソフトウェアは難読化とかしてるのかね 商用でもWebベースでなければ難読化必須な気がするが
知られたらやばいぐらいのアルゴリズムなら特許取るんじゃね? それ以外で難読化が必要なケースが思い浮かばないんだけど つか.Net以外でも実行ファイルをリリースする時点でアルゴリズムも見ようと思えば見れるし
192 :
デフォルトの名無しさん :2009/02/10(火) 09:17:47
PHPよくわかんないけど、PHPもイベント駆動型で書けるの?
有料のツールなら安価なやつでもデコンパイルできなくなったよ
デコンパイルできないってどういうこと? 難読可って名前を分かりにくくするぐらいしかやってなくて リフレクションでぶっ壊れるイメージしかないけど
195 :
デフォルトの名無しさん :2009/02/10(火) 09:34:46
文字列を暗号化でもしたんだろうか
CLI 的には C# とかではどうやっても無理な識別子やコードは 確かに使えるけども
自分が書いたコードを見られるのはちょっと恥ずかしいというのはある
listboxのClearSelected( )についての質問です。 コンパイルを終えて、実行するとエラーが起きてしまいます。 listboxの項目を何も選択していないのにClearSelected( )をするのはダメなのでしょうか?
質問です。 プロパティの中で、自身の名前(プロパティ名)を取得することってできますか? 調べましたがわからなかったため、方法があれば教えてください。よろしくお願いします。
>>198 そんなことはないよ。
InitializeComponent()より前で呼んでるんじゃない?
outとかref修飾子ってどういう時に使うんですか?
203 :
デフォルトの名無しさん :2009/02/10(火) 14:01:10
Labelやメニューバーなど、Fontを変更させない場所にメイリオ等を使った場合 FontがインストールされていないXPや2000ではどのFontで表示されるのでしょうか?
204 :
デフォルトの名無しさん :2009/02/10(火) 14:07:57
これだとnodeがnullになるのですがこれはD&Dの時にtreeviewにフォーカスがない からなのでしょうか?。またどうやったらD&Dしたノードを調べる事ができますか?。 private void treeView_sites_DragDrop(object sender, DragEventArgs e) { TreeNode node = treeView_sites.GetNodeAt(e.X, e.Y); }
クライアント(TreeView)のXYに変換しないとだめじゃないかな? PointToClient とかで。
TreeView.ItemDragでも使った方が面倒な事考えなくていいから楽だと思うよ
Form1が他のFormが最前列にあって視覚的に見れないときは、 TopMost = trueにすればよいですが、 TopMostみたいにずっと最前列じゃなくて、後ろのFormをクッリクした時みたいに、 FormにあるBottomを押したときに最前列にする方法はありませんか?
APIのSetWindowPos呼ぶとか
>>206-207 ありがとうございます。
PointToClientで解決しました。
ノードの移動も追加するつもりでいますのでItemDragでも色々と試してみます。
listboxがありまして、listbox_SelectedIndexChangedの動作のなかで listbox.SelectedItem.ToString( )を使っています。 listboxの項目を選択した状態で、他の場所からlistbox.ClearSelected( )を行いました。 すると実行時に、listbox.SelectedItemが未定義になってしまいます。 別にlistboxの項目をクリックした分けでもないのに、選択解除をしたせいで、 listbox_SelectedIndexChangedの動作に入ってしまってエラーを起こしてしまいます。 お力添えお願いします。
213 :
デフォルトの名無しさん :2009/02/10(火) 15:18:54
C++のソースをC#に書き直しているんですが, STLのmapのように入れ子にできて一意の値が代入できるコンテナってC#にありますか?
あります。
Dictionaryのことか?
>>212 ありがとうございます。
選択されていなかったらnullを返す。
未定義ってことは他に原因があるのでしょうか?
Windowsフォームのクラス(ClassA : System.Windows.Forms.Form)では thisの型はForm型?それともClassA型?
Form型クラスの中にForm型をnewで生成することはできますか?
うん
俺も難読化に興味ある。 現状ではDLLを暗号化しておいて、実行時にネイティブコードを呼び出して デコード→読み込みみたいな感じにしてる。 Reflectorだけでは解析不可だけど、ちょっと詳しい人なら簡単に突破される。 将来的には ネイティブの実行ファイル起動→スプラッシュロゴ表示(.Netの遅い起動対策) →裏でマネージコードをデコード&exeの起動 みたいな事ができないかと考えてる。
ぼくのHelloWorldも難読化したほうがいいですか
225 :
デフォルトの名無しさん :2009/02/10(火) 19:48:02
Managed D3Dスレに誰もいないのでこちらで質問させていただきます C#でD3D上にUI作るにはどういった方法がありますか?
D3Dか、俺もやってみたいな
俺がやってる方法は通常のアプリと同じ様にコントロールをつけて、 OnPaintイベントでD3D描画。これだけで3D表示とコントロールは共存できる。 ツールとかならこれでいーんだろーけど、ゲーム等、リアルタイムで アニメーションさせる場合とかは一考が必要。 ただD3Dのパフォーマンスをギリギリまで求めると コントロールのレスポンスが悪くなる。作るものに応じて何通りか試すといいかと。
完全に自前でフレームワーク作るのが普通 各コントロールは自作のMyControlクラスを継承して, それぞれOnRenderをオーバーライドして描画するとかWinFormsっぽくするとそんなに難しくない
>>218 ListBox.ClearSelected()を見たほうがいいかもね。
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
ListBox ctl = (ListBox)sender;
if (ctl.SelectedIndex == -1)
{
label1.Text = "Cleared!";
}
else
{
label1.Text = ctl.SelectedItem.ToString();
}
}
配列の要素数や、ArrayListの要素数など、 0以上の数値にしかなり得ないような数値の返り値がintなのはなぜでしょうか? uintであるべきではない理由があったら教えて下さい。
統一した方が便利だから intに最適化されてるから 符号なし数値型はCLS非準拠だから
むしろ「わざわざ」uintにする理由がないからだと思うんですが。。 「わざわざ」uintなんぞにしちまったらintと演算するごとに(以下略
常識的に考えて、MaxValue個以上の要素を持つArrayListなんて使わないから実用上の問題もないしねぇ
クラスライブラリでは基本的に符号なし整数型を公開したらダメ サポートしてない言語がありうるから CLSは言語間の相互運用性を確保するための仕様
なに#define DEBUGって コンパイルするとき選べるDebug Releaseの選択とはまた違うのか
素早いレスありがとうございます
CLS非準拠というのは理解できました。
intの最適化されているというのは、これだけの情報では検索範囲が広すぎて
どういう意味なのかがわかりませんでした。
よろしければ、何がどのように、何に対して最適化されているのか、補足いただけないでしょうか。
また統一したほうが便利というのは、
このような要素数を格納するような変数はこれまでintを使用していたので、
仮に-1などの要素数が代入されエラーが発生する可能性を許容しても、
変数としてintを利用することの便利性のほうが勝るということでいいでしょうか?
>>232 uintを宣言した段階で正数しか入らないということが、
クラス設計上わかりやすいのではと思いました。
例えば配列のindexをプロパティで入力してもらうとき、intだと負数の入る余地があり、
実際に数値を判断して例外なりを出す必要があるのではと思ったということです。
randは速度重視で正確なんでしょうか? それとも偏って使い物になりませんか?
>>235 いわゆるプリプロセッサシンボルというやつ。用途はググれ
プロジェクト構成でDebugを選ぶと自動的にDEBUGは定義されるから#define DEBUGは書く必要ない
プロジェクト構成で設定している意味がなくなるからむしろ書いてはいけない
>>237 なにか問題が出たらそれから考えればいいだろ
239 :
225 :2009/02/10(火) 23:09:26
自前でコントロール作成ですか・・・ にほんご入力とかも、必要があれば自分で実装しないといけないのかしら
>>194 なぜかはよくわからん。
エラーメッセージがアバウトすぎるので。
アンチILDASMオプションのようなものがある難読化ツールはいくつかあるよ
高価な奴だと、難読化したままデバッグ可能なものも
int型の動的配列をもっとも速く処理できるクラスは何ですか?
>>237 普通に使う分には十分なばらつきだけど
暗号化に使えるぐらいのやつが欲しいなら
System.Security.Cryptography.RNGCryptoServiceProvider
>>243 拡張?サイズ変更できないってことですか?
工夫が必要なんでしょうか?素人が速くするのは無理くさいです。
List<int>で困ってから考えたら 結構速いよ
素人は普通にやってろ
>>245 たかが配列でそんなにパフォーマンスおちないと思うよ
別のところが原因じゃね?
>>242 何をどう「速く処理」したいのかによる。
コレクションクラスってのは、それぞれ一長一短があるから、
わざわざあんなにたくさん用意してあるんだよ。
C#は速いと聞いたので今あるソフトをC#でどのぐらい速度速くできるかにチャレンジしてます 動的配列に入れたい数はとりあえず28M個とかです。 C++ではvectorでやってるんですが、入れるだけでもものすごく遅いです。この量かint64MAX値まで格納できて速いのがいいです。
>>250 ありがとうございます。
>int型で処理するのが一番早い
これはどこから得られたデータですか?
もしご存じでしたらお教えくださらないでしょうか。
なるほど、ということは、
>>234 に関して、これを前提で考えると、ulongやuint等は
基本的に速度も遅いし、特に使用するメリットが無いし、
今までの使われてきた経緯からなるべき使用すべきではないという理解でいいでしょうか?
何度も質問して申し訳ないですが、よろしくお願いいたします。
vectorの代わりはList<T>でどうぞ
>>254 thx変わりになるものなのか
>>246 すまんねListと聞いただけで拒否反応してしまったすまん。
>>253 IL 上は signed も unsigned もマーク程度で実質あまり変わらん。
むしろ native int や unsigned int32 が多いから早いとはいえないというか
言語が変換命令入れる必要があったりするわけだけどそれが重いか
といわれると別に。
というか int しかない言語も存在したり CLS にない理由がいくつかある
わけだが一言で言うとだな、ゼロ以上「だけ」の特殊な状況での型分け
なんていらん。コレクションのインデクサにしたって Length 以下も駄目
だろ。
測ったわけじゃないけど,uintでも扱いは全く同じだから演算そのものの速度は変わらないと思うよ どうせフレームワークのメンバで公開されてるのはほとんどintなんだから uint使ったらオーバーフローとか気にしないといけないからかえってわかりづらい 利便性という意味での最適化
>>256 なるほど、所詮入れる箱としての変数なので、正数だからという区別がある必要はないということですね。
だったらなぜuintなぞがあるのか聞きたい気もしますが、これはMSにしかわいらないことですしね。
>コレクションのインデクサにしたって Length 以下も駄目だろ。
0以下、Length以上が駄目ですね。ただ、0以下が駄目なことは変数の型から理解できるのではと思ったということです。
ありがとうございました。
>>257 なるほど、過去の遺産や他の言語の整合性との観点や、
過去からの流れがあって、正数だけに限定するとかえって混乱が発生し、
逆に利便性が低下するので問題が発生するということですね。
もしuintなどが過去からあって利用されていたら配列の要素数にuintが変えるような
言語が普通だったのかななどと想像すると、どちらがいいのか考えさせられますが、
お話を聞いて納得できました。
ありがとうございました。
>>258 冷やかすわけじゃないけどちょっと大げさに考えすぎなんだと思うよw
「なぜ」なんていったって別にそんな深い理由があってuintを避けてる、
とかじゃ全然ないと思うよ。
単にあえて符号無しの型を使う理由がないから、っていうだけのことでしょ。
8bitや16bitの時代なら符号なしの型にも存在意義があったと思うけど、(例えば50,000までの
インデックスを表す変数のために32bit使うのは馬鹿らしいから)32bit以上になっちゃったら
存在意義は薄い、そんだけのことだと思うよ。
その理屈でいうとuintでもいいし、もっと言えばlong、decimalでもいいじゃん
boolもいらないよな。0か1でいいから。
利便性の制約のためだと思ってた
Javaにはunsignedがない。.NETにはJ#がある。ってのが簡単な理由じゃあるまいか。 Z80の相対ジャンプにはキャリーフラグでの条件ジャンプはあったが、オーバーフロー (パリティ)フラグによるものはなかった、とか 一般にキャリーを見るよりもオーバーフローを見る方が1ビットだけコストが高い、とか ヲタッキーな遠因を語ってもいいけどね。
>>263 あと、VBも忘れちゃいかん。
言語・ライブラリではきちんと使い分けているC++でも、
intだけで全部済ましているプログラム見てorzとか良くあるから、
全部intにしているのはかえっていいと段々思うようになった。
>>264 残念ながら、計算方法(アルゴリズム)に特許が認められてしまっている。
ソフトウェア特許と呼ばれるやつ。
有名だったGIFでは、圧縮アルゴリズムLZWに特許がかかっており、
特許料を取るとまくし立てられたので、自前実装も軒並み消えた。
個人・フリー相手にそこまでやかましいのは最近見なくなったけど。
特許は足手まといでしかない
特許そのものは足手まといとは言わないけど、 計算に関しては、回路配置利用権とかみたいに別方式を作ったほうが良かったと思う。
現代において、コンピュータに関しての基本的すぎる事柄の特許ってのは、 基本的に大企業が互いに牽制しあうためのものだから、 特許権が行使されず誰にも害悪のないことがほとんど。 たまに、一太郎アイコンの松下みたいに勘違いしたのが出てくるけど。
マイクロソフトに数千億円の支払い命令が下りたmp3の機能のやつは、1ソフトにつき使用料0.3円だべ? 逆にそのぐらい払わないと経済がまわらなくね?と思った 電化製品だって作るのに部品買わなきゃいけないのにソフトは人件費だけってんだから全く足引っ張ってないと思う
MP3くらいだったら特許でもそうでなくても作ったところでお金が回る仕組みがあるべきだと思う (と同時に、LAMEやx264のようなフリーソフトが見逃されている現状は嬉しい)が、 バルーンヘルプのようなものまで特許になるのは勘弁してくれ。
ウザいのはソフト公開すると必ず著作権法違反だとか基地外みたいな奴らが大量にメールが送ってくることなんだよな アイコンがアウトだとか、その機能は許可をとっているのでしょうかとか、ただちに販売を停止しないのなら法的手段に訴えますとか。 エロサイトのポップアップ支払命令とかわらん、全然関係ない完全な第3者なのが超ウケル
>>266 GIF の騒ぎは、別の優れた形式を普及させるためだった、とも言われてるね。
PNGだってGIFのアルゴリズム使えれば もっと圧縮率高められたんだろ
>>273 wwwww
GPL教とオープンソース教も嫌いだな〜
>>260 消極的理由はあるんだよ。
だから、「あえて」特定の型を選択する積極的理由がないなら
一番汎用性が高い型をデフォルト的に選択するのは当然のことじゃないか。
>>261 そんなわけないだろ。
言ってる意味がわからない。
賛同するかどうかはともかく言ってる意味くらいわかるだろ
積極的な理由以外を理由と認めないのは悪い癖だな
>>273 マジで?俺が公開しているソフトは今のところその被害ない。
大量にって、ホントにアウトな著作権法違反したんじゃなくて?
「販売」って言ってるから業者さんなんでしょ。 ある程度大手ならさもありなんだと思うよ。 どの業界でもクレーマーって実際多いから。 ゴネ得狙いの奴もいれば、「環境浄化運動」やってる更年期のオバチャン的な 頭がオカシイ奴もいる。
>>220 の質問ですけど、
Form型フォーム1に、Form型フォーム2を引っ付けることは可能でしょうか?
できれば場所移動は連動可能で、フォーム2の上にある上のバーを消したいです。
そういうのは普通フォームでは実装しない。
284 :
デフォルトの名無しさん :2009/02/11(水) 16:08:23
>>283 仕方なくフォームを使ったとして、
Dockなどで連携できないでしょうか?
Dock ってのがドッキングウィンドウを指してないなら・・・ イレギュラーなことをするには、それなりのコストが必要ってことだな。
MagicDockみたいなのを想定してる?
>>286 MagicDockというのが調べても分からなかったのですが、
たぶん名前からしてそんな感じだと思います。
>>281 あー、納得。某ゲーム会社大手で指四本のキャラが身体障害者団体から
クレームくるからと差し替えになってたな。
>>282 ボーダースタイルとかTopLevelとか単語超うろ覚えで申し訳ないんだけど、
その辺いじればFormをコントロールのように扱えたと思う。
あと、リージョンとかいじれば2ドット四方のFormとか作れる。
>>288 いずれにせよ、質問は自分の思ってることが読み手に正確に伝わるように書いてくれ。
自覚がなさそうだが、君の書く文章は読み手の視点で文章推敲できない奴の典型。
絶対反省してないw
295 :
デフォルトの名無しさん :2009/02/11(水) 18:11:19
教えてください。 C#(2005Express)で簡単なWindowsアプリケーションを作っています。 Formが1つと、Message用のLabelが1つ、 NowLoadingをイメージしたアニメーションGIFを表示するPictureBoxが1つあります。 解決したいのは、Form_Loadイベント内で色々処理を行っている間に、 アニメーションGIFが止まってしまっている問題です。 色々処理を行っているのを示すために、アニメーションGIFを表示しているのに、 すべての処理が終わってからアニメーションが開始されてしまいます。 以下ソースです。 * PictureBoxのImageは、プロパティで指定しています。 * Sleep処理は、色々な処理の代替です。 --- private void Form1_Load(object sender, EventArgs e) { this.Refresh(); // Wait 5000 ms System.Threading.Thread.Sleep(5000); label1.Text = "5000ms..."; this.Refresh(); // Wait 8000 ms System.Threading.Thread.Sleep(8000); label1.Text = "8000ms..."; //ここからアニメーションが開始されます。 } --- よろしくお願いいたします。
別スレッドで処理するか、DoEventsでも呼ぶかして メッセージを処理できるようにしないと描画されるわけがないよ。
windowsフォームの位置をLocationなどで設定することは可能ですが、 windowsフォームの位置を取得するにはどのようにしたら良いでしょうか?
設定の逆をやればいいんじゃね?
位置設定を Form1.Location = new Point(100, 100); とすると 設定は・・・
>295 public partial class Form1 : Form { delegate void ThreadMethodDelegate( ); ThreadMethodDelegate thrd; public Form1( ) { InitializeComponent( ); } private void Form1_Load( object sender, EventArgs e ) { thrd = new ThreadMethodDelegate( ThreadMethod ); thrd.BeginInvoke( new AsyncCallback( CallbackMethod ), null ); } public static void ThreadMethod( ) { System.Threading.Thread.Sleep( 5000 ); } private static void CallbackMethod( IAsyncResult ar ) { MessageBox.Show( "ワーカー終了" ); } }
イベントって難しいですよね? 何をどこに書いたらいいのか分からん。
そうですね。勉強しましょう。
むずかしくないよ
BeginInvokeしたらEndInvokeしろよ
でもデリゲートやイベントってC#の上位の機能の中では一番難しいところだと思う
いま「ポインタは難しい」とか真顔で言われたときと同じくらい当惑しています。
C++ の関数ポインタは今でも当惑するけどね。特にメンバ関数のそれ!
あれはとっととbindしてfunctionに放り込むに限る。 これで、マルチキャストにならない以外C#のデリゲートと同じ感覚にできる。
デリゲートは型,イベントはメンバ(プロパティみたいなもの) 意味わからないだろうけど,ただこれだけのことなんだよ まあ慣れてきたらそのうちわかる
Formアプリでフォームが真中に来るようにするにはどうすればいいんですか? WPFはまん中にくるのでそういう風にしたいです
>>309 でも実行される関数のポインタが格納されてるだけって考えるほうが簡単だし
あっそ
だから実行される関数のポインタを格納する「型」なんだよ
お前の感想なんかどうだっていいんだよ
まとめて相談スレへお引き取りください
C#と直接関係の無い話なのですが・・・ Vista VS2005C#でWebアプリWebサービスを作っていたのですが、 自分のマシンのIIS上にそれらを配置した場合、キャプチャする事は出来無いのでしょうか・・・?IPが同じだとダメなのでしょうか・・・? MicrosoftのNetworkMonitorを使ってみたのですが、拾えていません。 一応別のマシンのIISに入れた場合は見ることが出来たのですが・・・ デバッグする為に同一マシン内で動作させられたら楽なのになと思いまして。 スレ違いだったらすみません、無視して下さい。
どっかで見たな。ループバックしろ、ってのが回答だったような。
俺は答えられんけど、無視されたらスレ違いかどうかわからなくね?w
>>311 違くて、デザイナの中央に配置して作業しやすくしたいだけです
>>318 なるほど。
loopbackを使う方法が使えないので、
同一IPのキャプチャはおそらく無理という事ですよね。
ありがとうございました。
>>319 他のスレに書こうか迷ったんですが、とりあえずレスをいただけそうなここにしましたw
もらえなければ何時間か試して諦めようと思ってたんでw
スレ汚しすいませんでした、ありがとうございました。
あとはプロキシかますくらいかね。
windowsフォームをShow( )して開いている間、 常時メソッドを実行し(呼び出し)続けることは可能ですか?
ローカルにあるIISに接続するのに、IPでアクセスするのと、 localhostでアクセスするのと挙動が違うんだぜ
>>323 タイマ
Application.Idleイベント
>>323 何がやりたいのかわからないけど、無理。
NumericUpDownコントロールのボタン部分の横幅を大きくするにはどうしたらいいんですか?
できないので、自分でそれっぽいコントロールを作ってください。
無理です。 サンプルください
Labelコントロールの文字の周りの余白がでか過ぎるんですが もっと文字にフィットした枠にはなりませんか? ラベルどうしを近づけたいんですが、隠れるんです
AutoSizeがfalseになってないか?
なってないです
フォントを設定したとき他のパソコンにそのフォントが入っていないと表示されないんでしょうか? 自分のパソコンでしか使わないのですが、気になったので教えてください
表示されない。代わりに代用のフォントが選ばれるけど、たいてい汚い。
>>320 オプション-環境-全般-ウィンドウ レイアウト-マルチ ドキュメントで
それで駄目ならデザイナを自作しましょう。
>>330 背景色は透過にした?
まあ君がやりたいことと違うかもしれんが。
>>335 タブ付きドキュメントは外せないのであきらめますthx
338 :
デフォルトの名無しさん :2009/02/12(木) 01:00:00
google geocoding api使って下のようなミニプログラムを書いているのですが、
下のtextの中にどうしても文字化けした文字列しか出てこず、詰まってます。
どこが悪いかわかる方教えてください。
using System.Net;
using System.Text.RegularExpressions;
func hoge()
{
string str = string.Format("
http://maps.google.com/maps/geo?q={0}&output=xml&hl=ja&key= ", "tokyo%20tower");
string strAddress = "";
WebRequest req = HttpWebRequest.Create(str);
WebResponse res = req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(),Encoding.UTF8,false);
try
{
string text = sr.ReadToEnd();
Match adres= Regex.Match(text, "<address>.*</address>"); // 住所が入っている。。。が文字化け。
if (!adres.Success) return "";
strAddress = adres.Value.Substring(9, adres.Length - 19);
}
finally
{
sr.Close();
}
return strAddress;
}
>>333 PrivateFontCollectionクラスを使えば再配布可能なFontファイルを同梱して
未インストールでもそのアプリケーションだけで使える
エンコードし直さなくてもいいんだっけ?
text/xml; charset=Shift_JIS 返してるから StreamReader sr = new StreamReader( res.GetResponseStream( ), Encoding.GetEncoding( "Shift_JIS" ) ); にしたら読めたよ
これどうしてだめなんですか? private System.Windows.Forms.Label Hour; long tick=DateTime.Now.Ticks; DateTime d = new DateTime(tick); Hour.Text = d.Hour.ToString;
インスタンス
Hour.Text = d.Hour.ToString; ↓ Hour.Text = d.Hour.ToString();
括弧かな。エラーの場所やメッセージもあげといて Hour.Text = d.Hour.ToString();
できました!ありがとう!
348 :
デフォルトの名無しさん :2009/02/12(木) 02:23:10
地上波デジタルのコピーガードを除去するプログラムを作成したいのですが 参考になるサイトとかありますか?
コントロール作成以外からのスレッドからアクセスされましたというエラーで途中で止まってしまいます どう書けばいいでしょうか private void Set_Click(object sender, EventArgs e) { flagThread = !flagThread; } bool flagThread = true; private void Form1_Load(object sender, EventArgs e) { Thread thread_TimeUpdata = new Thread(new ThreadStart(TimeUpdata)); thread_TimeUpdata.Start(); } private void TimeUpdata() { while (flagThread) { long tick = DateTime.Now.Ticks; DateTime d = new DateTime(tick); Hour.Text = d.Hour.ToString(); Minute.Text = d.Minute.ToString(); Second.Text = d.Second.ToString(); Thread.Sleep(300); } }
原則的にGUIを生成したスレッド以外GUIはいじれない その上で構造を考え直してみよう
もうだめです。教えてください bool flag = true; private void Set_Click(object sender, EventArgs e) { if (flag) { flag = false; } else { flag = true; Thread thr_Time = new Thread(new ThreadStart(delegate() { this.Invoke((MethodInvoker)delegate() { TimeUpdata(); }); } } thr_Time.Start(); } } private void TimeUpdata() { long tick = DateTime.Now.Ticks; DateTime d = new DateTime(tick); Hour.Text = d.Hour.ToString(); Minute.Text = d.Minute.ToString(); Second.Text = d.Second.ToString(); }
thx なんでこんなに難しいんですか? すごい基本的な機能だと思うんですが、いきなり挫折しそうなんですが・・・
基本的な機能使えないのにスレッド作成してるんですか・・・
System.Windows.Forms.Timerを使う or 別スレッドからGUIにアクセスするときはControl.Invokeする癖をつける
タイマー!ありがとう
NumericUpDownコントロールから値を取り出すにはどうすればいいんですか?
359 :
338 :2009/02/12(木) 07:54:04
>>341 ありがとう。読めました。
Googleがshift_jis返すとは思ってませんでした。
韓国で試したらまだハングル部分が文字化けするけど。
>>358 確か、Valueプロパティとかあったはず
>>359 普通にブラウザから叩いたら、UTF-8でくれたよ?
Accept-Encoding
簡単にSleepする方法はありますか?
ちょっとおたずねしますが テキストエリアとその中に書いた文章を「送信ボタン」を押すことで サーバーに送信するサイトがあるとします。 そのサーバーに対して C#で作ったアプリのテキストボックスに文章を書いて C#で作った送信ボタンを押して WEBサイト上と同じ結果を得れる方法を探しているのですが それについて詳しいサイトとか ご存じの方いませんか。
効果音を付ける時、音のファイルをプログラムに埋め込むにはどうすればいいんでしょうか なるべく実行ファイルはシンプルにしたいんです
りそーす
366 :
デフォルトの名無しさん :2009/02/12(木) 11:28:00
thx!
>>363 C# Postで検索するとぽろぽろでてくるよ
371 :
デフォルトの名無しさん :2009/02/12(木) 15:42:09
固定メッセージをソース内で宣言して、グローバルで使い回したいのですが 何かいい方法はないでしょうか? #define TEST_MESSAGE "テスト" みたいな書き方をしたかったのですが、上手くいきません どこからでも参照できるグローバルのような方法はないんでしょうか?
363が「さっぱりわからないから教えてくれ」ってなりそうな予感
プロセッサ数を取得するにはAPI使わないと無理?
System.Environmentにあった気がする。調べてみて
376 :
374 :2009/02/12(木) 16:09:12
>>375 ありがとう
Environment.ProcessorCount
でできました。
377 :
デフォルトの名無しさん :2009/02/12(木) 16:16:00
VisualStudio2008、.Net Framework3.5を使ってます。 FormにDataGridViewを表示しています。 セルの中に改行があるときに改行されて表示させるために、WrapModeをDataGridViewTriState.Trueにしました。 すると、改行が含まれているセルは改行位置で改行されるようになったんですが、 改行が含まれていないセルや、表示しきれない行まで、折り返し改行されるようになりました。 改行コードでのみ改行して表示させることは不可能なのでしょうか?
falseにすればいいんじゃ?
379 :
377 :2009/02/12(木) 16:30:48
>>378 WrapModeにDataGridViewTriState.Falseを設定すると、
折り返されなくなりますが、改行コード(\r\n)での改行もされなくなってしまうんです。
380 :
デフォルトの名無しさん :2009/02/12(木) 17:15:51
>>379 「何の」WrapModeをDataGridViewTriState.Trueにしたんだよ
配置する文字列内の改行コードの有無をみて、改行コードがあった場合は WrapModeを trueにして、 なければfalse とか。 wrapmodeに関わらず改行すればいいのに、変な仕様だね。
質問です。 VS2005で作成した自作クラスのドキュメントを作りたいのですが、 クラスのメソッドやプロパティや、可能ならコメントを抽出して 一覧表示してくれるような機能、アドイン等はありますか? よろしくお願いします。
あるいは、sandcastle + それ使うツール sandcastle 単体はカスタマイザビリティはすごいから 慣れればいいんだけどまぁ取っ掛かりはあれなので
WindowsのGUIのまともなアプリを作るのに 向いてるのって、 (1)VB2007 (2)VB.NET (3)VC (4)VC++ (5)C# この5つ? JAVAもいいかと思ったんだけど、Windowsアプリを 作るには向いてないの?V2Cみたいのでも いいと思ったんだけど。
387 :
359 :2009/02/12(木) 22:00:26
>>360 ブラウザで叩くとUTF8って出るからEncoding.UTF8って指定したんだが、
それだと文字化けしてしまいます。で、341の言うように
Encoding.GetEncoding( "Shift_JIS" )とすると読めるんだが、他国の住所は
文字化けしてしまう。UTF8のままでとってくる方法はない?
WPFは重い・・・
WPFって結局C# or VBじゃね。 ところでVB 2007だとウィルスバスター2007なんだが。
393 :
387 :2009/02/12(木) 23:03:05
>>388 POSTやPUTでAccept-Charsetとかを指定する例はぐぐれたのだが、GETで指定する方法がわからない。
どうすればいい?
文字列の前にある@ってなんですか?
396 :
デフォルトの名無しさん :2009/02/12(木) 23:25:52
>>395 \がそのままか、エスケープ文字になるか。
399 :
デフォルトの名無しさん :2009/02/12(木) 23:55:24
読んでいろいろ試してみたがよくわからんかった。 req.Accept="utf-8" とか? 今日はあきらめてもう寝ます。
あたまわるすぎる
試しにググったら一発でサンプルコード出てきたけど 自分で解決しようって気概は感じられないなw
まあ、そんなのがあったらここで聞く前にググっている罠。
>>399 HttpWebRequest.Headers プロパティ
WebHeaderCollection クラス
HttpWebRequest.UserAgent = "Mozilla/5.0"; でいけたよ
グループボックス内の座標を押したクリックイベントはどうやって作ればいいですか?
>>405 1.デザイナでグループボックスを選択
2.プロパティウィンドウのイベントタブをクリック
3.イベント一覧からMouseDownをダブルクリック
グループボックスにマウスダウンがないんです!
たぶんBrowsableがfalseになってるから表示されない groupBox1.MouseClick += (sender, e) => { Console.WriteLine(e.Location); }; こんな感じでいけるよん
senderっていうのはcontrolが格納されていて、eはクリックイベントがわかるような物が入ってるんですか? クリックイベントに既に飛んでるのにその引数にイベントが渡されててもメソッドの中で使う機会なくないですか?
ToString時に書式を変更するにはどうすればいいんでしょうか int a = 1; string str = a.Tostring(); でstrの中身が常に2桁にしたいんです、この場合"01"にしたいんです
>>410 string str = a.ToString("D2");
ありがとう!
>>407 ああ、ごめん
private void groupBox1_MouseDown(object sender, MouseEventArgs e)
{
処理
}
適当に↑のようなイベントハンドラ作ってFormのLoadイベントかどっかに
groupBox1.MouseDown += new EventHandler (groupBox1_MousDown(sender,e);
って書いとけば追加される
Device()の行でメソッドは戻り値の型を持たなければなりませんとエラーが出るんですがどうすればいいですか? public class DirectSound : Form { Device dsDevice = null; SecondaryBuffer secBuff = null; dsDevice = new Device(); }
すいません、関数に入れるのを忘れました。
今度こそわからないです。コメントの行が両方ともエラーが出てしまいます。 上コメントは静的でないフィールドメソッドでオブジェクト参照が必要ですとでてしまします。 下コメントは最も適しているオーバーロードメソッドには無効な引数が含まれています。と出ます。 これはなにがいけないんですか? public class DirectSound { Device dsDevice = null; SecondaryBuffer secBuff = null; BufferDescription desc = new BufferDescription(); public void PlaySound(string strPath) { dsDevice = new Device(); //desc.Flags = BufferCaps.ControlPan | BufferCaps.ControlVolume | BufferCaps.ControlFrequency; //dsDevice.SetCooperativeLevel(this, CooperativeLevel.Normal); secBuff = new SecondaryBuffer(strPath, desc, dsDevice); secBuff.Play(0, 0); } public void StopSound() { secBuff.Stop(); } }
アプリケーションのアイコンは替えられたんですが フォームの左上にあるアイコンはどうやってかえればいいんですか? リソースの追加はしました。
420 :
デフォルトの名無しさん :2009/02/13(金) 08:34:56
>>404 ありがとうございます。いけました。
UserAgentをブラウザと同じにすればいいんですね。
勉強になります。
ちなみにurlに与える引数を output=xml から output=kml でも回避できました。
kmlならshift_jis許さないみたいです。
>>418 ↑ BufferDescription.Flagsでググると
↓ thisはちゃんとControlになってる?
>>419 フォームのプロパティグリッドにIconって無い?
C#Expressで勉強中です。 現在時刻を返す関数って 名前空間 Microsoft.VisualBasic モジュール DateAndTime の Now() しか見当たらないのですが・・・ なんかMicrosoft.VisualBasicをusingするのが嫌なんですけど 他にありますか?
System.DateTime.Now
みなさんありがとうございます。 HELPでSystem.DateTime.NowがHitしないのは何故なんですかね?? DelphiのHelpも酷い酷いといわれていたが、それ以下かも。 次からはググってから質問します。
426 :
デフォルトの名無しさん :2009/02/13(金) 15:19:54
検索にはGoogleを使うといいよ
最近のはf1押しても見当違いのメンバのが出てくるの多いな
>>409 例えば、複数のコントロールのクリックイベントを1つのハンドラで処理できる。
そういうとき、どいつがクリックされたのか区別するという使い方ができる。
つーか、質問がおかしいし。 > senderっていうのはcontrolが格納されていて、eはクリックイベントがわかるような物が入ってるんですか? 前者はその通り。後者はイベントの引数。 > クリックイベントに既に飛んでるのにその引数にイベントが渡されててもメソッドの中で使う機会なくないですか? イベントが渡されるわけではないので、その質問は成り立たない。
431 :
デフォルトの名無しさん :2009/02/13(金) 17:54:04
C#をやり始めてログの出力処理を作成しました 処理自体はできたのですが、ログに出力メソッドやイベントを埋め込みたいと思っています System.Reflection.MethodBase.GetCurrentMethod().Nameを使えば取得できるようなのですが ログの出力メソッド内で、呼び出し元のメソッドを取得する方法なんてあるでしょうか? 呼び出し元の方で引数に入れて出力・・・というのはできたのですが ログ出力関数内に、呼び出し元メソッドの取得処理を入れておけば便利だと思いまして 宜しくお願いします
スタックトレース
_______ __ // ̄~`i ゝ `l | / / ,______ ,_____ ________ | | ____ TM | | ___ // ̄ヽヽ // ̄ヽヽ (( ̄)) | | // ̄_>> \ヽ、 |l | | | | | | | | ``( (. .| | | | ~~ `、二===-' ` ===' ' ` ===' ' // ̄ヽヽ |__ゝ ヽ二='' ヽヽ___// 日本 _____ _____ ______ _______ | ウェブ | | イメージ | | グループ | | ディレクトリ |  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ .___________________ |help site:msdn.microsoft.com/ja-jp/library │・検索オプション └──────────────────┘・表示設定 | Google検索 | I'm Feeling Lucky | ・言語ツール  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ○ウェブ全体から検索 ◎日本語のページを検索 これが最強の検索方法な
今の Google には IFL ボタンなんてありませんが?
eには使う機械があるものが入ってる senderはあまり使う機会がない
GoogleのTopページなんて見る機会まずないから知らんかったw
>>409 OnClickのeは確かに意味がないよ。
一方たとえばKeyDownイベントなら、eがなければどのキーが押されたか分からない。
あとは、EventArgsに意味があるイベントと意味のないイベントのときに、
EventArgsのありなしで区別したほうがいいかどうかを、
public delegate void EventHandler<TEventArgs>(
Object sender,
TEventArgs e
)
where TEventArgs : EventArgs
というジェネリックなdelegateの存在を踏まえつつ考えればいいのではないか。
>>436 ツールバーにインクリメントサーチが付いてないブラウザなんていっぱいあるからいつもトップから検索してるよ
internalキーワードを実感するために紹介されている記事をみてデバッグすると
エラーが表示されるらしいのですが何故か自分ではエラーが再現出来ません
普通にプログラムが立ち上がってしまいます
>
ttp://www.atmarkit.co.jp/fdotnet/csharp_abc2/csabc2_003/cs2_003_03.html > このソースをビルドすると、11行目で「'Sample003DLL.Class2.sample1()' はアクセスできない
> 保護レベルになっています。」というエラーになる。
他にもvisual studio 2008 ドキュメントのC# リファレンスにあるinternal キーワードの説明にある使用例も
エラーにならないんですがどういうことなのかよく分かりません
> この例には、Assembly1.cs および Assembly2.cs という 2 つのファイルがあります。1 つ目のファイルには、
> 内部基本クラス BaseClass があります。2 つ目のファイルでは、BaseClass のインスタンス化が試行されますが
> エラーになります。
-----------------------------------------------
// Assembly1.cs
// Compile with: /target:library
internal class BaseClass
{
public static int intM = 0;
}
-----------------------------------------------
// Assembly1_a.cs
// Compile with: /reference:Assembly1.dll
class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // CS0122
}
}
-------------------------------------------------
エラーが出る方が普通なんですか?
勝手に文字列にされたらこまるとか このクラスの利用者がエラー処理できないとか バインドするインターフェイスが選べないとか
自作の通信ソフトのサーバとクライアントにに組み込む目的で作りました Receive用スレッドの終了方法がこれでよいかどうかわかりません
444 :
439 :2009/02/13(金) 21:54:52
>>440 DLLにしたらエラーでました。
csファイルだとエラーが出なくてDLLにするとエラーが出るのか
勉強になりました。ありがとう
c#でグローバルIPアドレスを取得したいのですがわからないです。 どなたか方法わかる方いませんか?
447 :
デフォルトの名無しさん :2009/02/13(金) 22:53:13
>>447 2000/98以降
SetThreadExecutionState( state )
>>445 UPnPが有効ならSOAPで取りに行く方法もある
451 :
450 :2009/02/14(土) 01:01:02
ちなみにNATの場合ね
ファイル移動について質問です。 File.Move(from, to); するときに、同名のファイルが空ったら上書きしたいです。 File.Copyなら、 File.Copy(from, to, true); で上書きできますけど、Moveには、trueがないみたい。 こういう場合には、どうするんですか? コピーして削除? 削除してからコピー? なにかスマートな解決方法があったら教えてください。
2.0以降ならReplaceでいいんじゃないの? 1.xの場合はdestinationのファイルのディレクトリでファイル作成が禁止されている 場合に備えて、 (1) 一旦destと同じディレクトリにdestと別名tempでsrcをmove (2) destを削除 (3) tempをdestにリネーム
455 :
447 :2009/02/14(土) 16:29:18
APIってあんまり使う機会無いんだけどAPIクラス作って置いた方が便利だよね?
そういえばVistaでWin32APIに置き換わる新しいAPIを作るって話はどうなったんだろう? たしかWInFXが.NET Framewo3.0になって・・・その後は?
そういうことをやると、空き容量は十分あるはずなのに、ファイルが移動できない! とかクレームしてくる奴が・・・
>>460 完全にスレチだが・・ドロッセルお嬢様ついに発売されるのか。
おしゃれユニットとか付属するのか気になる。
現在スパイウェアを作成してるんですが 感染者のファイルを盗み取りたいと思っていftpにアップロードを考えました しかし、ftp接続をするとWindowsXPのファイアーウォールが作動します これを迂回する方法を考えるのも面倒なので 指定したアップローダに投稿しようとしたところ こちらはファイアーウォールが作動しませんでした こんなテキトーなセキュリティーでよいのでしょうか? exeを踏ませたらもうこちらの思い通りに操作できると考えてよろしいですか?
Windowsファイアウォールはこっちから出ていく分に関しては素通し。 FTPでもパッシブ接続なら発動しないと思う。 だから、今でもサードパーティでファイアウォールアプリを作る需要があるわけ。
XPのファイアウォールってアウトバウンドにルールを設定できないのが致命的なんだよ。 その辺がおまけのファイアウォールの出来だよ。 だからファイアウォールのアプリを別に入れないといけないわけだよ。 Vistaになってようやくアウトバウンドのルールを設定できるようになったので OSのファイアウォールだけでもちゃんと設定すれば結構使えるようになったと思う。
>ftp接続をするとWindowsXPのファイアーウォールが作動します こんなあほなこと言ってる奴のスパイウエアにひっかる奴って
日本語もまともに書けない奴は煽る資格ないな
あほの作ったスパイウエアだけにタスクバーに出るんじゃないの
初心者乙
ftpのしくみも知らない上級者怒ってんね
日本語でOK
本当のあほはどっちなのやら…
イベントログの情報を取得したいと思っています。 System.Diagnostics.EventLog[] eventLogs = System.Diagnostics.EventLog.GetEventLogs(); でアプリケーション、システムといった各ログは取得できることは 分かったんですがそれぞれのログに登録されているイベントソースの 一覧の取得方法がわかりません。 System.Diagnostics.EventLog.SourceExists(string) なメソッドがあるんでソース一覧も取得可能だとは思うんですが。 知っているかたがあれば教えてください。
MSはSDKにWin32ヘッダのC#用クラスを付けとけばいいのに
イラネ
それをやったら.NETの意味がなくなるからな 何でWin32ネイティブにしないの?という話になる
C#で作れるところに意味があるんじゃねーの? もうC++とかやるきねーよ
そうそう特殊なことやらなきゃ、API なんて使わんし。
別にDllImportの宣言自体はそんなに面倒なものでもないしな PInvokeは,その周辺の考慮事項が恐ろしく面倒 C++/CLIにしたからといって改善されるものでもない
compactにはあまりにもないものが多すぎて APIに頼らざるを得ないケースが頻発 デフォルトで付けといてもらった方が便利だね
しかしめんどくさいのは定義が一意に定まるわけでもないことか 使いやすいようにいじれるのがいいからコードのデータベース化みたい なのがいいんだよな
>>481 そう思う奴が多数なら、そこにビジネスチャンスが生まれるはず・・・なんだけどな
移植性が悪いからcompactではわざわざ削ってるんだろ それをMS自らもっと移植性の悪い方法で提供してどうする
>>480 DllImport自体はともかく、定数の定義がむちゃくちゃ多いやつとか
超しんどいのは確か。
最近IMM関連いじっててそう思った。
ヘッダからDllImport 宣言に変換してくれるツールがあるじゃん・・・
487 :
デフォルトの名無しさん :2009/02/15(日) 14:53:57
あるフォームのDataGridViewの1行(1レコード)に入力されている値を、自作のクラスに渡そうとしています。 自作クラスはSystem.Windows.Formsを使わないので、出来ればDataGridViewRow型ではなく 別の型で渡したいと思っています。 今は渡し元フォームの方で、DataGridViewRowから1セルずつ値を取り出して、arrayにstringで入れて、 そのarrayをクラスに渡しています。 一応これで値を渡せてはいるんですが、DataGridViewRowから、 なんらかの「データの集合体」の変数を取り出す簡易な方法が他にあれば、教えてください。
考え方が逆だ 「データの集合体」をDataGridViewにバインドするんだ
>>488 ありがとう、DataRow型で取り出して渡せました。
>>490 エラーが出るケースもあるけどそれすら直せないなら向いてない
こんなもん自分で作った方が早いような…
>>491 向いてないのは分かってるんで、直せないですかとお願いしてるんです。
>>492 作ってくれるならお願いします
直せます。で?
自分でやる気ないんなら板違いだから、有償で誰かに頼みな
そもそも、そのアプリが逆アセOKか、ソースの公開OKか、とか そういうこともわからんし。 著作権法違反とかで捕まりたくないし。
どんな複雑な物かと思ったら…
では直してくれそうなスレありますか?
シラネ
作者に連絡とってソース売ってもらうのが正攻法じゃねーかな 逆コンパイルじゃねーけど
ということで、この話は終了で。オツカレサマー
作者だけど直してやれば
>>506 お前が作者なら、お前がソース公開すればすむこと。
>>479 長時間作業させるアプリケーションなんて特殊じゃないだろ
上でも出てたみたいだけどOSのスリープ殺すのにはAPI必要でしょ それ以外だって特殊なアプリケーションじゃなくてもAPI必要な場面はあるでしょ .netにないのがそもそもおかしいというのは別の話で
ファイル一覧のソートについて質問があります。 ファイルの一覧を、アクセスタイムの新しいものから順番にソートして配列に入れたいです。 アクセスタイムを得るには、 File.GetLastAccessTime(file); で、ファイル名を得るには、 string[] files = Directory.GetFiles(@"C:\temp", "*.txt"); です。 目的のファイルの一覧を、アクセスタイムの新しいものから順番にソートして配列に入れるには、どうしたらよいでしょう? うまくふたつをつなげられないで困っています。 ご指導お願いします。
配列に入れてからソートすれば良いのでは無いでしょうか?
OS のスリープ殺す、なんてのは特殊だと思うけどな。
>>511 LINQ使えば簡単。
Directory.GetFiles(@"C:\temp", "*.txt").OrderBy(file => File.GetLastAccessTime(file)).ToArray();
515 :
490 :2009/02/15(日) 18:08:11
ボクのはまだですかwktk
今日中がいいので、それは無理・・・ だれかおねがいします><
>>514 それだと、古い順に並んでしまうだろう。
OrderByの代わりにOrderByDescendingを使わないと。
>>514 おお、ありがとうございます。
なにか方法がありそうと思っていましたが、スマートです。
早速試してみました。
string[] files = Directory.GetFiles(@"C:\temp", "*.txt").OrderBy(file => File.GetLastAccessTime(file)).ToArray();
foreach (string file in files)
{list = list + file + "\r\n";}
MessageBox.Show(list);
なんかこれだと、まだabc順になっているようです。
なにか方法が違ってますか?
失礼。ごめんなさい。できました。
>>518 おっしゃるとおり、OrderByDescendingでできました。
大感謝です。
OrderByとOrderByDescendingの違いは正順、逆順だけなんだけど、アルファベット順になる理由はなんだったの?
今ぼくの進めてくれてらっしゃる方いますか
>>474 は、イベントソースの一覧を取得する方法はなさげなので、
SourceExists() でやってるように、レジストリから取ってくるしかないのでは?
>>525 それは終了らしいので、途中まで調べましたが止めておきます。
>>526 ではここに再開を宣言します。
どうぞよろしくお願いします
iイ彡 _=三三三f ヽ !イ 彡彡´_ -_=={ 二三三ニニニニヽ fイ 彡彡ィ 彡イ/ ィ_‐- 、  ̄ ̄ ヽ し ま f彡イ彡彡ィ/ f _ ̄ ヾユ fヱ‐ォ て る f/ミヽ======<|-'いシ lr=〈fラ/ !フ い で イイレ、´彡f ヽ 二 _rソ 弋_ { .リ な 成 fノ /) 彡! ィ ノ ̄l .い 長 トヾ__ら 'イf u /_ヽ,,テtt,仏 ! : |l|ヽ ー '/ rfイf〃イ川トリ / .: r!lト、{'ー‐ ヽ ´ ヾミ、 / : / \ゞ ヽ ヽ ヽ / ./ \ \ ヽ / /〈 \ ノ -‐ ´ ヽ ヽ \\ \ 人
ほんとに今日だけはお願いしますOTZ
なんのためにそれが必要なのか、わかりやすく説明してみれ。
>>490 のは、何に躓いたのかさっぱり分からないけど、普通にできたよ。
もちろん差し上げてもいいんだけど、
| このソフトはフリーソフトウェアです。
| 配布、転載は原則自由です。
| ただし、中身の一部もしくは全部を改変して配布、掲載をする事は禁止します。
って書いてあるので、作者の許諾を明示的に取ってきてください。
つーか、なぜ作者にくれと言わないのか?
>>506 で作者が登場している!ちょうど良いぞ!w
533 :
デフォルトの名無しさん :2009/02/15(日) 20:46:39
また、2ちゃんねるで宿題頼んでる奴がいるのかw
イベントハンドラーに適当なテスト用のメソッド入れたいときとか、 LINQ でとか。
最近仕事でC#使うことになったが、匿名メソッドやラムダ式は使いたい気持ちをぐっとこらえてる ほかの人が見たときに読みづらいだろうからな
>>531 エラー出ましたよね?直したとこ教えてくだされば><
それだけでいいんです
どこでどういうエラーが出たか書けよ
とにかく、処理内容を指定して渡すという状況でのみ使用すべきで、メソッドに名前を付けて 定義する必要がなくなるズボラ推奨機能という考え方はすべきでない。具体的には、LINQと、 処理の流れの文脈的にそこに直書きされるべきコールバックとか。 LINQが一番重要。 例: int a[]=new int[]{3,7,2,4,8,1,9}; int b=a.First(i=>i<3); みたいな。これは匿名メソッドをラムダ式で書いているけれど、 int b=a.First(delegate(int i){return i<3}); も可。でも、LINQなら上の書き方に慣れるべき。iに対して型推論が効くからね。 後者は例えば、UIと別スレッドのメソッド中でUIスレッドで実行されるべき処理をInvokeに 渡す場合とか。あと、WaitHandle使って非同期でコールバックが呼ばれる処理を同期処理に する場合にコーディング上も同期処理の如く書く事ができて見易い。こういった場合、 その記事に書いてある、ローカル変数に匿名メソッド内からアクセスできるというのは超重要な ポイントになる。 最後に、UIのイベントハンドラをコードで追加する時、超短いコードの場合は ズボラに匿名メソッドを使ったりするけれど、これは悪い例であまりやるべきではない。 例:this.Button1.CLICK+=delegate{MessageBox.Show("Clicked!!")};
自己解決しますた。 簡単じゃねーかよ、こんぐらいさっさと説明しやがれバカども
警告 1 デザイナは 247 行のコードを処理できません。 base.FormBorderStyle = FormBorderStyle.FixedDialog; メソッド 'InitializeComponent' 以内のコードは、デザイナによって作成されたので手動では変更できません。 変更を削除して、デザイナを再度開いてください。 C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormMain.cs 248 0 警告 2 デザイナは 113 行のコードを処理できません。 base.FormBorderStyle = FormBorderStyle.FixedDialog; メソッド 'InitializeComponent' 以内のコードは、デザイナによって作成されたので手動では変更できません。変更を削除して、デザイナを再度開いてください。 C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormOption.cs 114 0 エラー 3 型または名前空間名 'WsLib' が見つかりませんでした。using ディレクティブまたはアセンブリ参照が不足しています。 C:\Documents and Settings\●●●●●\My Documents\Reflector\Disassembler\AlarmTimer\AlarmTimer\FormMain.cs 10 11 AlarmTimer 警告 4 この参照を解決できませんでした。アセンブリ "WsLib" が見つかりませんでした。アセンブリが間違いなくディスクに存在することを確認してください。 コードにこの参照が必要な場合、コンパイル エラーが発生する可能性があります。 AlarmTimer 警告 5 参照コンポーネント 'WsLib' が見つかりませんでした。 この5つっす
簡単だ。エラー3をよく読め。そして考えろ。
お前ら頭悪いよな
>>543 不足してるらしいです、でも意味わかりません
カワイソス(´・ω・)
頭が不足してるのか、かわいそうに
>>545 意味がわからなかったらググったりして調べればいいじゃないか
それがめんどくせーから聞いてるんだろうが! バカジャネーノ
dllがないってことかな
面白いからもっとやれwww
できました! ありがとうございました。 これで明日の課題提出に間に合います!
ソース盗用がバレて遡及的に単位取り消し/停学ですね、わかります
自分のおべんきょ用です
C#って初心者向けの言語ですか?
>>555 向け、かはわからないけど、初心者でも十分理解できると思います。
向けかといわれると確かにまぁ違うよな 向いているかといわれると大丈夫なんじゃないぐらいではある
実際に初心者が使えるかどうかはともかく,言語のスタンスとしては初心者向けではないな どっちかというと既に他のが使える人が便利に使える言語というコンセプト
559 :
デフォルトの名無しさん :2009/02/15(日) 23:06:56
C#のstringには、MFCのCString::Right(n)のように、 末尾からのn文字を抽出するメソッドはないのでしょうか。 ない場合、全体の文字数を取得して、全文字数とnを使って、Substringするという回りくどいやり方しかないのでしょうか。
ない 回りくどいって言ってもstr.Substring(str.Length - n)とするだけのことだろ
ない どうしても嫌なら拡張メソッド作ったら
562 :
559 :2009/02/15(日) 23:15:36
ありがとう。 回りくどいとけなすつもりはなかった。 今は反省している
どうしても欲しければMicrosoft.VisualBasic.Strings.Right……。
C#のstringはLengthを取得するのにコストがかかるわけじゃないのでSubstringでの切り出しでいいんだよ。
Substringは範囲外の切り出しでエラーになる。 これを使いにくいと思ったことはあるな。 "abcde".Substring(3, 10) で "de" "abcde".Substring(8, 2) で "" が欲しいケースは多いよ。
まぁはじめは実際なんでないんだろうなぁとは思った。 たぶん忘れたかなんか事情があったんだろうなと思って おくことにした Substring は境界絡んでくるとうざいんだよなー
>>565 2つ目の引数は文字数なのに結果の文字列に含まれる文字数がそれ以下だとおかしいだろ。
拡張メソッドが便利だな public static string Subst(this string str, int start, int length) { if (str == null) return null; if (start < 0) { length -= start; start = 0; } if (start >= str.Length) return ""; if (str.Length < length + start) length = str.Length - start; return str.Substring(start, length); } public static string Subst(this string str, int start) { if (str == null) return null; if (start < 0) start = 0; if (start >= str.Length) return ""; return str.Substring(start); }
イベントの質問です。 windowsフォームなどのボタンなどを付けて、ダブルクリックした場合、 イベントを自動生成して、 Windows フォーム デザイナで生成されたコードの中に イベントを登録したり、処理(ハンドラ?)のプログラムを書く場所を作ってくれますが、 イベントの引数やインスタンスの定義はどこでしてくれてるのですか?
***.Designer.cs ***はフォーム名
571 :
デフォルトの名無しさん :2009/02/16(月) 19:07:05
@IT .Net Tipsの
リストビューに画像をサムネイルで表示するサンプルを使おうとしています。
URL (
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/336listviewimage/listviewimage.html )
Formに直接リストビューを貼り付ければ、希望通りの動きをしました。
が、FormにTabControlを張り付けて、TabPageの2ページ目以降にリストビューを貼ると、
タブをクリックしてTabPageを表示しようとするとエラーが発生してフォームが終了し、
Program.csのApplication.Run(new Form1());でブレークしてしまいます。
エラーの内容は、
System.ArgumentException: 使用されたパラメータが有効ではありません。
場所 System.Drawing.Image.get_Width()
場所 System.Drawing.Image.get_Size()
場所 System.Windows.Forms.ImageList.CreateBitmap(Original original, Boolean& ownsBitmap)
場所 System.Windows.Forms.ImageList.CreateHandle()
(以下略)
です。
タブページの1ページ目や、Formに直接だと表示されるしエラーもでないんですが、
これは何が原因なんでしょうか?
イベントハンドラの for の最後の > thumbnail.Dispose(); これかな。消してみな。
573 :
571 :2009/02/16(月) 20:49:54
>>572 ずばりでした! 動きました!
ありがとう。
ちょっとソース詳しく読んで、なぜだか考えてみます。
574 :
あ :2009/02/16(月) 21:00:20
あ
>>573 これ読みながらやるような初心者にはわからん可能性が高い気がするけど
ヒントだけ。
ようするにTabPage2 に移動したことによってこのイベントが呼ばれる段階で
ハンドルが作られていない(可能性がある)のが問題。
その状況だと初期化が遅延されちゃうみたいだな。んで、表示されたときに
初期化が始まって、そのときに追加された Bitmap を参照しようとするけど
すでに破棄済みだからアウトになる、と。
もっと単純に言えば、使い終わっていないものをDisposeしちゃダメってことだ。
もっと単純に言えばDisposeは使うなってことだ
それ、違うから。
おいおい
580 :
デフォルトの名無しさん :2009/02/17(火) 13:31:01
HTTPのHEADメソッドを送信するにはどうすればいいでしょうか? WebClientにもWebRequestクラスにもそれらしいメソッドはありませんでした。 もしかしてSocketクラス使わないとだめでつか?
HttpWebRequest.Methodプロパティ?
複数のフォルダに写真を整理していて、そのなかにある特定の日付(たとえば3月)の写真だけを抜き出したいと思っています。 string[] files = Directory.Getfiles("c:/photo", "*.jpg", SearchOption.AllDirectories); string list = ""; foreach(string file in files) {list = list + file + "\r\n";} MessageBox.Show(list); とやって、いま、次のようなリストを入手しました。 このうち3月のみを取り出すのはどうしたらよいでしょう。 いちばん簡単なのは、*の部分に書くことかと思い、 string[] files = Directory.Getfiles("c:/photo", "200803*.jpg", SearchOption.AllDirectories); としてみましたが、フォルダ名とファイル名にわかれていて結果は空になってしまいます。 あと、3月以前(01、02)とする方法もあわせて教えてください。 c:/photo/20080407eventname/photo.jpg c:/photo/20080401eventname/photo.jpg c:/photo/20080317eventname/photo.jpg c:/photo/20080310eventname/photo.jpg c:/photo/20080304eventname/photo.jpg c:/photo/20080303eventname/photo.jpg c:/photo/20080224eventname/photo.jpg c:/photo/20080203eventname/photo.jpg c:/photo/20080127eventname/photo.jpg
>>581 これでいけました。ありがとうございました
String url = "
http://pc11.2ch.net/tech/dat/1234017654.dat ";
WebRequest webreq = HttpWebRequest.Create(url);
webreq.Method = "HEAD";
HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();
WebHeaderCollection webheadcol = webres.Headers;
String ltime = webheadcol.Get("Last-Modified");
Console.WriteLine(ltime);
>>582 パス名の文字列を正規表現で分解して年と月を別々に取り出す
あとは大小比較で絞込み
Regex r;
r = new Regex(@"(\d{4})(\d{2})\d{2}eventname", RegexOptions.IgnoreCase);
Match m;
m = r.Match(@"c:/photo/20080407eventname/photo.jpg");
if (m.Success) {
String year = m.Groups[1].Value;
String month = m.Groups[2].Value;
Console.WriteLine("{0}年{1}月", year, month);
}
585 :
デフォルトの名無しさん :2009/02/17(火) 15:25:58
ファイル名の禁則文字を制御したいと思っています やりたいことは「\/:*?"<>|」の文字があったら「""」で置き換えることです Strings.Replaceでひとつひとつチェックすることぐらいしか思いつかないのですが もう少しスマートな処理方法があれば教えて下さい
586 :
デフォルトの名無しさん :2009/02/17(火) 15:34:22
C# 2.0でDouble型のデータを文字列に変換するときの質問です。 通常 double a = 1.1; a.ToString(); //結果="1.1" のようになるのですが 以下の場合の解決を行いたいです。 double b = 0.000097; b.ToString(); //結果="9.7E-05" 期待したい結果は "0.000097" この結果を通常の10進数の表記を行いたいのですが ToStringメソッドの引数に "0.0000000"や "0.#############" などを渡せば期待しているとおりの文字列を受け取ることができます。 しかし、小数点以下の部分が何桁になるかわからない場合、この表記であれば文字数を超えた部分が無効になると思います。 (例えば b.ToString("0.000")は"0.000"になる) 0.##...#を最大桁数分用意すればいいのかもしれませんが・・・・ 何か綺麗な方法というのはないのでしょうか?
decimalにキャストするとか。
>>585 String.Replaceでなく、Regex.Replaceを使えば一度に変換できる
590 :
デフォルトの名無しさん :2009/02/17(火) 15:43:33
>>588 調べてみます。ありがとうございましたー
591 :
586 :2009/02/17(火) 15:58:27
レスサンクスです。
>>587 最悪その方法もありかなと考えているのですが・・・
>>589 型式指定子などヘルプ参考に使って試してみたんですが・・・
うまいこと行きませんでした…orz
型式指定子の横に数値をつければうまくはいくのですが、その横の数値に当たる部分が動的なため決められないのです。
(といっても結局Doubleの上限下限までではありますが・・・)
string型の変数で絶対パスを指定してプログラムで背景を変えたいのですが、どのように記述すればよいでしょうか? 参考ページが見つからず困っています。
BackGroundImageの事とかじゃね? Formの背景とか??
datTable.Columns.Add("dat1", GetType(Int32)); のGetType(Int32)の箇所でコンパイルエラー('int' は '型' ですが、 '変数' のように使用されています)が出てしまいます。 構文が間違ってるでしょうか? すみませんが、ご教授ください。
>>593 BackgroundImageのことです。
普段はフォームのほうでフォルダを指定して画像を指定していたのですが、
月ごとに画像を自動で変えるためプログラム内で処理しようかと思いまして。
>>596 BackgroundImage = new Bitmap(xxx);
string[] data= new string[12]; for (int i=0;i<12;i++) { string[i] = string.format("C:\Image\{0}.jpg", i.ToString() ); } LOADトカの処理で int index = DateTime.Now.Month - 1; Hoge.BackgroundImage = Image.FromFile( data[index] ); こんなイメージなの・・・か?
全部ロードする必要なくないw
>>595 その場合、""でくくるかtypeof使うんじゃないの?
601 :
デフォルトの名無しさん :2009/02/17(火) 16:53:50
602 :
592 :2009/02/17(火) 16:58:25
>>597 さんのソースで無事表示できました。
皆さんありがとうございます。
それはVBの話で、C#での対応する演算子はtypofです。 Type.GetType(ほにゃらら)ってメソッドの書式でしょ? あるいは、Int32.GetType()でも可、かな?
>C#での対応する演算子はtypofです。 typoだな
('A`)ワロス
>>604 すみませんw
Type.GetTypeメソッドとGetType演算子は別物ですよね。
んで、前者を使って文字列で型を指定するとうまく行くのですが、
後者をGetType(Int32)のように書いてもうまく行かなかった。という状況です。
ちなみに、
>>600 さんのご指摘通り、typeof(int)でうまくいきました。
ありがとうございました。
>>605 ('A`)
VBでしたね。すいません。ありがとう。
610 :
605 :2009/02/17(火) 17:22:58
まさにtypoだな。って何で俺が落ちをつけにゃならん。
>>584 早速ありがとうございます。
c:/photo/20080317eventname/photo.jpg
c:/photo/20080310eventname/photo.jpg
c:/photo/20080304eventname/photo.jpg
c:/photo/20080303eventname/photo.jpg
の行を抜き出したいのです。
そのためには、どう絞り込めばよいでしょう?
めんどくせえ Regex.Match(path,"200803[0-9]{2}").Success がTrueになるやつ
フォームの背景でなくて、デスクトップの背景だったら?
>>613 Win32APIのSystemParametersInfo使うだけじゃない?
615 :
580 :2009/02/17(火) 18:15:57
using System;
using System.Net;
class Test
{
public static void Main()
{
for (int i=0;i<10;i++) {
String url = "
http://pc11.2ch.net/tech/dat/1234017654.dat ";
WebRequest webreq = HttpWebRequest.Create(url);
webreq.Method = "HEAD";
HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();
WebHeaderCollection webheadcol = webres.Headers;
String ltime = webheadcol.Get("Last-Modified");
Console.WriteLine(ltime);
}
}
}
これで二周回ったところでGetResponse()メソッドが返ってこなくなるんですが、何がいけないのでしょうか?
2chのサーバーの設定の問題でしょうか?
XmlSerializer.Deserialize で、<Version>1.003</Version> をデシリアライズして あるクラスの Verion クラスのプロパティに入れたいと思っているのですが、 0.0 というバージョンが格納されてしまいます。 Version クラスはデシリアライズできないのでしょうか?
>>615 サーバ関係ないみたいよ。
うちでも同じようになったし、自宅鯖に向けてもおなじ。
3回目のリクエスト自体来ていない。
618 :
617 :2009/02/17(火) 18:44:19
たぶん同時接続数の制限が別のとこにあるんだと思うよ。 ちゃんと終了処理すればいいんじゃないかな。 ためしに毎回Abortしたら止まらなくなった
>>615 HttpWebRequest..::.GetResponse メソッドの説明
Close メソッドを呼び出して、ストリームを閉じて接続を解放する必要があります。
この操作を行わないと、アプリケーションで接続が不足することがあります。
>>617 >>619 どうもありがとうございます。
リクエストのAbort()、レスポンスのClose()
どちらかを使えば、上手く動作するようになりました。
あと、デフォルトで2になっていた同時接続数の制限は
System.Net.ServicePointManager.DefaultConnectionLimitの
値を変えることで取り除くことができました
いやそれは変更するな
Microsoft.Samples名前空間って、自作アプリに自由に使って、配布してもライセンス違反になりませんか? Microsoft.Samples.DirectX.UtilityToolkitとか Microsoft.Samples.ServiceHosting.AspProvidersとか Microsoft.Samples.Workflowとか
625 :
デフォルトの名無しさん :2009/02/18(水) 01:51:16
Image img; using (WebClient wc = new WebClient()) using (Stream st = wc.OpenRead("適当な画像のURL")) img = Image.FromStream(st); img.Save(@"z:\test.jpg"); Image img; using (Stream st = new FileStream(@"適当な画像のパス", FileMode.Open)) img = Image.FromStream(st); img.Save(@"z:\test.jpg"); という2つのコードで、前者は正常に実行できるのに対し、後者は System.Runtime.InteropServices.ExternalException(Message="GDI+ で汎用エラーが発生しました。") という例外が発生します。 なぜ前者の場合は正常に実行出来るのでしょうか?
>>926 レスありがとうございます。
対応策は検索して把握してはいたのですが、
先の2つのコードの根本的な違いが気になったのです。
Image も IDisposable だから using (WebClient client = new WebClient()) using (Stream stream = client.OpenRead(uri)) using (Image image = Image.FromStream(stream)) { image.Save(path); } の方が良くないか?
>>625 かなりヤケクソ気味の対処法。
class ForwordOnlyFileStream : FileStream {
public ForwordOnlyFileStream(string filename, FileMode filemode)
: base(filename, filemode) { }
public override bool CanSeek { get { return false; } }
}
Image img;
using (Stream st = new ForwordOnlyFileStream(@"適当な画像のパス", FileMode.Open))
img = Image.FromStream(st);
img.Save(@"z:\test.jpg");
>>630 素直に一旦MemoryStreamにコピーしろよって話だな
C#2.0で質問です。 継承元のpublic設定されたメソッドやプロパティを、 継承先のクラスで隠蔽して、利用させたくないんですが、 new privateしても表示されてしまうのですが、これを隠す方法はないですか?
ありません
そういう事をしたくなったってことは設計がおかしい証拠だぬ
(ω・ )ゝ なんだってー 継承元でprotectedにして、継承先でpublicにするとかするしかないのか・・ ありがとう
>>634 工エエェェ(´д`)ェェエエ工工
確かに無理矢理流用しているから、おかしくなってるきがする。
設計を見直してみるお
ありがとう
インターフェイスならメンバ隠して実装できるよ
正直いつも似たような機能作る時に インターフェイス使うかベースクラス継承してオーバーライドで使うか迷ってる俺がいる
そこは普通に「似たような機能」クラスを作って包含するのが 一番素直で融通が利く
>>637 ありがとう。
インターフェースでMethod()を定義して
public class MyBsdeClass : IInterface
public void Method()
などでMethodの処理を書いた基底クラスを作って、
これをさらに継承するということですね。ちょっと試してみます。
ただ、異なる型にまたがって継承させて利用するメソッドではないので、
やはり設計を見直してみようと思います。
それじゃダメ 基底クラスでもMethodを明示的実装しないといけない
>>642 ありがとう
こんな感じでインターフェースを継承した基底クラスのメソッドに処理を書くってこと?
interface IInterface //■インターフェース
void Method();
public class MyBaseClass : IInterface //■基本的な処理を記述した基底クラス
public void Method()
{
//処理を実装
}
public class MyClass : MyBaseClass //■継承先
違うこうするんだよ public class MyBaseClass : IInterface { void IInterface.Method() { ... } } public class MyClass : MyBaseClass, IInterface { void IInterface.Method() { ... } } これで基底クラスの実装は呼べなくなる
>>644 あんたすごいな
643じゃないけど少し知識増えたわ
おれもまだまだだな、、、
キャストすると呼べるけどね。 is-aの関係が壊れているならそこを修復するのが先な気がする。 implements ... の関係とis a ... の関係は全く別物なんだから、どこかで怪我しそう。
>>644 ありがとう。
試してみました。
確かにMyBassClassのMethod();でなく、MyClassのMethod()のほうが実行されますが、
Method();そのものが見えなくなるわけじゃないので、
自分の目的とはちょっと違う感じです。
実験した感じだと、動作としてはインターフェースにしなくともnew public void Method()すれば、
単純な基底クラスのメソッドの実装は呼ばれないと思うのですが、何か他の利点があるということですか?
単純にnewで隠した場合は基底クラスにキャストすれば基底クラスの実装を呼べる
>>644 だとMyClassのインスタンスをMyBaseClass, IInterfaceどちらにキャストしても
MyBaseClassのMehodの実装は呼べないよ
もちろん((IInterface)(MyBaseClass)).Methodでも同じ
え、MyBaseClassにキャストしてからIInterfaceにキャストしても駄目なの?知らなかった・・・
>>648 ああ、なるほどそういうことか!!
確かにそういうのが必要なときには便利ですね!
私も設計を見直して、基底クラスをいじったら、いい感じになってきました。
ありがとー
あれ、そういう事なら、要はvirtualメソッド使えば良いって単純な話では?
Form1にあるチェックボックスとかのGUIを Form1.cs以外のxxx.csとかから操作したいんだけど どうすればいいんでしょうか?
コントロールのアクセスレベルを変えればできるけど褒められたやり方じゃないな 何の目的でそのチェックボックスがあるのか考えるんだ その"目的"に対して,Form1にプロパティやメソッドを定義するべき 基本的にコントロールは外に出さない
ループ内でCheckBoxで選択された機能だけを使いたいのですが、今はこんな形で処理しているんですけど、 for(){ if(A) A(); if(B) B(); if(C) C(); if(D) D(); } ABCが30くらいに増えて遅くなってので、最初にチェック判別して必要な機能だけループ内で使用できるよう、 if(A) if(B) if(C) if(D) for(){ B(); D(); } の形にしたいのですがどうすればいいの?
>>654 それは単純に処理が多くなって遅くなってるのでは?
if文処理がどのくらいの比重を占めてるのかは分からんが。
処理を委譲してチェック外したらヌルオブジェクトに切り替えるとか
速い遅いの問題なら bool a = Aの式; bool b = Bの式; //c,d同様 for() { if (a) A(); if (b) B(); //c,d同様 が速いと思う forの中を綺麗にしたいなら var list = new List<Action>(); if (A) list.Add(メソッドAの名前); if (B) list.Add(メソッドBの名前); for() { foreach (var action in list) action(); } とか考えられなくはないけど
_
∠_)
∧_∧. /
( ・∀・) /
⊂ つ
人 Y ∧_∧∩ ・・・
し (_) ( ´∀`)/
/←
>>655
>>628 リンクありがとうございます。
取りあえず仕様でどうしようも無いという事ですか。
でもなんでこんな仕様なんだろ。
>>630 なるほど、CanSeekをfalseに固定するだけでも解決出来るんですね。
もしかしてWebClientが大丈夫なのはそれがあるのかな。
なんでかって言われたらメモリ節約するためって答えになる 631で言われてる通りシークできないストリームなら内部でMemoryStreamに一旦コピーする
>>651 そうなんです
それでいいんだけど、設計見直したらすっきりして、逆に実装が難しいと思ってた機能を
うまく盛り込むことができますた おまいらありがとう
Visual C#でログイン認証が通らず、クッキーが取れないサイトがあったのでいろいろ 調べているのですが、Perlでは認証が通ったのでクッキーを見てみると"httponly"という のがありました。これが原因だとするとVisual C#ではお手上げなんでしょうか?
通信プロトコルの勉強をしろ
665 :
デフォルトの名無しさん :2009/02/19(木) 11:38:07
C# 2.0Winアプリで質問です。 マルチスレッドでの変数のロック処理について教えてください。 メインスレッドと別のスレッドで処理を行って、 別スレッドで受けたデータをメインスレッドで画面に表示せています。 その時、Listオブジェクト変数を使用してデータを処理しようとしているのですが このような感じのいいのかが不安なので質問させていただきました。 現在やっている処理は 1.メインスレッドでList変数初期化 2.別スレッドを開始 3.別スレッドでデータをList変数にデータを入れる。(ひたすらスレッドタイマ内でADDし続ける) 5.メインスレッドで一定時間ごとにのデータを画面に表示させる。 6.メインスレッドでListのデータをクリアし、一定時間が経過するのを待つ。(5に戻る) 上記の処理だけを考えた場合、このときList変数をLockしようとしているのですが、ロックするタイミングは 3のデータを入れる時 6のデータをクリアするとき でよいのでしょうか? それとも 5のデータを表示させる時(5〜6の間)もロックをする必要があるのでしょうか? よろしくお願いいたします。
後者
667 :
デフォルトの名無しさん :2009/02/19(木) 13:21:46
>>666 ありがとうございます。
ということはとにかく 別スレッドで操作される可能性のある変数を使う場合必ずロックする感じですか…
ありがとうございました。
668 :
デフォルトの名無しさん :2009/02/19(木) 20:54:04
時間のかかる処理のところで Application.DoEvents(); をはさんで処理してるんですけど、 たまにこの命令で応答なしになってずっとかえってこなくなります。 回避方法や代替方法などありませんでしょうか?
BackgroundWorker使う
670 :
668 :2009/02/19(木) 20:55:01
VisualStudio2008をつかってます。
671 :
669 :2009/02/19(木) 20:56:06
既に回答しました
672 :
デフォルトの名無しさん :2009/02/19(木) 20:57:05
>>669 ありがとうございます。
それでやってみます。
.NET Framework 3.5 Service Pack 1 インストールしようとしたら、 「この製品はWindows2000にはインストールできません。 どうしてもインストールしたかったら、XP以上にアップグレードしてください」 ってメッセージが出てきたんだが、どうすればいい?
もう答えを知ってるじゃないか
どうしたい? 1. XP入れる。 2. .NET Framework 2.0 SP2でお茶を濁す。
>>673 C#3.0やLinqを使いたいだけなら、MONOという手もなくはない
3.C#を諦める。GAME OVER
ゲームだったのかぁぁ
small basicというものを入れようとしたら、 「.NETを入れてください」 というメッセージが出てきて、それをいれようとしたら 2000ではダメだ、といわれた。 small basicは2.0 SP2でも動くのかなぁ?
MS製の教育用のやつ? Small BasicはWPF使いまくってるから古い.NETやMONOでは絶対動きません
WPFはVistaにしとけ Vista動かないならWPFなんかどうせまともに動かん Small Basicにはそんな価値は全く無いけど C#使うならXP以降でないと話にならない
「部長!うちのVB6製品もそろそろ.NETに移植しないとやばいです」 「そうだな。だがうちの製品の顧客はNT4と2000もいるから、.NETとやらは平気なのか?」 「そんなやつらは旧バージョンを引き続き保守してお使いいただきましょうよ」 「じゃあお前2本分働け」 がーん。
684 :
デフォルトの名無しさん :2009/02/20(金) 01:14:55
Visual C# 2008について質問です。 メーラーを作っています。 設定を簡単にするために、Outlook Expressのsmtpサーバー、Port、ID、Passwordの4項目を引き継ぎたいです。 どこに格納されていて、どう読めばいいか、教えてください。
世のメーラーでOutlookの設定を自動で使える奴ってあるの?
Thunderbirdのソース読めばいいよ
無理だろ そんなのが取得できたら勝手にメール読み放題ウイルスとか作れちゃうじゃん
いやいや 他のマシンの設定情報読んだり書き換えたりするわけじゃないんだから
女子高生エロエロ動画.avi .exe とか実行しちゃったらやばいんじゃん?
パスワードデコードできたらヤバイねw
アセンブリのあるディレクトリのURI形式じゃない普通のパスを取得する標準的な方法ってありますか? とりあえず、文字列処理で System.Reflection.Assembly.GetExecutingAssembly().CodeBase.Substring(8).Replace('/','\\').Replace("WMPEmitMiku.DLL",""); ってやってるんですが、何ともダーティーで。
string path = System.Reflection.Assembly.GetExecutingAssembly().Location; string dirpath = new FileInfo(path).DirectoryName; Console.WriteLine(path); Console.WriteLine(dirpath);
694 :
691 :2009/02/20(金) 09:08:44
>692 LocationプロパティはMSDNにマニフェストがどうちゃらと書いてあって良く分からなかったのですが UNCパスが取れるのですね。助かりました。ありがとうございます。
C#2.0で Socket.BeginConnect メソッドを使ってサーバに接続しています。 上記メソッドを使う時にタイムアウトの時間を指定とかできないんでしょうか? 接続に失敗したとき AsyncCallback で指定した部分に来るのが遅すぎるのでちょっと困っているのですが・・・ 補足: System.Net.Sockets.SocketException: 接続済みの呼び出し先が一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。 または接続済みのホストが応答しなかったため、確立された接続は失敗しました。 この情報を早く取得してタイムアウトエラーを出したいのです。
696 :
デフォルトの名無しさん :2009/02/20(金) 12:29:53
みなさんありがとうございました。 リンク先をたどってHideSeek(シェアウェア)を試して、パスワードを含むOutlookExpressの設定データを読めることはわかりました。読めるだけでテキスト書き出しはできないです。 フリーでは、Protected Storage PassViewというのがあるらしい。そのひとつのmailpv.exeを使ったら、簡単にテキスト書き出しもできるので、これを使ってProcess(mailpv.exe)とかもありかもなと思いました。 気軽に「こんなソフトありませんか?」ならこれで終了です。 おっしゃるとおり、Protected Storageに入っているようです。 これは既存のプログラムやC++なのですが、C#の方法は? C++だと、 PStoreCreateInstance = (TPStoreCreateInstance) GetProcAddress(hDll,"PStoreCreateInstance"); と書くところを、C#で書ければいいのかなと思うのですが、で、どう書きゃいいんでしょう? まずは、Windows\System32\Pstorec.dllを参照に追加して。 としようとしたら、「C:\Windows\System32\Pstorec.dllへの参照を追加できませんでした。ファイルがアクセス可能で、有効なアセンブリまたはCOMコンポーネントであることを確認してください」とかいわれてます。
アンマネージDLLの呼び出しで検索したらヒントになるかも
699 :
デフォルトの名無しさん :2009/02/20(金) 13:52:01
コードでリソースに新規文字列と値を追加、削除、編集するような処理はないでしょうか? 作成したSQLServerへの接続文字列を追加し、グローバル的に使いたいのですが・・ もしくは他にいい方法があるようでしたら教えて下さい
class グローバル変数{ public String 接続文字列1 = null; public String 接続文字列2 = null; … public String 接続文字列100 = null; }
修正 public static String 接続文字列1 = null; おれとしたことが
>>700 クラスですか
ちょっとそっちでやってみます
ありがとうございました
スタックオーバーフロー起こすのでスタックサイズを大きくしたいのですがどうすればできますか?
>>699 リソースは知らんけど、設定なら簡単に編集できるんだけどなぁ。2008でね。
追加、削除はしらない。
>>699 接続文字列程度なら暗号化して適当な設定ファイルにでも書き込むってのは?
ウチは大体XMLでやってるけど
Byte配列の中身を検索したいんだけど便利な関数ってありますか?
どう検索したいんだ… 普通にループで見て回るとかじゃなくって?
文字列で"テキスト"を検索するみたいに、 16進の"0x01 0x02 0x03 0x04"をまとめて検索できないかと思って・・・
前スレで見事に同じ質問を見たな
711 :
デフォルトの名無しさん :2009/02/20(金) 19:51:37
VisualStudio2008でApplication.DoEvents();を使うと応答ナシになって帰ってこない時が あるので、使わない方法を調べてるんですけど、以下のようなコードだと実行すらされて いない感じなんですけど、原因わかりますでしょうか? private IEnumerable<int> SiteCheck(WebBrowser webBrowser, string url) { webBrowser.Navigate(url); while (webBrowser.ReadyState != WebBrowserReadyState.Complete) { yield return 100; // Application.DoEvents(); // ThreadSleep(100); // これとおなじ } }
yieldはforeachをサポートするために使うもの。DoEventsの代わりではない。 タイマイベントでforeach (var dummy in SiteCheck(browser, url)) ; とかしたら動くかもしれないけどかなり変態的な手法なのでお勧めできない。
713 :
712 :2009/02/20(金) 20:04:00
訂正 タイマイベントでforeachはおかしいな IEnumerator<int> state; void Start() { state = SiteCheck(browser, url); timer.Start(); timer.Interval = 100; timer.Tick += timer_Tick; } void timer_Tick() { state.MoveNext(); } あえてやるならこんな感じかな
その昔、yield という API があってな・・・ Win16 の頃か・・・
DBにあるCLOB型カラムのデータをoledbを使用してstringで取得したいと考えていますが、 「データ型はサポートされていません」とのエラーがでて上手くいきません。 oledbではCLOB型の取得を行えないのでしょうか。 ----環境---- DB:Olacle10g .NET:3.5 ----ソース---- OleDbCommand command = new OleDbCommand("select clobColmun from clobtable", connection, transaction); OleDbDataReader dr = command.ExecuteReader(); if(dr.Read()) ・・・
ODP.NET 使え
oledb clobでググれば情報はいくらでも見つかる oledbでclobが扱えないんじゃなくて、 select使ってstringでとろうとするのが無理
>>716 現状システム全体がOLE DBで動いているため、
この部分のみODP.NETを使うというのは厳しい状況です・・・
>>717 if文以降でOleDbDataReader#GetBytes()でバイト配列を取得→stringへ変換という処理を想定していたのですが、
例外は以下の行で発生しているため、原因が特定できずに困っています。
OleDbDataReader dr = command.ExecuteReader();
>select使ってstringでとろうとするのが無理
という事は
OleDbCommand command = new OleDbCommand("select clobColmun from clobtable", connection, transaction);
の行自体に問題があるのでしょうか。
先ほどからググり続けているのですが、ピンとくるヒントが中々見つかりません・・・
OracleならSQL内でTO_CHARできないの?
ググったり色々試してみましたが現時点では出来ないに近い判断を下すしかないようです 一部できそうな内容も見つかりましたが、現状の問題の解決には至りませんでした ありがとうございました
System.Diagnostics.FileVersionInfo.GetVersionInfo で取得出来ないバージョン情報はどうやって取得すればいいんでしょうか? 例えば、火狐のBuildIDとかです WinAPIなら取得出来るんですけど・・・
int a = new int(); a.ToString; を (new int()).ToString; とかくことはできますか?
何故自分で試してみない
できるけど0.ToString();と同じだよ
書ける
この場合どうやってインスタンスにアクセスするんですか? デリゲートがなければ行方不明になる書き方のようなきがするんですが
usingは名前空間を省略するできるようにするためにあるんですよね? Dispose() メソッドが呼び出されるように書く為とはどういうことですか?
>>730 アクセスできない
実際行方不明になる
>>731 using (Bitmap bmp = new Bitmap(width, height)) { bmpに対する処理 }
と書くとスコープを抜けたときに自動的にbmpがDisposeされる
たまたま同じusingキーワードを使ってるだけで全くの別物
ありがとうです。 それってDisposeを呼べば済むことじゃないんですか? わざわざ紛らわしい名前を付けてまで自動的に呼ばれるようにする理由はなんですか?
Disposeって書きたくないから スコープを分離するため
>>734 Disposeを呼ぶときはかならずこういう風に書く必要がある
try { objを使う } finally { obj.Dispose(); }
こうしないと例外が発生したときにDisposeが呼ばれない
毎回こんなの書くのは面倒だから
しかしまあ確かに別の機能をなんで同じ名前にしたのかは謎だわな・・・
>>737 なるほど、deleteをデストラクタに書くようなものですね。
理解できましたありがとうございました。
C++って例外の時デストラクタ呼ばれたか?
その点については、C++/CLIはとっても楽。
>>725 API使おうと思ってググってみると頭おかしいんじゃないかって人のページに当たるので躊躇ってました
昨日からC#触り始めましたがC++先にやったからなのか痒いところに手が届かないことがしばしばありますね
C#はもうちょっと時間が経ったあとにやってみます
ありがとうございました
というか finally が仕様にないので呼んでくれないと 駄目という大前提が
finallyも必ず呼ばれる保証は無かったりする
public bool this[int cols, int rows] { get; set; } このthisはどういう意味なんですか? bool型変数thisの動的配列ってことですか? 動的でいいんでしょうか?
それはインデクサ get;set;ってあるとこからプロパティだと推測しろ
>>745 StackOverflowExceptionがそうなのだけど、
CLR2.0からはcatchも出来なくなったからもうどうでもいい。
CriticalFinalizerObject使うのが確実らしいよ
まあ、例外処理は、正規のロジックを分離するのが本分であって、予想外の事態に対処するってのは 使い方が違うからねえ。
752 :
デフォルトの名無しさん :2009/02/21(土) 17:11:22
WebClientクラスのUploadFileメソッドはファイルのみFTPに転送できて、フォルダは転送できないのでしょうか? フォルダを転送するにはどんな命令を使えばいいですか?
UploadFolder
ありがとう インデクサわかりました クラス = {1,2} としてあればインデクサで指定してある方法で代入とかできるんですね でもフィールドが2つあったらどっちに代入されるんですか?
それはコレクション初期化子といって,インデクサとは関係ない var list = new List<int> { 1, 2 }; は var list = new List<ind>(); list.Add(1); list.Add(2);と同じ
だから、thisという特別な名前しかインデクサには使えないのさ。
わかりました。インデクサって中でフィールドに代入する実装を書かなきゃいけないんですね 一番上のフィールドに自動的に入るとかかと思いました。ありがとうございました
>>757 ひょっとして、プロパティに関して自動プロパティしか知らない?
堅気のプロパティを知ってから自動プロパティを使った方が良いよ。
public int A{get; set;}
みたいなのしか書いた事ないなら、
private int a;
public int A{get{return a;} set{a=Value;}}
をまず知っておくべき。
759 :
デフォルトの名無しさん :2009/02/21(土) 18:02:08
>>753 WebClient wc = new WebClient();
wc.UploadFolder(?);
としようにもUploadFolder自体がWebClientの定義に含まれていないとエラーが出たんですが、どういうことですか?
フォルダはアップロードとかいう類のもんじゃない FTPならMKDコマンドか、WebClientで使えるのかな
環境はVisualStudio2005です。 ジェネリックコンテナのListやDictionaryで、 C++のstlにあるfront()やback(), リバースイタレータの機能ってどうやって使うのでしょうか。
Dictionaryには順番という概念がないので無意味 リンクリストはLinkedList<T> 逆順に列挙するにはforeach (var item in ((IEnumerable)list).Reverse())のようにする(LINQ)
ふむふむ。Dictionaryてハッシュなのですね。 C#で二分木に相当するコンテナってのはあるんでしょうか。
iterableじゃなくてenumerableで、概念上はforeachの中身は各要素に対して一回だけ 実行されて順番は未定義、foreachの中身は可換な操作のみ可、であるはずなのに、 何故かEnumerable.Reverse()がある不思議。実用上は仕方がない事とは言え。 俺としては、本当に順番は未定義にして、foreachの中身が可換な操作の場合のみ結果が 定義されるとした上で、並列実行なんかをサポートしてくれた方が嬉しいんだが・・・ まあ、内部的にIEnumeratorのMoveNext()使っている限りはどうしようもない望みなわけだが。
SortedDictionaryとかは内部的に二分木のはず。
767 :
764 :2009/02/21(土) 21:48:25
そういえば、Enumerable.Reverse()の実装をリフレクタで見てみたら、一度全部列挙して 配列にコピーする鬼実装になっていたような気がする。LinkedListが泣いている・・・
SortedListはインデックスで要素取得できるからそんなのいらない Reverseなどはusing System.Linq;をファイルの先頭に追加すると使えるようになる
>767-768 (;´Д`)もしかして、stl使ったほうがよさげ?
770 :
764 :2009/02/21(土) 21:59:10
>766
「拡張メソッド」の訳をさぼったっぽい。
System.Linq.Enumerableクラスの一連のメソッドは第一引数が
this IEnumerable foo
ってなっていて、実際にはIEnumerableを実装しているクラスノインスタンスメソッドのように
使える。C++のSTLで言う「アルゴリズム」みたいなもの。IEnumerableを実装していればみんな
同じ事ができる。ただし、内部的にIEnumeratorを使った列挙にまで落とし込まれるので、
>>767 に書いたみたいに順序付けられて先頭と末尾を持つコンテナの特性は活かされない。
>>768 SortedListはインデックスがある分、要素の追加がO(n)かかる。
実は、本当の意味での二分木ってないんだよね。
SortedDictionary:内部構造は二分木なのにバイナリサーチがない(あれば先頭、末尾を
取得するメソッドがなくても最悪O(logN)で先頭、末尾に辿り着ける)
List, SortedList:バイナリサーチあり。ただしインデックスを持っているので追加、削除
にO(N)かかる。
orz
俺は、スキップリストを自分で実装して二分木の代わりに使っている。確率的アルゴリズムで
もって局所的な操作を行っても平衡二分木状である事が保障され続けるナイスなデータ構造。
あ、SortedDictionaryのバイナリサーチがないってのは、IEnumerableに対する System.Linq.Enumerable.First拡張メソッドを使っても二分木構造が活かされないって意味ね。 キーが既に含まれているかどうかのバイナリサーチは(拡張メソッドじゃなくて)クラスのメソッド として実装されている。でも、それじゃ役に立たない場面が多い。
皆さんありがとうごさいます。 拡張メソッドも、STLもC#2.0では使えないようなので、 今ある機能で間に合わせることにしました。 先頭要素の取得は↓のような感じで。 SortedDictionary<Key, Value>.Enumerator e = contaner.GetEnumerator(); e.MoveNext(); return e.Value; でも、なんかもやもやする・・・
あ、SortedList.Enumeratorの実装次第では、System.Linq.Enumerableクラスが 拡張メソッドとして提供するFirstメソッドは高速(少なくともO(log N)、最初のノードを 内部で保持していればO(1))である可能性があるね。その代わりLastは内部で全部列挙 しやがるんだろうなあorz
>>773 大丈夫、拡張メソッドFirstの内部実装はそれだ。で、Lastの内部実装は
>>774 だ。
でも、そんなにSTLやアルゴリズムが好きなら、LINQ to Object(さんざん出ている
System.Linq.Enumerableクラスが提供する拡張メソッドのことね)は確実に
気に入ると思うよ。まだまだ足りない物は確かに多いんだけど。
LINQ to Objectは気にいりそうな気がしますが VS2008からみたいなので諦めます。 でもListの末尾要素を順序探査して拾うってのは、 ちょっとひどいような(;'A`) 将来的には改善されるとは思うので、 LinqがあるVS買ったら書き換えるようにします。
>>773 ねえ、それで、「順序に関する」最初の要素ってちゃんと取得できてる?
気になってリフレクタでSortedDictionaryの実装を見てみたんだけど、
内部でTreeSet<T>っていうinternalクラスを使っているのね(赤黒平衡木っぽい)。
で、GetEnumeratorするとこのTreeSetのGetEnumeratorに丸投げされて、
ResetしてMoveNextしてCurrentを参照するとルートノードが返される実装になって
いるっぽいんだが。
このTreeSet<T>をpublicにしてくれれば
>>773 のもやもやも解消するだろうになあ。
これはモノホンの平衡二分木になっている。それで、
InOrderTreeWalk(TreeWalkAction<T> action)
ってメソッドがあって、どうやら、条件式によって[a,∞)の形の区間を指定してその区間
に含まれる最初のノードを探索してくれるみたい。ただし、結局逆順の探索は実装されて
ない。orz.
>>776 Express Editionは無料ですよ。確か2005と共存もできるし。とりあえず入れて見たら?
業務での開発?
778 :
777 :2009/02/21(土) 23:11:09
あ、問題ないみたいだ。ごめん。左に左にと進みながらスタックにpushしている。
>777 趣味の開発なのですが、Expressエディションだと クラスデザイナが使えないようなので手をだしてません。 リファクタ機能とクラスデザイナの使い心地試すのを 第一優先でC#に手をだしてるものでして・・・。
Expressにリファクタ機能ないんだ!!
あるよ
手元のC#2008EEだと、 リファクタ(R) → 名前の変更, メソッドの抽出 しかないな。 インテリセンスはちゃんと効くけど
Enumerableの実装がどうこうとか言っている暇があったら、 自分で(拡張メソッドを)オーバーロードすればいいのに まあ、これくらい標準で用意してくれという意見なら賛成するが public static ListEx { public static T First<T>(this IList<T> list) { return list[0]; } public static T Last<T>(this IList<T> list) { return list[list.Count - 1]; } public static IEnumerable<T> Reverse<T>(this IList<T> list) { for(int i = list.Count - 1; i >= 0; i--) yield return list[i]; } }
>>782 それだけあれば十分じゃね?
つか、それしか使ったことない気がする
>>784 そうじゃなくて、IEnumerable<T>を想定した(汎用的で効率の悪い)実装ではなく、
IList<T>、etc. 専用に効率の良い(かもしれない)実装**も**用意してくれという話
てか、最初の単語くらいは見てくれよw
>>783 もちろんそれで良いんだけど、まさに、「標準で用意してくれ」って意見なんだよね。
それと、SortedDictionaryだと
>>773 みたいに列挙の必要はないのにEnumerator
をとることになって格好悪い。
具体的には、IEnumealeは順序を保証しない列挙に特化(Reverse, First, Lastなし, その代わり
foreachの並列実行サポート)して、IOrderedEnumerableみたいなインタフェースを追加する。
こいつには順序に従った区間(-∞,a]と等価なbool値デリゲートおよび探索開始ノードを取るLast,
順序に従った区間[a,+∞)に等価なbool値デリゲートおよび探索開始ノードを取るFirst, 及び順序に
従って前方、後方に移動できるIOrderedEnumeratorを与えるGetOrderedEnumeratorメソッドが
あって、順序があって先頭・末尾があるコレクションはこいつで表現される。そんでもって標準で
拡張メソッドで``アルゴリズム''を提供する。これが一番みんなが幸せになれるんじゃないかな。
LINQに慣れると、標準での汎用的なインタフェースへの拡張メソッドの提供という事の便利さが
身に染みる。
>>771 も気になるけれど、IEnumerable<T>, IList<T>, ICollection<T>インタフェースへの
拡張メソッドによる実装なので、ツリー状の構造を活かしたバイナリサーtはなくって、IList<T>
のインデックスベースのバイナイサーチしかないみたい。それはそもそもList, SortedListにはある
以上魅力に乏しいよなあ。
ああ、IOrderedEnumeratorなんて作らなくても、ノードを与えて、前方、後方のノードを取得する forward, BackメソッドをIOrderedEnumerableに含めれば良いのか。ますますSTLっぽくなってきた。 インタフェースの設計って難しいなあ。だから標準で(略)
実際FirstとかElementAtとかToArrayなんかはIList<T>の場合は特別扱いされるから 余計な心配はいらないよ ソース読めばわかる
各要素の値を見る必要のないメソッドはすべてIList<T>に対して特別に最適化されてるみたい
791 :
787 :2009/02/22(日) 12:52:08
どうにかして欲しいのはSortedDictionaryやLinkedListなんだ〜〜〜。
と叫んでみる。順序と特別な探索の方法を持つデータ構造を活かす汎用的な
(C++の``アルゴリズム''的な)方法がないんだよ。
IList, IList<T>だったらそりゃ特別扱いもされているし、
>>783 のコードでも、
>>771 のライブラリでも良い。
ただ、
>>773 のFirst()のコードは
>>778 によって、ルートからの探索でO(logN)で先頭ノードに
辿り着くので二分木の構造は結局活かされるみたいね。これはLINQの実装そのものだからLINQ
でも同じ。
792 :
デフォルトの名無しさん :2009/02/22(日) 13:32:49
いまcsvを読んでDataGridViewに表示しています。 さらに、csvのある項目から文字列を複数個生成し、それをArrayListに入れています。 そのArrayListをさらにFormのメンバ変数のArrayListに入れています。 「DataGridViewの1行のデータ」を使用するときは、表示されている情報のほかに、 上記のArrayListの文字列も使いたいのです。 今は選択された行のindexから、メンバ変数のArrayListからその行のArrayListを取り出して使っています。 これで動いているのでいいんですが、 たとえばDataGridViewの1行に直接不可視のカラムでArrayListを追加できれば、メンバ変数で別途管理しなくてもすむと思うんですが、 DataTableのColumnのAdd()で指定するDataTypeにはArrayListがありません。 こんなように、DataGridViewには非表示で、1レコードに紐付けて管理したいListやCollection等があった場合、 みなさんどう管理しますか?
Tag
PropertyGridと同じように普通にBrowsableAttributeが使えると思うんだけど、 そういうことじゃないのかね。 ほとんどDataGridView使ったことないもんで勘違いだったらすまんが。。
Visual C# Expressをインストールしました。 MS-DOSで.csファイルをコンパイルしようとしたけど出来ませんでした。 Pathが通っていないからだと思い、csc.exeを探したのですが見当たりませんでした。
それなら多分 .NET Framework を入れるだけでよかったのかも PATH は \WINDOWS\Microsoft.NET\Framework\v2.0.50727
Visual Studio Toolsのコマンドプロンプトからやってみて
>>795 %frameworkdir%\%frameworkversion%にある
そんな環境変数見当たらなければ、%windir%\Microsoft.NET\Framework\v2.0.50727
799 :
デフォルトの名無しさん :2009/02/22(日) 20:26:57
XMLで出力されるドキュメントコメントをHTML形式とかで見るいいツール知らないでしょうか。 ndocとかいうのがぐぐるとひっかかったのですが、 2008では使えないみたいで。
Sandcastleとか
801 :
デフォルトの名無しさん :2009/02/22(日) 20:32:59
オナこいてる方も、女とやってる方も教えてくんろ 他アプリケーションのコントロールのハンドルを取得して、 そいつにPostMessageなんぞ使って、 要するにそのアプリをコントロールしたいんだわ ところが、 SunAwtFrame ってウインドウクラスのコントロール達の ハンドルが取得できないどころか探せすらできない。 Spy++で見ても親ウインドウしか見つからない・・・。 これってJavaのクラス? なんか良い方法はないでしょうか?
ほぼsandcastle一択。 素のままで使うのは大変なのでsandcastle help file builderをフロントエンドとして使うのが良い。
javaのコントロールってウィンドウハンドル持ってないんだっけ? それならウインドウの中身を一枚の絵として描いてるだけなんだからどうしようもない
同じようなもので、IE のウィンドウがある。あれも一枚絵。 だけど、IE のウィンドウについては IHtmlDocument インターフェイスが用意されてる。 Java(Awt) に同じようなものがあるかは知らん。
>>798 というか今いれてという話なら 2008 じゃないかって気がするから
v3.5 の下だと思う > csc.exe
806 :
797 :2009/02/22(日) 21:25:33
無視すんなコラ
よくわかってない人が来ました。
>>806 たしかVC++以外のエクスプレスには無かったはず。
809 :
デフォルトの名無しさん :2009/02/22(日) 21:34:33
>>803 ,804
おまえらありがと
ちょっくら違う手を考えてみる
>>802 質問者じゃないけど、これ知らなかった
今インストールして試してみたが、便利だな
利用させてもらうよ
>>810 コンソール版も同梱されているので、VisualStudioの外部ツールに
タイトル:Sandcastle Help File Builder
コマンド:C:\Program Files\EWSoftware\Sandcastle Help File Builder\SandcastleBuilderConsole.exe
引数:$(ProjectDir)$(TargetName).shfb
"出力ウィンドウを使用"にチェック
"起動時に引数を入力"にチェック
って感じで登録しておくと便利。
すげえええええええ
813 :
799 :2009/02/22(日) 22:54:53
SandCastle使うと自分が適当に作ったライブラリが標準のライブラリと対等に見える不思議。 PresentationStyleはvs2005にするとMSDNと似たフォーマットになるよ。
C#2.0で質問です 親 ClassA→ClassB→ClassC 子 とクラスを継承していて、ClassCはインスタンスも生成でき、ClassCからの継承も可させたいけど、 ClassBやAから継承したクラスを作らせたくないようにしたり、直接、ClassBやAのインスタンスを 生成させたくない場合はどうすればいいですか? クラスライブラリとして公開したいので、ClassCは自由に利用してもらいたいのですが、 ClassBとClassAは非公開にしておきたいのですが、どうすればいいでしょうか。
AとBをinternalにして、C をpublicにすればいいんじゃね?
そう思ったんだけど、 アクセシビリティに一貫性がありません。基本クラス 'ClassA' のアクセシビリティはクラス 'ClassB' よりも低く設定されています。 ってエラーで弾かれるのです(´;ω;`)ブワッ
AやB自体のアクセスレベルはpublicのままで コンストラクタをinternalにする .NET Frameworkのクラスでは多用されてるやり方
なるほど、そんなやり方があったんですね ただ、それだとインスタンスが生成できないというだけで、 継承はできるので、継承元クラスのProtectedのメソッドが見えてしまったり、 インテリセンス(?)にIDE上ででてきてしまったりしますよね。 なるべく余計な情報を出したくないんですが、無理なら仕方ないのかな。
>>819 そもそも、それならClassAもClassBも必要ないはずだと思うんだけど。
全部ClassCに書けばいいじゃん。
派生できないベースクラスなど何の意味があるの?
ClassCという型の存在を隠したまま、そのインスタンスをClassAとして使わせたい、
ってのならよくわかるし方法もあると思うんだけど。
共通して利用する処理を基底クラスに書いておくってのは普通にないか? クラスライブラリごとに開発チームが違うような場合 最も表面的なところしか見せたくない場合もあると思うんだが
うんだから派生クラスを隠したいというのなら話はわかるけど……、 と言ってるんですが。
継承を使わないで、委譲させればいいんじゃないかな?
いや基底クラスの関数群はそのチームでしか必要ないクラスだから 派生クラスだけ公開したいという場合もあるんじゃないか?
ドスプロントでコンパイルしようと思って、Path通そうとしたら、 C:\Program Filesの中にcsc.exeが見当たらなくて焦った。 C:\WINDOWSの中にあったのね。
ドスプロントとかいつの時代だよ
Win7にも絶賛登載中ですが
>>821 そういう場合、お作法としては、移譲、
要するに、ちょっと面倒だけどメンバーとして持って、
ClassA a;
void Foo() { a.Foo(); }
とする方がいいということになってる。
>>826 PowerShell が .NET に依存してて、
.NET が GUI 機能に依存してるから外すに外せないらしいね。
.NET Framework の GUI 外したバージョンも作って欲しいんだけどなぁ。
コマンドプロンプト仕えよ
このスレ的にMonoってどうなの
スレちがい
833 :
デフォルトの名無しさん :2009/02/23(月) 09:47:12
834 :
デフォルトの名無しさん :2009/02/23(月) 13:37:43
C#でWiiリモコンの制御ってどうやるんですか? 参考になるサイトなどお教えください
>>834 まずはリモコンの素材について学んで来い
そしたら教えてやる
新しいものに対する拒否反応以上ではないような気がするな。 一度XAMLなしで簡単なプログラムを書いてみるといいよ。 やってる途中でバカバカしくなるから。
気にするな 理解した 向こうにレスする必要なし
>>834 Managed Library for Nintendo's Wiimote でぐぐれ。
DataGridViewにて困っております。 バインドしたDatatableのデータを更新すると、 グリッドの方にも反映されますよね? その時のセルを取得したいのですが、 CellValueChangedイベントで拾えませんでした。 何か方法よいありますでしょうか?
842 :
デフォルトの名無しさん :2009/02/23(月) 23:59:13
>>840 rowdataboundイベントでe.rows.cellsとかで取得できないの?
>>841 日本だとMS製品と水と油な感じの派閥でも、
海外では.NETに前向きな雰囲気。
Wiimote以外にも、iPhoneで.NET(Mono)使うとか普通にやられてる。
>>842 DataGridViewには該当するイベントはないですね。
似たイベントを探しましたが、見あたりませんでしたorz
BindingSource_EndEdit() CurrentCell この辺
847 :
デフォルトの名無しさん :2009/02/24(火) 00:22:15
>>845 ありがとう。いろいろ試しましたが、結局わかりませんでしたorz
やりたいことは、Datatable(ないしBindingSource)の値が
変更された際にDGViewの該当セル色を変更したいだけのですが、
何かスマートな方法なないかなと。
DGViewから該当行を検索しなおすしかないでしょうか?
BindingSource.ListChanged ソートとかフィルタされてるならBindingSource.IndexOfも
委譲するのにクラスのメンバにクラスのインスタンスを持って、 そのクラスのメソッドを実行するのが普通だと思うんだけど staticなメソッドを利用してもいいのかな? クラスのインスタンスをメンバに持ったほうがいいのなら、 なぜそっちのほうがいいの?
>>849 ListChangedはイベント、IndexOfはメソッドですよね?
どちらを使っても、更新セルが表示中のグリッドのどこに存在するか
取得できるということ?
あと、IndexOfを使うタイミングがわからないです。
質問ばかりですいません。
>>850 staticでいいなら別にそれでも構わんがインスタンス固有の状態をもてないじゃないか
>>851 ListChangedイベントで色の変更とかする
ただしBindingSource.Sortとか使ってると
ListChangedで報告される元リストのインデックスとDataGridViewで表示されてるインデックスが食い違うので
元リストのインデックスからDataGridViewで表示に使用するインデックスを探すのに使う
>>852 ありがとう、なるほど。
そういう場合はインスタンスに状態を保持しておいて、
そのクラスに処理を書いたり、基底クラスに記述するべきなんじゃないのかな。
そのクラスが保持するインスタンスに保持しているからいいのかもしれないけど。
基本はインスタンス固有の情報を引数に渡して、何かしらの値を返り値として得る
ような動作だと思っていたよ。
WBCかワールド・ベースボール・クラシックのどちらかを含み、かつイチローか松坂のどちらかを含むline、と正規表現で if (Regex.Match(line,"(WBC|ワールド・ベースボール・クラシック) && (イチロー|松坂)").Success) と書いてみたのですが、いまいちうまくヒットしないです。アドバイスお願いします。
Joinで結合したSelect文をから取得したデータを更新する場合、 CommandBuilderでの更新は出来ないのでしょうか?
856 :
デフォルトの名無しさん :2009/02/24(火) 16:35:35
C# Visual C# 2008でFormアプリケーションを作っています。 Form内のボタンを押したら、位置取得モードに移行し、クリックでFormの内側と外側のポインタの位置を取得しようと思っています。 位置取得モードというのは、便宜的な名称で、その状態のときには、外部のウィンドウとかをクリックしても操作できない状態になっているようにしたいということです。 private void button1_Click(object sender, EventArgs e) { Thread.Sleep(2000); MessageBox.Show("ポインタのX座標:" + Cursor.Position.X.ToString() + "ポインタのY座標:" + Cursor.Position.Y.ToString()); } これで、ボタンを押したら、2秒後のポインタの位置を取得するところまではできました。 Form内の場合は、 private void Form1_Click(object sender, EventArgs e) { MessageBox.Show("ポインタのX座標:" + Cursor.Position.X.ToString() + "ポインタのY座標:" + Cursor.Position.Y.ToString()); } でよいのですが、これだとFormの外の座標はとれません。 こういう場合って、どんなイベントハンドラorメソッドを作ればいいんですか?
>>857 private void Control_MouseDown(System.Object sender, System.Windows.Forms.MouseEventArgs e)
{
Control control = (Control)sender;
if (control.Capture)
{
textBox1.Text = control.Name + " has captured the mouse";
}
}
としてみましたが、とくにクリックをとれているようでもなく。
あとなにが必要でしょう?
control.Capture = true;//キャプチャ開始
コンパイラが生成するeventの登録・削除は [MethodImpl(MethodImplOptions.Synchronized)] add { myevent = (MyEvent)Delegate.Combine(myevent, value); } [MethodImpl(MethodImplOptions.Synchronized)] remove { myevent = (MyEvent)Delegate.Remove(myevent, value); } のようになってスレッドセーフになるようですが イベントを呼び出すために var f = this.myevent; if (f != null) f(〜); としますが、この読み出しは安全なのでしょうか? 例えば、別スレッドがaddをして、Combineの戻り値をmyeventに書き込んでいる最中に myeventを読み出し不正な参照を得たりしないのでしょうか? (参照が何バイトか知りませんが、4バイト中2バイト目まで書き込まれた状態で読み出すとか)
参照はアトミックなのだろう
MethodImplとかアトミックとか初心者らしからぬ言葉がでてきてますがなんですか?それは やさしく解説してくれてるところを紹介してください
>>860 んー。ちょっと確認した。
まず、C# コンパイラは特に volatile プリフィクス命令を使用
していない。
そして、delegate 自体はリードオンリーなオブジェクトだから、
結論として ldfld/ldsfld がアトミックかどうかにかかっている。
参照アクセスはある意味ネイティブポインタだから大体は
大丈夫な気がするが…これが仕様に明記されていないと
駄目なわけだ。
なのでこれより先は、ちょっと ECMA-335 当たらないと
いけない。ちょっと待って
>>857 正規表現といっても、gawkなら条件は&&だから。
&&でないとかいわれても途方にくれているので、C#の書き方を簡潔に頼む。
865 :
863 :2009/02/25(水) 00:33:35
866 :
860 :2009/02/25(水) 01:01:02
>>865 ありがとうございます。
自分も読んでみましたが、そんな解釈で良さそうですね。
スッキリできました。ありがとうございました。
そもそもgawkでそれが通るのか? なんか勘違いしてる気もするのだが
/foo/ && /bar/ なら通るw ただし、正規表現ではないがw 正規表現の話に戻すと、少なくともPOSIX準拠、GNU拡張、 Perl互換には && という演算子はない
>>860 空のデリゲートをコンストラクタで登録しておけば
nullチェックさえ不要
すごいバカきた
>>860 の質問意図にnullチェックは関係ありません
質問です。 TextBoxに日本語を入力して確定していない状態(文字に下線が付いている状態)で ボタンをクリックすると入力が消えてしまいます。 ボタンクリックハンドラ内でTextBoxにフォーカスを設定しましたが消えてしまいます。 ボタンを押してもキャンセルされない方法はありますでしょうか?
KeyDownでEnter押したことにしてもアウトなのかな? というか、仕様だからで逃げ切れると思うんだが・・・
編集確定してないうちは文字入力ソフトが制御持ってるからControl関係ないような?
>>875-876 他のパソコンで実行したら消えませんでした。
私のパソコンの設定がおかしいかもしれません。
すみません、ありがとうございました。
質問です。 C#でClient&Server方式のアプリを作ろうと思います。 ClientはFormアプリです。 Clientは物理ファイルをサーバにアップロードし、 合わせてDBに登録するデータをサーバに送信します。 ServerはClientから送られてきたデータを TransactionをかけてDBに書き込み、 ファイルの保存を終えたらコミットします。 ファイルサイズは数10MBになります。 通信手段としてはWebServiceを用いるしかないと思うのですが、 クライアント側のネットワークの環境によっては WebServiceを実行できない可能性があります。 WebService以外でサーバサイドでプログラムを実行する手段 (物理ファイルの移動とデータ登録にトランザクションをかける) はありますでしょうか?
>クライアント側のネットワークの環境によっては >WebServiceを実行できない可能性があります。 例えばなんで?
880 :
878 :2009/02/25(水) 21:46:27
>>879 質問の論点は
>>WebService以外でサーバサイドでプログラムを実行する手段
>>(物理ファイルの移動とデータ登録にトランザクションをかける)
であって
WebServiceを実行できない原因追求ではありません。
ついでに議論の幅を広げるとして質問に答えます。
VisualStudioのWeb参照の追加で自動的に作成された
スタブとWebServiceクラスを利用した場合、
サーバサイドがHTTP1.1 クライアントのネットワークがプロキシ + HTTP1.0
なぜかこの環境だとWebServiceが中断されてしまうようです。
ServerにはSoapを受信した形跡が残っていますが途中で切れています。
Soapを直書きして直接HttpRequestからWebServiceを叩く方法を取れば
いけるのですが、直書きになるためデバグが大変に思えます。
というわけでWebサービス以外で実現可能な方法が無いかと模索しています。
>>880 >WebServiceを実行できない原因追求ではありません。
クライアント側のネットワークの環境によってWebServiceを実行できない可能性があるんだから、
どんなネットワークの都合なのかわからないと返答内容が無意味なものになるかもしれないじゃないか
そこを明らかにせず質問するほうが悪い
さらに開き直って質問の論点が違うなんて言うようじゃ誰も質問に答えねーよ
そうそう、あんたは試験問題の出題者じゃないんだから。 問題点の所在を明確にすると、より合理的な解決法が見つかる場合もある。 ていうか、初心者板だと、問題点の設定が最重要なステップになる事が普通。 まあ、試験問題でも、試験のためだけの問題設定ってのはしょっちゅうあるがw 〜の処理のために書いた以下のコードは正しく動作しない、直せ ⇒むしろ全部書き直したいんですが・・・、みたいな。
883 :
878 :2009/02/25(水) 22:10:13
>>881 ???
開き直って 質問の論点が違う なんて書いた覚えはありませんよ。
そう感じられたのならとても残念です。
>そこを明らかにせず質問するほうが悪い。
このスレッドは
(ry もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
私の質問内容はこのスレのポリシーからは外れてないと思いますが・・・。
つまり私自身原因がわかってないのです。
なので質問しました。駄目なのかなぁ・・・。
質問した事は悪くないけれど、 >質問の論点は >>>WebService以外でサーバサイドでプログラムを実行する手段 >>>(物理ファイルの移動とデータ登録にトランザクションをかける) >であって >WebServiceを実行できない原因追求ではありません。 が悪いんだと思うよ。
885 :
878 :2009/02/25(水) 22:24:54
>>884 あんまり長い文章書くと
どこを縦読み? とか言われるんでトラウマなんですよ・・・
今回知りたいなと思ったことは
WebServiceが使える使えない環境云々ではなく
それ以外で実現可能な方法があるか
あるならどういう技術か ということでしたので。
Webサービスが使えないことを伏せた場合、
「Webサービスを使おう」って返ってきちゃうことを予想して、
あえてWebサービスを使えないという事実だけの設定で
質問したのです。不愉快を感じたのであれば御免なさい。
>>883 例えば、iisにaspxのっけて、ファイルをhttpでpostしてaspxでDBに入れればいいとか、
フォルダ共有かけといてファイルをコピーして、それを検知したらDBに入れるクライアントが動作するとか、
メールで送信して・・・以下同文、
FTPでアップロードして・・・以下同文
とか原始的な代替手段を提示したところで、
>クライアント側のネットワークの環境によっては
が実はクライアント側が切断されている場合があってネット経由では無意味
という意味だったら、すべての解凍が無意味になるだろ?
だから、どんな事情で利用できないのかを知ることが
現実的な解決法を指摘する重要なファクターになるんだよ
887 :
878 :2009/02/25(水) 22:34:55
>>886 なるほど、勉強になります。
(解決法を指摘する重要な・・ということに関してです)
>クライアント側のネットワークの環境によっては
>WebServiceを実行できない可能性があります。
例えばなんで?
この意味を ネットワークの環境が知りたい
と捉えることができず、
Webサービスが実行できない事実のみに主眼が置かれていると
感じてしまったのは 私の人間性の欠如です。
申し訳ございません。
888 :
デフォルトの名無しさん :2009/02/25(水) 22:46:59
>>854 >(WBC|ワールド・ベースボール・クラシック) && (イチロー|松坂)
検索エンジンのキーワード入力じゃあるまいし、これでは一致するわけが
ないと思うが…。というか、正規表現の使い方ほんとにわかってるの?
単に含んでいるか含んでいないかということを知りたいだけなら、
String.Containsを使った方が楽。速度は遅いが。
>>886 はツンデレ
サーバからPullはできないだろうから、クライアントからPushするとしたら、
Soap以外だと、直接ファイルをやりとりするか、
WebServerを利用する以外になんかあんのかな?
>>887 なんか要求としてはシンプルそうだし、HTTP より通るのなんて
あまりない気がするからまず別のHTTP な代替として
WebHttpBinding でも使ってみれば?
>>873 じゃあ後何を気にするんだ?
addもremoveも同期実行されるのに。
だから、「この読み出しは安全なのでしょうか?」って聞いてるだろ。 var f = this.myevent; ↑ここだよここ それ以降のコードはどうでもいい=null チェックがとかどうでもいい というか答え出てるやり取り見てすらわからんのかお前は
読み出しは呼び出しのタイポだろ
駄目だこいつ
何をイライラしてるんだ 本人? そもそもその意味の無いif文や代入を意地になって残す必要は無いってことだろ
ほしい答えだけくれって人は2chよりokwaveのが向いてる むしろオフトピ的なレスがほしい人はスラド
スラドは生理的にダメだ
空delegate入れるのキモいだけで利点ゼロだから嫌いだけどな個人的に。 一カ所(Onなんちゃら)でしかでてこないのでヌルオブジェクトの利点とか まるで出ないくせにちょっと頭捻りました感がこう。 一応言っとくとある程度使ってみて駄目だと思った上で言ってる
private List<EventHandler> myEvent = new List<EventHandler>(); public event EventHandler MyEvent { add { myEvent.Add(value); } remove { myEvent.Remove(value); } } protected virtual void OnMyEvent(EventArgs e) { foreach (var handler in myEvent) handler(this, e); }//スレッドセーフは無視 これと同じと考えたらそんなに気持ち悪くなくね? まあ自分も使わないけど
本で今C#の勉強をしているのですが、よく分からないところで詰まったので質問です。 VS2008,Vistaの環境なのですが using Sysytem.Drawing; このusing文に下線が付いてコンパイルが通りません。 何か間違っているのかとググってみても、普通にある文のようなのですが。
901 :
900 :2009/02/26(木) 10:43:26
>Sysytem Systemです、ここで間違えてどうする俺・・・
参照設定右クリックして参照の追加で使いたいクラスが含まれてるアセンブリを参照する どのアセンブリに含まれてるかはヘルプのクラスの解説に載ってる
>>902 追加でコンパイル通るようになりました、ありがとうございます。
フォルダから配列に追加するときに、特定のものをのぞく方法/または配列に配列を追加する方法を教えてください。 01.zip 02.txt 03.jpg 04.png とあるとき、zip以外のすべてを配列にいれるにはどうしたらよいでしょう。追加しようとして、 string[] files = Directory.GetFiles("*.txt"); files = Directory.GetFiles("*.jpg"); としたら、jpgだけしか配列に入ってませんでした。 string[] files = Directory.GetFiles(!("*.zip")); もちがうし。 よろしくお願いします。
string[] files = Directory.GetFiles("") .Where(file => !string.Equals(Path.GetExtension(file), ".zip", StringComparison.OrdinalIgnoreCase)) .ToArray();
ばっちりできました。ありがとうございました。
VS2008のC#でWindowsアプリケーション作ってます。 Settingsにキーと値を定義すると勝手にapp.config作ってくれるのはいいんですが、 configにコメント入れたいときってどうすればいいんですか? 手でコメント入れても、Settingsを編集すると、上書きされて消えちゃうので困ってます。
>>907 applicationSettingsの外側のは勝手に書き換わらなかったような。
>>908 そこは確かに消えないみたいですね。
ですが、コメントを入れたいのは、定義した各キーの部分なんです・・・。
キーごとに、そのキーが何を意味するキーなのかっていうコメントを入れたいという
需要ってあまり無いんですかね?
Settingsのデザイナ画面からコメントまで記述できるようになっててくれたら良かったんですが。
>>895 イライラしたというよりあきれたんだよ。それも
>>870 じゃ
なく
>>891 と
>>893 に。解ってないようにしかみえないから。
それと質問者じゃないっていうか回答したほうです
確かにふらっと寄りじゃねー話題かなぁとは答えながら思った
からフォローしとこうと思って
>>892 になってそしてあきらめた
シツコイナ
>>911 3レス目ぐらいなんだけどなぁ。
まぁ、もともとの話題もだけど、本人?とか勘違いされたままだと
さすがにあれというか心苦しかったので。
>>909 デザイナで設定の行を選択したときに、プロパティグリッドのほうに
Description ってのがあるだろ、それ編集するとドキュメントコメントで
summary になるけどそれじゃなく?
処理中の様子がわからないのでラベルかなんかに進行を表示したいのですが、 System.Threading.Thread.Sleep(1); とか入れるだけでは何も反映されません。 他になにか手続きが要るのでしょうか。
なんというせっかちさん
>>912 Settings.Designer.csファイルの各プロパティにsummaryコメントが入ってくれるんですね。
気づいてませんでした。ありがとうございます。
これはこれでありがたいです。
ですが、app.configには反映されないんですね・・・惜しい・・・。
全部のプログラムが完成してからapp.configにコメントを追加することにします。
ありがとうございました。
>>913 重い処理は別スレッドでやる必要がある
手軽なのとしてBackgroundWorkerを使ってみたら?
>>917 リフレッシュはなんかエラーにされてしまいました
>>916 トライして見ます。難しそう・・・
ちなみに label1.Refresh; とした時のエラーは以下です。 割り当て、呼び出し、インクリメント、デクリメント、および新しいオブジェクトの式のみがステートメントとして使用できます。
Refresh()な
まずどれくらいの頻度で書き換えが起きているかを書け
文法の時点でアウトなのか…・
コードスニペットとインテリセンスの違いってなんだっけ
違いってか全然違うだろが
コードスニペット=コピペ インテリセンス=MSDNより役に立つヘルプ こんな感じ?
>>927 そんな感じじゃね?
うちの場合、巣にペットは同じようなコードを社内で書くときに
ある程度画一化された書き方になるようにするために独自のスニペット作ってやってる程度かな・・・
VisualC#2008環境での質問です。 いま開いているファイルをボタンを押したら削除したいと思います。 string imgFile = @"C:\tmp.jpg"; private void Form1_Load(object sender, EventArgs e) { pictureBox1.Image = Bitmap.FromFile(imgFile); } private void button1_Click(object sender, EventArgs e) { System.IO.File.Delete(imgFile); } とすると、当然、いまファイルを開いているので削除できません。 private void button1_Click(object sender, EventArgs e) { Close(); System.IO.File.Delete(imgFile); } とファイルを閉じてから削除しようとすると、アプリケーションじたいが終了してしまいます。 このように開いているファイルを削除するときには、どのようにしたらよいでしょう? ご指導お願いします。
そのClose()って、this.Close()じゃ・・・。 ファイルの削除の仕方ではなく、ファイルの閉じ方を間違っているのが問題。調べてみて。
わろた
>>930 ありがとうございます。
おっしゃるように、ファイルの閉じ方を間違えているようです。
でも、this.Close()でも例外が出てだめなんですが…。
>>932 this.Close()した結果を報告するんじゃなくて
ファイルの正しい閉じ方を先ずほうこ(ry
この場合のthis.Close()はフォーム1を消してしまいそうだね
>>929 クローズは
pictureBox1.Image.Dispose();
でいけるかな
もしくは、最初からロックされないように読み込み処理に小細工を加えるとか
using (Image img = new Bitmap(imgFile)) {
pictureBox1.Image = new Bitmap(img);
}
>>935 ばっちりでした。ありがとうございました。
ロックしない読み込み、ロックの解除。どちらもでき、削除できました。
ところで、削除ではなく、ゴミ箱に移動するのはどうするんでしょう。
System.IO.File.Move(imgFile, "C:/RECYCLER/" + imgFile);
としたら、「指定されたはすのフォーマットはサポートされていません」。といわれてます。
質問。 IEnumerableって、 public interface IEnumerable { IEnumerator GetEnumerator(); } public interface IEnumerable<T> : IEnumerable { IEnumerator<T> GetEnumerator(); } てな感じに宣言されてるけど、同じコードを自分で書くとジェネリクスじゃない方の メソッドが非表示になるって警告が出ちゃうのは何でだろう。
940 :
939 :2009/02/27(金) 20:29:45
ていうかスレ違いだが、VBの"My機能"って一体なんじゃこりゃ?
>>939 こんな方法あるんだ
936じゃないけど勉強になる
>>938 警告のメッセージに対処法も書いてるだろ?
さすがVisualBasic名前空間 Microsoft.CSharp名前空間に定義されてるものと規模が違いすぎて笑ってしまった これだけあればたしかに便利なものも埋もれてるかも
>>937 できちゃった。やった!
ありがとうございましたっ。
>>945 Strings.StrConv()で全角半角の相互変換とか、地味に便利だよな。
それでVBのランタイムが追加で必要ないんだから、CLRってグッド!
>>942 フレームワークの方のは何も書いてないのに警告でないのは何で?
>>947 なんでStringクラスに半角全角変換入ってないんだろ?
>>949 コンパイルするときには警告出てるけど無視してるのかもしれないだろw
それはともかく,new付ければ警告は出なくなる。
newはC#のコンパイラの警告を抑制するためだけにあるものなので
コンパイル後はnewを付けたかどうかの情報は残ってない。
>>950 unicodeにそんな概念はないから
プログラミングC# 第5版って評判どうでしょう
質問 vs2008 sqlserver2005 主キーがint型でautoIncで自動採番のDBテーブルに対して 型付データセットのTableAdapterでクエリの追加から クエリビルダ起動してINSERT文作成すると、 INSERT文の後ろにSELECT文が作られて WHERE (hogeID = SCOPE_IDENTITY() って書かれてるんだけど、 クエリビルダ完了してTableAdapterに追加されたInsert文のCommandプロパティ 見てみるとSelect文が消えてるのはなぜでしょう? そもそもクエリビルダでは自動採番されたIDを取得することはできない?
クエリビルダのどっかのオプションで、いまインサートしたデータを取得してdatasetを更新する みたいなところにチェックをいれてるから。
>>938 名前空間が別じゃない
System.Collections
System.Collections.Generic
名前空間が別だろうと関係ない 基底クラスのメソッドと同じシグネチャを持つメソッドを定義すると警告は出る
そっちでも警告が出るのね。了解。 非ジェネリックのGetEnumratorを実装する場合は明示的実装になるのかな? やってみりゃわかるか。
class Hoge<T> : IEnumerable<T> { public IEnumerator<T> GetEnumerator() { ,,, } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); // こうかな。なんか落ち着かない・・ }
別フォーム(Form2)からForm1に配置したDagaGridViewへ値を代入したいのですが、 現在のセルと隣のセルへ値を代入する場合はどうしたらよいのでしょうか? get { return dataGridView1.CurrentCell.Value; } set { dataGridView1.CurrentCell.Value = value; } これだと、現在アクティブなセルへの代入は出来るのですが、隣のセルへの代入が出来ません。
timerが次に呼び出されるまでの残り時間を取得したいのですが、ググってもよくわかりませんでした。 どうすれば取得できるんでしょう。
タイマー起動した時にDateTime.Nowを保存しておいて、必要な時にDateTime.Nowをもう一度 取得して引き算すれば良いんじゃ?
>>960 プロパティじゃなくてメソッドにして複数の引数与えればいいじゃん?
964 :
960 :2009/02/28(土) 11:28:41
get { return dataGridView1[i, ii].Value.ToString(); } set { dataGridView1[i, ii].Value = value; } 結局動的に選択セルを受渡しでOKでした。。
パブリックフィールドにインデックスを代入させてからプロパティ呼び出しをするっていう
勝手規約を定めちゃったの?
それは良くない解決方だよ。
>>963 の言う通りにした方が良いよ。
>>964 みたいにするくらいならdataGridViewをパブリックに公開した方がマシだよ
意味がない
967 :
960 :2009/02/28(土) 11:52:34
ダメダメ解決法なのか _| ̄|○ il||li 複数の引数をあたえるって言うと、どんな感じにするんですしょう?
968 :
965 :2009/02/28(土) 11:58:42
>>967 プロパティを止めて、メソッドにするって事。メソッドの定義の仕方は分かるよね?
他の方法として、
>>966 が書いているdataGridView1をパブリック公開するって方法がある。
これはdataGridView1の色々なプロパティを弄られるのがOKな場合限定の解決法。
もう一つの方法は、インデクサを使う。これは、dataGridView1[].Valueの取得、設定が
そのフォームの外部に公開する最も主要な機能である場合にだけ用いる限定的な方法。
というわけで、一つ目がお勧め。
むしろインデクサでいいじゃん
かっこインデクサ
メッソッドっていわゆる関数のことですよね? public string DataGridViewCel { get { return dataGridView1[0, i].Value.ToString(); } set { dataGridView1[0, i].Value = value; } } iには現在のセルのRowが入ります。 現在はこんな感じにして、別FormからDataGridViewCellに値を代入してるのですが。。 もしよろしければ、具体的なコードを教えて頂きたい。。
もうそれでいいよ
>>971 君が書いているのはプロパティ。
メソッドの書き方を勉強して。
>>971 public void SetDataGridView(int columnindex, int rowindex, string value){
dataGridView1[columnindex,rowindex].Value = value;
}
public String GetDataGridView(int columnindex, int rowindex){
return dataGridView1[columnindex,rowindex].Value.ToString();
}
public string Print{ set{Console.WriteLine(value);} }
おおっ、これがメソッドの書き方か〜。勉強になるな〜。
いやいやいったい今まで何を勉強してきたんだ。
public byte[] Read{ get{ byte[] b=new byte[value]; stream.Read(b); return b; } }
メソッド知らなくてプロパティを知ってる、 というのも何だか凄いね、どういう学習順序なんだろう。
>>979 最初にコピペしたサンプルコードに依存するのでは?
雛鳥が卵から出てきて最初に見た動く物を親だと認識するようなものですか。
すりこみ?
しょうゆう事
メソッドの中でしか使わないけど値を保持しておきたいローカル変数ってたまにありますけど、 C++ならstatic変数にしちゃえば実現できますがC#では使えません。 クラスを再利用したりする上でお行儀が悪い事はわかりますが、 こういう場合はフィールドとして持つしかないんでしょうか? 特定のメソッドだけが参照できるようなスコープにしたいです。 じゃないとクラスの属性としては相応しくないフィールドが増えたり、 無駄に変数名を考えなくちゃいけなかったり、 別のクラスを作って実現しようにもあまりにも生産性が低いと思います。
> メソッドの中でしか使わないけど値を保持しておきたいローカル変数ってたまにありますけど、 ない。
>>986 クラスから独立した関数というのは存在しないから、フィールドに持てって事だな。
VBには関数内に宣言できるStatic変数があるのだけどC++と動作が違うのでバグの元なんだな。
>>987 例えばゲームなんかだとそれぞれに独立したカウンタなんかを持たせたい時に必要です。
それすらも別クラスにわけろというなら著しく生産性が落ちまくります。
>>988 デリゲートとか拡張メソッドとかあるんだから、
追加機能として特定のメソッドだけに参照できるフィールドのような機能が追加されてもよさそうですが、
ダメな理由ってあるんですかね。
机上の理論だけのオブジェクト指向ってもう古いと思います。
続きは相談スレでどうぞ
>>986 yield return;をうまく使うとか。
>>986 そんなユーティリティクラスを作ればいいのかな?
実例があれば代価案が出せるかも
単純にパラメータにする方が適切だけと思うけどねぇ。 「たまにある」程度のことなのに著しく生産性が〜ってのもよくわからん。
>>989 >机上の理論だけのオブジェクト指向ってもう古いと思います。
つ F# これからは関数型っすよ
っ Rules これからもビジネスルールですよ
Railsのつもりだったらそれだ
>>989 フィールドに宣言すればいいこと。
メソッド内にスタティック変数を自在に作られたりしたら後で面倒なことになる
関数スタティック変数をリセットしたいときはどうするの?インスタンスが複数のときはどうするの?
誰かほめろよ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。