このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
>>1 おつ
で、早速質問なんですけど、
ループ文の中で変数を宣言するとループするたびに変数を宣言することになりますが、
これってC#的にはアリなんでしょうか?
それともあまりよろしくないのでしょうか?
別にいいんじゃないの それぐらい最適化してくれるだろ
その変数が必要なスコープで宣言
むしろ外で宣言するほうが問題があるっつーの
VC#2005のWebBrowserについて質問なのですが IEのようにマウスのXButton1・XButton2を戻る・進むに対応させる方法ってないですか? public webBrowser() { this.webBrowser1.Document.Click += new HtmlElementEventHandler(Document_Click); } private void Document_Click(object sender, HtmlElementEventArgs e) { if (e.MouseButtonsPressed == MouseButtons.XButton1) webBrowser1.GoForward(); else if (e.MouseButtonsPressed == MouseButtons.XButton2) webBrowser1.GoBack(); } このようにしてみたのですが、どうもうまくいきません。 中ボタンで試すとうまくいくのですが、第4・5ボタンだと無反応になります。 他にもControl.MouseButtonsで試してみたのですが同じ状況です。 何か方法あれば教えてください。
FormStartPosition.CenterParent って ShowDialog(IWin32Window) だと 意図どおりに中央に表示されるんだけど Show(IWin32Window) では中央に表示されない モーダレスで中央に表示させるには自分でコード書かないといけないの?
14 :
11 :2006/10/31(火) 00:06:57
>>12 リンク先のコードをC#で書き直したところうまくいきました。
VBは全くわからないのでちょっと怪しいコードになってるかもしれませんが
様子を見ながら必要があれば修正していきます。
ありがとうございました。
16 :
デフォルトの名無しさん :2006/10/31(火) 08:01:30
C#ではエントリポイントはMain一つということですが、 DLL関数のようにいくつも作ることは、DLLプロジェクトにしても無理ですか?
意味が分からんが、一つのアセンブリに Main メソッドを複数定義する事はできる。 その際は /main かプロジェクトのプロパティでエントリポイントを指定する。
18 :
デフォルトの名無しさん :2006/10/31(火) 08:16:13
ありがとうございます。 機能別に実行ファイルを分けると、そのたびにアプリケーションの初期化をするのは負担がかかると思い、 dllの一部の機能をコマンドラインから呼べるようなものにすればスムーズかなと。 スクリプトから繰り返し呼び続けるのが目的なので。
コマンドライン引数使えばいいだけじゃ・・・
Main(string[] args){switch(args[0]){...
それ引数無しで起動したら例外起きるぞ
mainにする必要がない。 で終わり?
ドロー系ソフトのようなレイヤーの概念は無いのでしょうか? 質問1: 事前チェックに以下を行ったところ期待と異なる動作をしました。 フォームを白色でBackColorを指定し、 その上にパネルを置きパネルを透明色で矩形塗りをしたところ、 矩形部分が完全に透けてデスクトップが見えてしまいます。 パネル下のフォームの白が見えると思ったのですが違ってました。 これは、仕様なんでしょうか?それとも自分の作ったソフトのバグ??? 質問2: やりたかったのは、ドロー系ソフトのようにグリッドを下のレイヤーにおいて、 上の別レイヤでワーク作業を行っても、グリッドの書き換えを行わなくても 済むようにしたかったのです。グリッドは書き換えるしか無いのでしょうか?
Graphicsオブジェクトを使って自分でバリバリ描画するのが普通 もちろんグリッドは消えるたびに書き直す
今度、c#を勉強する事になったのですが、 おすすめの入門書ってありますか? ASP.NETと.NET FRAMEWORKも一緒に勉強すると良いと言われたのですが、 プログラミングに触れるのは初めてなんで、先に文法を抑えたいです。 テンプレにも解説サイトがいくつかありますが、 本から入ったほうが分かりやすいですかね?
26 :
23 :2006/10/31(火) 20:37:31
>>24 Thx.
動作見てると、それしかなさそうだね。
後は、下絵のコピーを別に取っておいて、
コピーしなおすかぐらいかな。
Imageにグリッドや表示したいものをあらかじめ描いとけば 再描画時にはそれをそっくりそのままDrawImageするだけ
Visual C#でOLEオートメーションサーバーを作る方法はありますでしょうか。 WSHからCreateObjectで呼びたいのです。
29 :
23 :2006/10/31(火) 21:13:13
>>28 それで何をしたいのかにもよるが、
取りあえず MSDN/ヘルプで COM との相互運用だかそんな感じの記事を嫁。
オブジェクト指向はJavaの入門書の方がいいかも
34 :
25 :2006/10/31(火) 23:38:27
ExpressEditonなんていいものがない時代、 コマンドラインでコンパイルして遊んでたけど、 そのくらい好きでやってるうちに文法なんて習得できないか?
非同期通信の練習がてら、チャットアプリケーションのようなものを作ろうと思い、 Form1とは別に、別の外部クラスを作って、その中に通信やらバックエンドの処理をメソッド化して、GUIからそいつらを呼んで動かそうと思うんですが、 その場合、通信結果の取得等は外部クラス側が行ない、そこから直接Form1のrichTextBox等のプロパティを書き加えるようなコードになってしまうので、 部品化という意味では不自然なのではないかと…。 で、delegateやeventあたりがキーワードになってくるような気がしてるものの、 この場合、独自のeventを作って使うのかdelegateを使うのかで迷ってます。
>独自のeventを作って使うのかdelegateを使うのかで どっちもやることは変わらないような。。。 イベントつくっちゃってeventargでデータわたしたら?
>>34 文法書にとらわれると、先に進めないよ。
あの内容は、上級者に取っては物足りないかもしれないが、
初心者なら十分すぎる内容というか、通常の業務なら問題ないレベル。
あの内容で物足りなく感じるのは、有る程度コーディングになれたあとじゃなかな?
まずは、あれをマスターして(実際に動かしみる)、次に行くことを勧める。
多分、他の文法書に戻ることは無いと思う。
プログラミングは、本では学べないので、実際に動かすことが大事。
だから、文法書ではなくて色々サンプルを動かすとか、
自分でコーディングするのが一番(そういう意味ではスポーツと似てるかも)。
とにかくさわってなれるのがまずは大事。
有る程度、コーディング出来るようになったら、Windowsプログラミングに移る。
色々どんなことが出来るか知るために、Tips集で動かしてみるのもいいと思うよ。
多分、↓は買って損はしない。
Visual C#.NET逆引き大全 500の極意
http://www.amazon.co.jp/gp/product/4798008133 そこで、疑問点が出たら、下を読み返す(あるいは並行して読む)。多分これが近道。
C#によるプログラミングWindows 上下
ASPはその後かな。
確かに、イベントとデリゲートの使い分けって いまいちはっきりしないなぁ。 他の人はどのようなときには、イベントを使って、 どのような時にはデリゲートを使ってるの?
通知する時はイベント、処理を委譲する場合はデリゲート デリゲートメンバを公開する事は普通無いな
>>37 ,40
なるほどです。では、今回はとりあえずeventを使ってやってみる事にします。
有り難う御座いました。
42 :
デフォルトの名無しさん :2006/11/01(水) 08:07:55
この流れなら言える! .NETを使ったちょっと大きめなWinアプリの設計について最近疑問が生じてまして、 小さいプログラムなら、コントロール貼り付けてちょこちょこっと書いておkですよね。 そういうプログラム多いと思います。 でももう少し複雑化してくると、コントロールごとに同じような処理が分散して見にくいコードになるんじゃないかなーと。 MFCのころのドキュメント・ビューみたいな大きな括りの設計思想って.NETには無いんですかね? それともこれからはコントロールごとに括るのがヨイ?
>MFCのころのドキュメント・ビューみたいな >大きな括りの設計思想って.NETには無いんですかね MFCはゴミですが、なにか?
そうだね。で?
>>42 イベントハンドラに直接本質的な処理を書かなければいいだけ
monoってどうなの?
47 :
どん :2006/11/01(水) 21:10:11
質問です。 IEが立ち上がっているとしてその(現在)アクティブなIE上の データを全てコピー(Ctrl + A)しテキストファイルに出力するという アプリを考えています。 ここでどうしても分からない点がありまして、それはその現在アクティブな IE上に対してキーボードから(Ctrl + A)を押下したのと同等の 処理を行い、メモリ内に全てコピーする方法です。 (テキストファイルに出力する部分は分かります。) ご存知の方がいらっしゃいましたらお教え願います。
一番簡単なのは SendKeys だな。
>>49 書かれている事以外に何をするのかによるけど、
それだけならUWSCとかのマクロで十分な気もする。
50 :
どん :2006/11/01(水) 23:39:33
>>48 SendKeysですか。確認してみます。
>>49 極力マクロは使わずにC#で実装したいと考えています。
とりあえず、SendKeysを使用してみたいと思います。
51 :
デフォルトの名無しさん :2006/11/01(水) 23:43:58
>>42 俺もそう思う。
ポトペタ環境って初心者がとっつきやすいだけ。
53 :
デフォルトの名無しさん :2006/11/02(木) 00:08:40
Dataadapterでデータテーブルを更新するプログラムを作成しています。 1件データをとってきて、画面で加工し(この時点でrowstateがmoifyになる) それをdataadapterのupdateメソッドで更新しています。排他処理は楽観的ロックです。 この方法でUPDATEすると、データ取得時の状態とDBの状態がかわると エラーがおきてしまいます。 adapterのsqlコマンドにはその時点のデータを再度取得するように 取得時と同じsqlを設定しているのですが いわゆる後勝処理にできません。 A端末で データをリード B端末で データをリード B端末で データを更新 A端末で データを更新 ←ここでエラーがおこる これを、最終的にはAの更新結果がDBに反映されるようにしたいのですが、 dataadapterを使ってこのようなことはできますか?
54 :
444 :2006/11/02(木) 00:19:01
System.Threading.Timer を使う Windows アプリケーションを作っているんですが、 どうやら、競合によると思われるバグに悩まされています。 とりあえず、原因追及のため、Timer 側のスレッドが動いている 間、Windows アプリケーション側のスレッドを止めたいんですが、 そんなことは可能でしょうか? もともと、マルチスレッドにする必要はなく、単に1/60秒ごとに 処理をしたくてタイマーを使ってるだけなので、マルチスレッドに ならないタイマーがあればそれに替える方法でもいいんですが。 よろしくお願いします。
timerスレッドでメインのコントロールとか弄ってんでないの?
58 :
デフォルトの名無しさん :2006/11/02(木) 02:10:17
59 :
デフォルトの名無しさん :2006/11/02(木) 08:53:56
>>54 ・・・。ここは初心者用だからいいかなと思ったのですが。
>54 大丈夫、ここは初心者スレだよ
>>53 updateコマンドを見直してみたら?
ちゃんとwhere条件はPrimaryKeyだけで更新してる?
62 :
デフォルトの名無しさん :2006/11/02(木) 13:45:33
>>52 でもそういう危険があるっしょ。
そうならないためのオブジェクト指向なんだが、VSの作り方だとコントロール構成がそのまま
クラス構成になるようなパターンが多そうだ。w
つうか何で後書き優先にしたいのに 排他制御有効にしてんのよ?
誰か C♯, C#相談室 Part35 を立てて下さい。 ホスト規制で立てられません・・・
>>55 System.Windows.Forms.Timerの方を使えば、良いのでは?
mac os x でC#を開発&実行したいのですがそれは可能でしょうか?
71 :
65 :2006/11/02(木) 21:11:20
>>70 ありがとうございます。
スレタイは見なかったことにします。
72 :
54 :2006/11/02(木) 23:22:28
>>61 where句はプライマリーキーだけで更新しています。
>つうか何で後書き優先にしたいのに
排他制御有効にしてんのよ?
とは!?
データ取得時の状態と、DBが変わっていた場合
dataadapterのUpdateコマンドではエラーがおきるのではないですか?
一応、取得時のデータとDBのデータの状態が変わっていた場合は
再度取得しなおしてデータをセットしなおして、更新
以外の方法がみあたりません。
排他制御有効にしないプロパティみたいなものをdataadapterはもっているのでしょうか?
すいません、初心者な質問で・・・。
とても困っているので親切な方、教えていただけたらと思います。
dataadapterのUpdateメソッドを発行すると自動的に楽観的ロックである、と
ヘルプで読んだのですが、気のせいでしょうか。
74 :
54 :2006/11/02(木) 23:39:23
>>73 ありがとうございます。
あー、やっぱり基本的に
>一応、取得時のデータとDBのデータの状態が変わっていた場合は
>再度取得しなおしてデータをセットしなおして、更新
てことやんなきゃ駄目なんですよね。
一応悲観的ロックは考慮に入れていません。
スマートに後勝処理をするにはどうしたらいいのかなっ、とか思ったのですが
結局単純にupdate文をexecuteするか、再度取得しなおしてデータをセットしなおして、更新しなくちゃいけないのか
どっちかなんですよね?
後者の場合はそれなりの作りこみが発生しますよね。
了解です。
ありがとうございました。
そのほか良い方法がありましたら教えてください。
賞もないしつもんですが、よろしくおねがいします。
エディタのカレット描画するのに、 Graphics.MeasureString メソッド を用いようとしたんですけど、 ストリング全体の長さ(たぶん、DrawStringの長さ?)と、 一文字一文字の長さの和が異なって正確な位置を求められません。 なにか解決方法を知らないでしょうか。
76 :
75 :2006/11/03(金) 01:14:32
自己解決? ぐぐってみたら、こんなんあった。 // grfx.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; StringFormat strformat = StringFormat.GenericTypographic; strformat.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces; コメントアウトは必要と書いてあるところもあったけど、消しても同様の結果を 得たので消した。 他の方法を知ってたら教えてください。
>>54 >排他処理は楽観的ロックです。
これは、自分で設定してるわけじゃないんだな。
もしかしてCommandBuilderでUpdateCommand作ってる?
なら、自動生成やめて、自前でUpdateCommand作らないとだめ。
78 :
54 :2006/11/03(金) 02:35:02
>>77 >もしかしてCommandBuilderでUpdateCommand作ってる?
はい。そうです。
>自前でUpdateCommand作らないとだめ
自前で作るっていうのは・・・
データ更新時にDBからデータを再取得し、
結局データテーブル内のRowをなめて
rowstateを見ながらinsert、update、deleteを
そのデータテーブルにかけて、
そいつをUpdateメソッドでdb更新へいく、というやり方でしょうか?
それとももっと簡単に自前でUpdateCommand作れるものなんでしょうか。
しつこく聞いてしまってすいません。
型付データセットの利点ってなんでしょうか?
片がついてること。
自分的にいいところって rows[0]["列名"] じゃなくて rows[0].列名 みたいにフィールドとして使えることや、null判定をしてくれること、、なんだけど、 物理テーブルが変更されたら型付データセットも変更して、なおかつソースも全部変更しなくちゃいけないっていうのが なんだかとても面倒な気がするんだけれど・・・・ しかもどこにおこうか迷ってしまう。 ほかに型付使う絶大な理由ってあるんでしょうか?
DataSetやDataTableは一見楽そうなんだけど、作り込んでいくとだんだん使いにくくなっていって 結局は、DataReaderで呼び出して画面表示→Insertやupdateで1行ずつ更新という流れに・・・。 DataTableはワークテーブルみたいな使い方では便利だと思うんだけどね。
VS2005から型付データセットが大幅に使いやすくなった、みたいなこと聞いたのですが本当かな
Cookieを送るにはどうすればよいのでしょうか? request.Cookie = "**=**"; でやってみたのですが、できませんでした。 よろしくお願いします
85 :
デフォルトの名無しさん :2006/11/04(土) 02:38:52
SendCookie
86 :
84 :2006/11/04(土) 14:10:46
>>81 ソース変えたくなかったら、DataAdapterのTableMappingとColumnMappingを
書き換えるとかすると書き換える場所が減る。
そしてDBとコードで列名が食い違ってこんがらがる。
あれ?型付きを支持するつもりが・・・
あとは文字列アクセスだと打ち間違えに気づかないとか、遅いとか
(かなりの回数繰り返さないと気になる差にならないけど)
グリッドにデザイン時にバインドできないとか、あとなんだろう。
88 :
デフォルトの名無しさん :2006/11/04(土) 22:02:31
型付DataSetの使い方が詳しく載っているサイトを ご存知の方いたら教えて下さい。
>>88 XML書いて
XSD.EXE使ってXSDに変換して
XSD調整して
XSD.EXE使ってDataSetに変換ってだけじゃないの?
コンボボックスのリストを別のコンボボックスにコピーするにはどうしたらいいのでしょうか? 配列に格納してそれをaddrangeで入れればいいと思うのですが、 ソースがsqlCommandでひっぱってきたデータなので、件数がわからず配列が 作れなくて困ってます。 素直に2つのコンボボックス両方に1件ずつaddしていったほうが早いのでしょうか
>>90 comboBox2.Items.AddRange(new ArrayList(comboBox1.Items).ToArray());
で出来る事は出来ないか?
いいかどうかは別にして・・・
92 :
90 :2006/11/05(日) 05:27:31
>>91 ToArrayというメソッドを見落としていました。これがあればListに格納して
それを直接いれてやれますね。
ありがとうございました。
作動中のプログラムをタスクマネージャーなどで強制終了された場合でも、 一定の終了処理を施したいのですが、どのようにすれば出来ますか? ウイルスみたいに強制終了しても何度も復活するのがあるから、それと 同じようにして終了処理が出来ないかなと思ったんですが…
「何度でも蘇るさ!」
>>93 プロセスごと刈り取られたら終了処理を行う余裕はないよ。
ウイルスみたいに別のプロセスを走らせて監視するしかない。
>>95 さらにそのプロセスを監視するプロセスを走らせて(ry
97 :
93 :2006/11/05(日) 21:28:24
>>95 マジすか…orz
GetProcessesByName重いからあんまり連続して呼び出したくないんだよなぁ
これ以外にメインプログラムの生存を確認する方法無いですかね?
>>97 毎回探さなくても、HasExitedをみてればいいんじゃなかろうか。
99 :
93 :2006/11/05(日) 21:41:00
>>87 >グリッドにデザイン時にバインドできないとか
うそ。
普通のdatasetでもkeyかdatafieldに列名書き込めばバインドできるよ。
>>90 コンボボックスのリストを別コンボにコピー?
Arraylistなんてことしなくても
DataSourceにぶち込んだデータがたとえばDataTableなら
DataTable dt =(DataTable)cmb1.DataSource;
cmb2.DataSource =dt;
でいけるんじゃないの?
キャスト内容は何をDataSourceにブチこんだかによるけどね。
102 :
デフォルトの名無しさん :2006/11/06(月) 00:49:08
ファイルをとあるHPから同時にダウンロード(マルチスレッド)したいんだけど、C#で作成可能ですか?
>>102 System.Net名前空間にいろいろあるからヘルプ眺めれ。
Win32ネイティブではiniファイル、 Javaではpropertiesファイルを使って、 情報を設定していましたが、 C#だとXMLを使うのが一般的なのでしょうか。 単にテキストで設定値を定義したいだけなのに、 些か大仰な気がします。 もちろんテキストファイルを読み込むようにも出来るのは分かりますが、 それが一般的でないのならあまりやりたくないところです。
>>104 C#という時点で十分大げさだと思うが、いまさらその程度ケチってどうする?
でも実際XmlSerializerはかなり重いよ。 自分は仕方ないのでテキストファイルを読み書きするクラスを自前で定義している。
参考までに。 XmlSerializer が“重い”原因の一つは、 実行時に csc を呼び出してアセンブリをコンパイルするプロセスが走る事にあると思う。 .NET 2.0 には sgen というツールがあって、 シリアライズ処理を行うアセンブリ(.dll)をプリコンパイルできるようになっている。 これでいくらかパフォーマンスを改善できるらしい。
108 :
90 :2006/11/06(月) 13:38:13
>>101 DataTableは考えませんでしたが、DataTableに格納するのに時間がかかってしまいますね。
もちろん、そこまで大量のデータをコンボボックスにつっこんでどうするんだという
問題もあるかもしれませんがw
テストしてみたところ、DataTableにFillするのとsqlCommandとDataReaderで読み込んだ物を
ループで1件ずつList<string>に突っ込むのでは、Listを使った物の方が速いみたいです。
とりあえず今回はToArrayでやってみようと思います。
ngen に比べて sgen はお手軽に使えていいんだけど パフォーマンスがあがったという実感は感じない
110 :
104 :2006/11/06(月) 22:05:59
テキストファイルを使ってる人もいるのですね。 まあ、それでいこうかなあ・・・。 シーケンシャルに読み込むだけだから、遅いと噂のXMLを使う必要性もあまりないし・・・。
XmlSerializerだと、XMLの文法解析も要らないし。 直接、構造体をファイルに吐き出し、読み込みをやってくれるから。 便利だとは思うんだけどね。 実際、大量のXMLファイルを扱うアプリを書いた時は。 その処理にかかる時間の多くが、ファイルのオープン、クローズ処理であって。 XMLのパース処理なんて大したことなかった。
>>108 どうでもいいけど、昨今のPCじゃそんな程度で早い遅いなんてわからんよ
可読性の良いほうを選ぶがよろし。
普通にDataReaderで読み込んだDatasetなりDatatableを
コンボボックスのDataSourceにつっこんで
ViewカラムとDataカラム設定するほうがソースも見やすいし(3行)
可読性もいい。
いまさらArrayListでぐるぐるなんて、ちょっとおかしくね?
構成ファイル使うだろ普通。 あるいはセッティング使うだろ。 なんでわざわざ独自方式に走る。
おれはクラスをBinaryFormatterでシリアライズ派
117 :
90 :2006/11/07(火) 09:01:11
>>112 遅いっていってもあくまでも数字で比較したときの話で
実用上は差はないようなのであなたのおっしゃるとおりです。
次回からはそっちを使ってみます。
>>100 しまったあぁ
Console.Write("Σ or2=====●");
例えば画像ファイルなどのバイナリフォーマットを、 BinaryFormatterだとか使って読み書きって出来る? どっちかというと、クラス主体のシリアライズ用で、任意のフォーマットを 読んだりするのには使えないのかなと思うんだが。
>>119 そのバイナリフォーマットをサポートするクラスがISerializableを実装して
いればいいだけでは?
StructLayout、FieldOffsetとかの属性は見てくれないよね? どちらにしてもエンディアン変換は自前でやるしかなさそうだが。
そんなのにシリアライズ使ってどうすんの。
別に"シリアライズ"である必要はないんだが。 構造体を用意さえすれば、別に自前で読み書き処理を用意しなくても済む仕組みがあるのであれば、 それを使いたいってだけなんだけどね。
124 :
デフォルトの名無しさん :2006/11/07(火) 23:48:50
.NETのTIPS的なものに別スレッドからコントロールをさわっちゃいけないってあります。 例えば 別スレッドからtextBox1.Text = ""hoge; なんてNG コントロール.Invoke(デリゲード) とする場合 別スレッドで実行されているメソッドがFormのメンバだとすると Invoke(デリゲード)か textBox1.Invoke(デリゲード)か どちらが正しいのでしょうか? どちらでも良さげなんてですが・・・
どっちでもいいよ。 Invoke するコントロールが属するスレッド、が問題だから。
Invoke( ... は this.Invoke( ... の略だからね
127 :
デフォルトの名無しさん :2006/11/08(水) 03:20:21
>>127 XmlSerializer はシリアライズを行うアセンブリを動的に生成してる。
Reflector で XmlSerializer.XmlSerializer(Type, String) あたりから辿ってごらん。
127がLCGを使って実装してくれるそうだ
質問です。 ControlのTagプロパティの型はobjectなのに、デザイナ上ではstringのようにふるまう。 DataGridView.DataSourceでも然りです。 このように本来は違う型なのに、デザイナ上では限定的に型を指定できるようにするには どうすれば良いのでしょうか?
ヒント: [SRCategory("CatData"), Localizable(false), Bindable(true), DefaultValue((string) null), TypeConverter(typeof(StringConverter)), SRDescription("ControlTagDescr")] [SRDescription("DataGridViewDataSourceDescr"), RefreshProperties(RefreshProperties.Repaint), SRCategory("CatData"), DefaultValue((string) null), AttributeProvider(typeof(IListSource))]
TreeView でディレクトリのツリー構造を表現している。 FileSystemWatcher にドライブのルートを登録、配下の全サブディレクトリを監視対象にする。 この状態で Renamed のイベントハンドラ内で TreeView のノード名を変更すると InvalidOperationException が発生。「有効ではないスレッド間の操作」だと言われる。 どうしたら解決できるか教えてほしい。 これだけで原因が特定できるとは思えないが、何を書いたら手がかりになるかわからない。 開発環境は VC# 2005 Express + Windows XP。
>>131 丁寧にありがとうございます。
取りあえず、SR何々無しで目標は達成できましたが、
そもそもSRCategory ,SRDescription というのは何処のアセンブリにあるのでしょうか?
度々申し訳ないです。
SynchronizingObject は設定してるかい? // コンポーネントをデザイナにD&Dなら自動設定のはずだけど
>>133 System.Windows.Formsのinternal classだから外からは使えないよ。
EnterpriseLibraryかよ
>>132 Renamedイベントハンドラ内から、TreeViewのノード名を変える時に、
その処理をDelegateに包んで、TreeViewのインスタンスでInvoke()。
C#には多倍長整数型変数ってないんですか?
J#にはあるよ
141 :
139 :2006/11/10(金) 15:51:42
>>140 ということは、J#のライブラリを参照に加えれば使えるんですか?
うい
143 :
139 :2006/11/10(金) 18:30:15
>>142 これでショボい自作クラスを作らずに済みそうです。
ありがとうございました。
144 :
132 :2006/11/10(金) 21:05:39
>>134 が自分へのレスだと気づかなかった……すまん。
これで解決できた。回答どうもありがとう。
FileSystemWatcherについて調べていたとき@ITでも見ていたのにすっかり忘れていたよ。
>>137 も丁寧なレスをありがとう。こちらも動きを確かめてみる。
質問です。 ある座標から、有る座標まで絵が勝手に動く関数って有りますでしょうか? 例えば 有るフォームの(0,0)座標から、(100,100)座標まで勝手に絵が動いて欲しいんですけれども・・・
>>146 TimerとPictureBox組み合わせて作れば。
C♯, C#相談室 Part35
http://pc8.2ch.net/test/read.cgi/tech/1162490865/ ↑で回答してくれずからかわれただけなので優しい皆さん、教えてください。
で、質問の内容は
フォームのキーダウンイベント発生しないけどなんでー
private void Form1_KeyDown( object sender, KeyEventArgs e )
{
switch ( e.KeyCode ) {
case Keys.Left:
rects[0].X -= 25;
rects[1].X -= 25;
rects[2].X -= 25;
rects[3].X -= 25;
break;
case Keys.Right:
rects[0].X += 25;
rects[1].X += 25;
rects[2].X += 25;
rects[3].X += 25;
break;
}
}
}
すいっちのとこにブレーク張ってるのにキーボードのキー入力しても
イベントハンドラに㌧で来ないお
これだから馬具だらけのC#はきらいだ!!!
213 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 12:12:25
コントロールの方に飛んでるだけだろ
215 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 12:27:49
>>213 違いますよ^^;
ちゃんとフォームにフォーカス当ててる
217 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 12:53:12
>>216 Form.KeyPreview
218 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 12:59:18
そんなスレッドはないようですが・・・
できればurlをお願いいたします(ぺこりー
220 名前:デフォルトの名無しさん[sage] 投稿日:2006/11/11(土) 13:16:08
>>219 どーも。
ボタンを押したときのイベントで
>>217 の
Form.KeyPreview = true;
というのを追加したけどコンパイルエラーになる。
変数はForm1という名前だから
Form1.KeyPreview = true;
とやっても怒られる。
this.KeyPreview = true;
でコンパイルが通った!
でもやっぱりだめなんだな、これが。
やっぱり
>>211 のイベントに㌧で来ないお
試しにみんなもやってみてくれ、
もしバグだったら誰か舞糞に連絡ヨロ
以上です、だれかよろしくお願いします。
エスパーすると、イベント設定してないだろ? いきなりバグとか言うやつは頭沸いてる
while(true){ Console.Write("BABEL "); }
>>152 2行目の失礼な言い方は許すが
イベント競っていって何ですか?
もしかしてイベントデザイナでフォームを選択して
Form1のイベント一覧のとこにある「KeyDown」というとこを
ダブルクリックしてコードとして勝手に生成された雛形
private void Form1_KeyDown( object sender, KeyEventArgs e )
{
}
の中に
>>149 の処理を書いたのだが
それ以外にイベント設定というものが必要なのですか?
ネタだろ。
KeyPreviewをイベントハンドラ内で設定したのであろう。
これだけ失礼な物の言い方していて、しかも向こうのスレで答えまで教わっているのに こっちのスレに来てまだ繰り返すのか。 Form.KeyPreview を検索してみたのか? 馬鹿じゃないのか。
>>156 イベントハンドラというかbutton1_Click()イベントでこの中の
最後の行で設定してる
そうしないとボタン押したときにボタンにフォーカス奪われちゃうべ?
もういいからしねよ Form.KeyPreviewのせつめいよめよあほ。
ちなみにこんな感じ private void btnStart_Click( object sender, EventArgs e ) { ///途中省略 timer.Enabled = true; timer.Start(); this.KeyPreview = true; }
なんでデザイナで設定しないわけ? プロパティの性質から言って初期化時に設定しないとだめな気がする。 まあClickしてなくて設定されてないのかも試練が。 ていうかあほだろ。 なんでClickイベントで設定なんだよ。 意味分かってねーのかよ。 分かってねーならヘルプ嫁よ。 ヘルプ読んでこうしたならもうやめとけ
>>161 それだとそのボタンを押すまではKeyPreviewが有効にならないから
ほかのコントロールにフォーカスがある時にKeyPressにイベントがこないのは自然。
ていうかKeyPreviewの(ry
なるほどプロパティで設定できたのか、
でやってみたんだがやっぱだめだったよ
>>161 からKeyPreviewはずしてもだめだ
ものは試しだ、みんなも試してみてくれ
>>163 いや、それには意味があるんだよ
ボタンを押したときに制御したいからさ
それくらい読み取ってくれ頼む
一回押したら永久にフォームでイーが拾えるようになるがそうしたいのか? 最初に押すまではキーを拾わないようにしたいのか?うんうん もうさ、コード全部書いちまえよ。 どっか間違ってるからさ、 だれも見ないと思うけどね。 ああ、あとさ、あほだってことはばればれだから、 考えてる振りしなくてもいいんだよ。
private void button1_Click( object sender, EventArgs e ) { this.KeyPreview = !this.KeyPreview; } private void Form1_KeyDown( object sender, KeyEventArgs e ) { if( e.KeyCode == Keys.A ) System.Media.SystemSounds.Asterisk.Play(); } これだけで、ボタンでトグルできたぞ。 環境がおかしいか、頭がおかしいかのどちらかだろう。
頭にきまっ…シー
>>167 オマイのやさしさに感動
だが理解できないだろうから豚に真珠だな
>>167 実験してくれてありがとう(´;ω;`)
すごいヒントになったよ!
で、解決しました(だが動作が意味不明のままだけど)。
1.駄目なケース
timer.Enabled = true;
timer.Start();
this.KeyPreview = true;
2.OKのケース
this.KeyPreview = true;
timer.Enabled = true;
timer.Start();
タイマーイベントを有効に(スタート?)するまえに
KeyPreviewをもってこないとだめぽらしい。
C#って不思議だ
ここで質問して良かった、
>>167 サンクス!
すまん、間違えた。 1.のケースも2.のケースもOKだった。。。 なんかね、Keys.LeftとKeys.Rightはキー入力イベントとして 拾って紅っぽい、おいらのPCじゃ。 スペースキー押したらイベントハンドラに飛んできたよ。。。。。。。。。orz お騒がせしました。マンスー、マンスーです。。。
言い直し。。 >なんかね、Keys.LeftとKeys.Rightはキー入力イベントとして ではなくおいらのパソコンのカーソルキーを押してもイベントとして カーソルキー自体は特に問題なく動くんだけどね、、、 もしかしてのーとPCと一体のキーボードだからキーコードが 一般的なキーコードと違うのかな、 まあこれはここで質問することじゃないからいいや、 本当に本当にお騒がせしました
だからまにゅあるよんでね キーボード入力のしくみてところがいいよ ProcessDialogKey とかね みんなこたえおしえてくれてるんだから ひとのせいにしたらだめなんだよ
頭のバグをささと直せ。
俺様プログラマー増えてきたのかな? 何事も上達するには謙虚さが大切だよ! >Form.KeyPreview = true; >Form1.KeyPreview = true; これがダメな理由分からないと、今後何やっても上手くいかない。 がんばってね。
上はクラスだから当然駄目だよな。
下もクラスですが
工エエェェ(´д`)ェェエエ工
つーかあの馬鹿はコテにしてくれればNGにするんだけどな。 元のスレで毒づいてるんじゃねーよ。
そうです。上も下もクラスです。 何事も勉強が大切ですよ。
>>180 Form1 Form1 = new Form1();
Form1.KeyPreview = true;
とか言ってみたり。
その発想はなかったわ。
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(Properties.Resources.a); でWaveを鳴らしていますが、たまに雑音が入ります。 対処法を教えてください
で、そのノイズがどこで混入してるかは調べてないわけ?
>>183 ハードの問題じゃないの?
内容詳しく。
C#を使って、趣味でWindows(GUI)アプリケーションを作成する場合、 設計はどのように行えば良いのでしょうか。 画面をデザインしてイベント毎の処理を書いていくわけですが、 思うがままにやればスパゲッティになるのは目に見えてます。 やはり、クラス図、シーケンス図、アクティビティ図などを書いていくべきなのでしょうか? UML以外のお奨めなどはあるでしょうか?
一番大事なのは最後まで完成させる気力を持ち続けること。 UMLなんて必要ない。こだわってたらやる気なくすことになると思う。 自分に都合のいい図を描け。
精神的ブラクラ注意
>>186 チームで開発するならともかく、一人で作るなら何とでもなるでしょ。
脳内であれば超3次元な図を書くことだって出来るんだし。
まあ、ヒントとすればイベントハンドラの中には3行以上書かないことかな。
どのような状況でとか詳しく書かないと分からんよ。 過負荷になってるとか、エスパーじゃないからわからないよ。 まあ多分書いても分からんけど。
ファイル名指定してコンストラクタ呼んでるのか? どんなきっかけでどのように再生させてるのか? ループさせてるのか? 同時に別の音再生させてないか? 詳しい状況はいくらでも書けるだろ? 出し惜しみするなよ。
煽りはスルーします
ネットワーク上のストリーム再生してるかもな。
お前ら、ネタなんだからスルーしろ。
197 :
186 :2006/11/12(日) 00:45:03
>>187 ,190
なるほど、UMLにこだわる必要はないんですね。
イベントハンドラを簡潔にするということは、
処理は別のクラスに外だしするなど、
工夫が必要になるんですね。
色々試してみます。ありがとうございました。
198 :
デフォルトの名無しさん :2006/11/12(日) 01:59:50
>>193 出し惜しみ はするつもりありませんが、どのように書いたら良いのか分からなくて・・・
再生の状況は、たとえば[ボタンを押したら再生する]で、
リソースに格納したファイルからの再生です。ループはしません。
同時に別の音再生させているかもしれません。(下記ソース、再生前に一応Stopをつけているのですが)
具体的なソースは
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(HimatubusiG.Properties.Resources.se01);
と
private void WAVEsaisei(string FILENAME)
{
sp.Stop();
if (FILENAME == "se01") sp.Stream = HimatubusiG.Properties.Resources.wav1;
if (FILENAME == "se02") sp.Stream = HimatubusiG.Properties.Resources.wav2;
if (FILENAME == "se03") sp.Stream = HimatubusiG.Properties.Resources.wav3;
if (FILENAME == "se04") sp.Stream = HimatubusiG.Properties.Resources.wav4;
if (FILENAME == "se05") sp.Stream = HimatubusiG.Properties.Resources.wav5;
sp.Play();
}
でして、いくかのファイルを使い分けています。
WAVEFILE("se01"); で、再生です。
失礼、 再生は WAVEsaisei("se01"); です。
200
201 :
149 :2006/11/12(日) 09:42:26
きみたち必死になってForm.KeyPreviewという回答をくれたけど 実は違うみたいれつよ(藁 後学のためにきみたちのもおいらが調べた結果をまとめたので教えてあげよう 「Windowsアプリケーションで方向キーなどの特殊キーを処理するには?」 by 149 1.Buttonコントロールで方向キーが処理できない理由 Buttonコントロールでの方向キーの入力が、通常のKeyDownなどのキー・イベントで処理できないということは、 「方向キーが通常の入力キー(以降、普通入力キー)とは異なる」ことを意味する。Buttonコントロールの方向キーは 「プリプロセス(=前処理)を必要とする特殊な入力キー」(以降、特殊入力キー)である。 これは、すでにプリプロセスで何らかの処理を実行済みなので、さらにその後でキー処理を行う必要がないからだ。 例えば、Buttonコントロールで[↓]キーを押すと、Windowsアプリケーションはプリプロセス工程で自動的にフォーカス移動の 処理を実行する。よって、その後でKeyDownイベントを処理する必要はなくなる。 しかし、実際のアプリケーションでは、そのような通常のアプリケーション動作をカスタマイズしたい場合がある。例えば、 通常のアプリケーション動作では[↓]キーでフォーカス移動すると、そのフォーカス移動先がGroupBoxコントロールなどにより 設定されたグループ内でループするようになっているが、それをカスタマイズして、グループを越えてフォーカス移動するように したい場合などが挙げられる。 a) プリプロセス工程における処理をカスタマイズする b) 特殊入力キーを普通入力キーに変更する ここではa)について解説する。 2.プリプロセス工程における処理をカスタマイズする プリプロセスをカスタマイズするには、フォームのProcessDialogKeyメソッドをオーバーライドして、そのメソッド内でキー処理を 行えばよい。もちろんフォームではなく、コントロールのProcessDialogKeyメソッドをオーバーライドしても同様の結果が得られる。 次のコードは、実際に、フォームのProcessDialogKeyメソッドをオーバーライドした例である。この例では、方向キーでグループを 越えたフォーカス移動を行うように、処理をカスタマイズしている。 続く
202 :
149 :2006/11/12(日) 09:43:31
protected override bool ProcessDialogKey(Keys keyData) { switch (keyData) { case Keys.Down: case Keys.Right: this.SelectNextControl( this.ActiveControl, true, true, true, true); break; case Keys.Up: case Keys.Left: this.SelectNextControl( this.ActiveControl, false, true, true, true); break; default: return base.ProcessDialogKey(keyData); break; } return true; } ProcessDialogKeyメソッドをオーバーライドしたサンプル・プログラム(C#) なお、ProcessDialogKeyメソッドはコントロール→フォームの順で呼ばれる。ProcessDialogKeyメソッドでは、 独自にキーを処理した場合には、それを示すために戻り値でTrueを返すようにする。 また、コントロールのProcessDialogKeyメソッドは、コントロールのPreProcessMessageメソッドから暗黙的に 呼び出される。そのため、プリプロセス工程の最初のメソッドであるコントロールのPreProcessMessageメソッドを オーバーライドしても、同様にプリプロセス工程でのキー処理をカスタマイズできる。しかし、コントロールの ProcessDialogKeyメソッドやPreProcessMessageメソッドをオーバーライドする方法を採用する場合、当然、 コントロールの継承が必要になる。
203 :
149 :2006/11/12(日) 09:44:43
いかにもC#のことなら何でも知ってる見たいなツラして回答者ぶるなら 少しは勉強しろよな(禿藁
>>173 >だからまにゅあるよんでね
>キーボード入力のしくみてところがいいよ
>ProcessDialogKey とかね
>みんなこたえおしえてくれてるんだから
>ひとのせいにしたらだめなんだよ
方向キーという情報がはじめて出た直後には教えている
よかったね。
方向キーのイベントを採ろうとしてるのは
>>149 で既出だぞ
>>190 >イベントハンドラの中には3行以上書かないこと
イベントハンドラ内では、3行を超えるコードは全部メソッドにして呼び出すべき、ということ?
>>206 GUIとその他の処理を分けろ、ということじゃなかろうか。
フォームのprivateメソッドにしちゃったら同じだけどな。
208 :
デフォルトの名無しさん :2006/11/12(日) 13:59:29
行数なんてなんの意味も無い 1行にいくらでも書けるけど・・・
わかったからもう改行するなよ。
マルチみたいな女の子を作りたいなあ
>>207 まあ、privateになってるだけでもだいぶマシだけどな・・・
どっからどういう仕様で呼び出されてるのかわからんメソッド・メンバ変数山盛りだと本当に泣きたくなる。
エラー19'hogehoge.Index' は参照マーシャル クラスなので、 'hogehoge.Index' を ref または out として渡すことはできません。 コンパイルエラーでこういうのが出てしまいます。 元のコードは、こんな感じです。 ↓ class hogebase { public int Index = 0 } class hogeInherit : hogebase { private void Close() { base.Index = 100; } } void main() { hogebase hb = new HogeInherit(); Console.WriteLine("{0}\n", hogeInherit.Index.ToString()); }
変数名は hb だろ
>>213 すんません。そうですね。
void main()
{
hogebase hb = new HogeInherit();
Console.WriteLine("{0}\n", hb.Index.ToString());
}
の間違いです。
コードを簡略化するのは大事だけどさ、そのためにエラーの原因まで削っちゃ駄目だろ。 main メソッドが大文字から始まらないのは目をつぶるとしても、 それだけじゃコンパイルエラーにならないよ。 ついでにエラーコードは正しく。CS0197 だろ。 でまあ原因はヘルプに書いてある。そう言うもんだと諦めろ。
釣りってレベルじゃねーぞ! 店員何とかしろよおい!
らっしゃい! 何にしましょう
____ / \ / ─ ─\ らっしゃい! 何にしましょう / (●) (●) \ | (__人__) | ________ \ ` ⌒´ ,/ .| | | ノ \ | | | /´ | | | | l | | | ヽ -一ー_~、⌒)^),-、 | |_________| ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | | ____ ____ / \ / ─ ─ \ これ程つまらない合いの手は / (●) (●) \ 久々だお | (__人__) | ________ \ ` ⌒´ ,/ .| | | ノ \ | | | /´ | | | | l | | | ヽ -一ー_~、⌒)^),-、 | |_________| ヽ ____,ノγ⌒ヽ)ニニ- ̄ | | | ____
RegexOptions.Compiledを指定したときと指定しなかったときのベンチマーク結果ってある?
検索対象と検索する正規表現文字列によって千差万別。 ベンチマークに意味はないと思うよ。
>>219 メモリリークするから true にするのはヤメレ
いまどきのパソコンは無駄に多くの物理メモリ積んでるからメモリリークしても なんの問題も無い
すみません、質問させてください。 今、テキストファイルから一行一行読み込んで データグリッドに一行一行、表示させるプログラムを書いているのですが 処理していくうちにどんどん遅くなり、 3日間で1200行がやっとです。 一行読み込み→データベース更新→一行表示 の手順でやってます。 一気に表示させたほうが速いかもしれませんが、ユーザに 今やってる処理を知らせるために、一行一行表示したいのですが とても遅くてメモリの処理が問題だと思うのですが、、、 C#初心者でよくわかりません。ちなみにunsafe とかは使ってません。 よろしくお願いしますm(__)m
>>223 VirtualModeは使ってる?直接突っ込むと死ねるよ。
C#2.0のDataGridViewの非バインド形式を使えば、データセット不要だし 速度も遅くならないんだけどな。
>>224 >>225 VirtualModeとか、DataGridView とかあるんですね。
ショックなことに使ってるのは1.1なので、使えないみたいですorz
でもレスありがとうございました。
227 :
デフォルトの名無しさん :2006/11/14(火) 11:14:37
Visual C# 2005 ExpressEdtionを使用しています。 GetAppDirはどのUsingディレクティブに属してるかを調べる方法を教えて下さい。
>>227 GetAppDirって何?
名前からするとメソッドっぽいが.NET Frameworkにはそんなのないぞ。
using System.Windows.Forms; string path = Application.StartupPath; or using System.IO; using System.Reflection; string path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
230 :
227 :2006/11/14(火) 14:44:26
すいません、メソッドでした。勘違いで御免なさい
C#でP2Pソフトって作れるの?
お前には無理だろうけど
C#1.1のDataGridとSQLをやろうとしたけど、VS2005にしてしまったので SQL Express 2005を入れてDataGridViewをする事にした。
とあるIRCクライアントのマクロ機能でDLLが叩けるみたいなので、小物を書いてみたいんですけども、 CやCppの実行ファイル上(アンマネージドコード)から、C#で作ったマネージドDLLは叩けるのでしょうか?
tlbexp
ネットワークプログラミングで参考になる書籍とかないですか?
つMSDN
すいません、ユーザコントロール内のkeydownイベントをとりたいのですが 発生しません。 はりつけた側のフォームから何かしてあげないと イベントは発生しないのでしょうか
UserControl はキー入力を受け取らない。フォーカスも持たない。 その内部のコントロールのイベントを公開する事はあるだろうけど。
トンデモ基地外がいると聞いてすっ飛んで来ました。
>>239 ~イベントがおきません……とかいう質問の場合、
・質問者が本当にタコでイベントコードを書いてない場合
・ちょっと前のKeyPreviewのような場合
・キーフォーカスがほかにある等の技術的問題の場合
などいろいろあって面倒だからコードあげないと答えが帰って来ないよ
>>244 ・質問者が本当にタコでイベントコードを書いてない場合
それはないです
・ちょっと前のKeyPreviewのような場合
ちがう気がします。
・キーフォーカスがほかにある等の技術的問題の場合
キーフォーカス!でもユーザコントロール内のコントロールにカーソルがある時に
ユーザコントロールのイベントをとりたいのですが
>>245 ユーザーコントロール内のコントロールのKeyDownイベントハンドラでOnKeyDownは呼んでるの?
C#で数値計算したいんだけど、 ブリーのライブラリってないでしょうか?
鰤ー? まあ、C# でかかれたものはなかなかないけど、 C とかのライブラリ拾ってきて、C++/CLR でラッパー買いて、 C# から利用とかできる。
>>248 ありがとうございます
(素で打ち間違えてるwハズカシー)
C++でDLLつくってC#から関数を呼び出すことはできました
でも、引数の渡し方とかよくわかんない
噂に聞くマーシャルとかいうやつを使うんでしょうか?
ぐぐりまくってみます
では
247です C++/CLIってC#でつかってる変数、(List<>とか)引数でわたせるんですね んで、C++/CLIであっち側の変数(double x[]とか)に変換してやれば マーシャル(?)いらないんですね これでなんとかできそうです ありがとうございました
>>246 onLeyDownよんでいません・・・
特別に何かしないと駄目なのでしょうか?
>>250 みたいな質問をする奴が書いたソフトウェアを使いたいひとっているのかな?
>>251 中のコントロールにフォーカスがあるとユーザーコントロールのKeyDownイベントは自動では起きないから
コントロールのKeyDownイベントハンドラでthis.OnKeyDownを呼ばないと駄目
>>252 みたいな、250を質問と早とちりしてしまう奴が書いたソフトウェアを使いたいひとっているのかな?
でもブリーはオモロイw ありがたく使わせてもらう
257 :
デフォルトの名無しさん :2006/11/17(金) 00:50:25
Queue をマルチスレッドで使用する場合に、 Framework 1.1 の頃だと、 private Queue q = new Queue(); private Queue synQ = Queue.Synchronized(q); という方法で使用するというのが作法(?)だったと思います。 Framework 2.0 になって、ジェネリックが追加されたため、 Queue を private Queue<string> q = new Queue<string>(); として使用しています。マルチスレッドでこの変数にアクセスするとき、 以前と同じように行おうと思ったのですが、 System.Collections.Generic.Queue には Synchronized メソッドがありませんでした。以前と同じように行 うことはできないのでしょうか? lock を使用する方法しかないのかな ?と考えています。 こんな感じでしょうか? lock (((System.Collections.ICollection)q).SyncRoot) { q.Enqueue("aiueo"); string s = q.Dequeue; } ちなみに private Queue<string> synQ = (Queue<string>)Queue.Synchronized((Queue)q); はコンパイルエラーとなりました。 エラー 1 型 'System.Collections.Generic.Queue<string>' を型 'System.Collections.Queue' に変換できません。 エラー 2 型 'System.Collections.Queue' を型 'System.Collections.Generic.Queue<string>' に変換できません。 このジェネリックをマルチスレッドで扱うための手段をご存知の方いら っしゃいましたらご教授願えませんでしょうか?よろしくお願いいたし ます。
>>257 ちゃんと自分で lock しろってことかね。
>>257 QueueとQueue<t>は無関係だからキャストするのはさすがに無理。
自分でlockするしかないけど、数が多くて面倒なら、
Queue.SynchronizedQueueに相当するラッパクラスを書けばいい。
C#の入門者用の演習問題がいっぱいあるサイト教えてください
261 :
デフォルトの名無しさん :2006/11/17(金) 14:51:49
お聞きしたいんですが、 SystemInformation.MouseHoverTime の値どうなってます? 10になってるんですが、みんなこうなんでしょうか。 速すぎて困ってるんですが
>>257 これで十分
lock (q) {
q.Enqueue("hoge");
}
263 :
261 :2006/11/17(金) 23:09:34
とりあえずtweakUIでなおしたけど、 SystemInformation.MouseHoverTime のデフォルト値っていくつなんだよぅ
うちは400
マウスドライバ依存のような気がするけど。
266 :
デフォルトの名無しさん :2006/11/18(土) 00:59:09
namespace hoge { class foo{} class bar{} class foobar{} } 上記のように名前空間hogeには3つのクラスfoo,bar,foobarがある場合 すべて1ファイルに書くのが普通? それとも1ファイルに1クラスとして書くのが普通?
好きにすればええ 名前空間程度ならアセンブリを超える事も良くある話 EventArgs 派生クラスとか列挙体寄せ集めとかは一つに纏める事が多いな
268 :
デフォルトの名無しさん :2006/11/18(土) 01:06:47
好きにできるから聞いてるんでけど? 1ファイルに1クラスなんて決まってたら質問するわけ無いでしょ?
クラスの、意味とか、関係性に、よるだろ、ハゲ。
>>268 好きに出来るってことは、好きに出来るってことでは?
それらがどういうクラスで、それらがどういう関係で、今後どういう運用をしていくかとか
おまえがどういう設計をするかによって変わってくるってことだ。おまえにしか分からんことだよ。
自由度も使う人間次第か・・・
272 :
デフォルトの名無しさん :2006/11/18(土) 03:24:07
C#でテキストエディタを作るのは無謀ですかね?
C#だからというより テキストエディタを作るという事自体が 相当なもんですよ
274 :
デフォルトの名無しさん :2006/11/18(土) 08:43:35
テキストボックス貼り付けるだけならどれでも一緒な気が。
せめて RichTextBox にしとけ。
まあ勉強にはなるだろ フリーでも市販でも腐るほどでてるので それらに無い機能が欲しいのか マクロやPlug inで対応できないほどの機能で
APIとunsafe使いまくらないと実用に耐えない気がする だったらC++で(ry
そもそも選択した場所しか色がつけられない時点でダメダメじゃん
>>272 今やってる。
思ったよりレスポンスはいい。
行数もたいしたこと無い(テキストボックス代替部に限った話しでは、
Undoと細々したこと未対応で1300行程度。最終的にも2000行はいかないと思われ)。
一つレスポンスで注意したほうがいいのが、Font.Heightの取得は
結構レスポンスに響くので、ループ中なら別の変数に代入したほうがいい。
後は、フォント(とMeasureString)はよく勉強しとかないとはまるよ。
他に、SVG対応とMathMLの機能限定対応もやってるけど、C#ってよくできてることを実感してる。
280 :
デフォルトの名無しさん :2006/11/18(土) 16:30:39
バーカ
テキストエディタが簡単にできると思ってる奴のほうが おかしいと思うが…
昔 viクローンのエルビスか何かのソースを見たことがあるが、 全部見るのは辛いな。 emacsはもっとすごかったが、今考えるとオブジェクト指向だと、 もう少し楽になるんじゃないかな。
emacsはelispインタープリタ。 コアな部分以外はけっこうelispで書かれていたりする。
284 :
デフォルトの名無しさん :2006/11/18(土) 18:35:17
現在、超メジャー所のテキストエディタと勝負するならC++MFC/ATLの選択肢しかないだろう .NETではおそらく勝負にならん。
javaだけど、eclipseのソースも見られるはず。
それでも WPF なら、WPF ならなんとかしてくれる……! とも思えんよなぁ
>>284 確かに!
正規表現のMatchの遅さも定評だしたなw
自前でC++で実装したほうが早かったのはマジびびった
さすがにBoostには勝てなかったが・・・
Eclipseは放置?
そいえば前になんとかっていう.NETなターミナルエミュレータを試した事あるけど、 色々高機能で良さげなんだけど、中でエディタ使ってコードとか書き始めたら 反応がタイプに全然ついて来なかったから泣く泣く捨てた。
エディタ作るなら C++MFC/ATL > JAVA > .net でおk?
Javaとか.NETとか、メモリ食いまくり、起動遅すぎでダメダメ
292 :
デフォルトの名無しさん :2006/11/18(土) 19:41:23
初心者ですが質問させていただきます。 pictureBoxにDrawLine関数で描画をさせてpictureBoxから はみ出した部分をスクロールバーで表示できるようにしたのですが、 バーをスクロールさせると隠れている部分の画像が消えてしまいます。 どうすれば正常に描画結果を表示させることができるでしょうか?ご教授ください。
PictureBox の Graphics に直接描くんじゃなくて、 PictureBox の Image に自前で用意した Bitmap を設定してその Bitmap の Graphics に描画するようにすれ。
>>293 ありがとうございました。
早速参考にさせていただきます。
295 :
デフォルトの名無しさん :2006/11/18(土) 23:43:07
.NETで書いたアプリってソースが丸見えなのはどう考える? DF使ったってやっぱり覗けるし・・・ 趣味でプログラム書いてるようなヲタクは答えなくて結構です。
* 覗かれても問題ないようにしておく。 * .NETは使わない。
プロジェクトマネージャに聞け。
趣味でプログラムかいてるようなヲタクだからプロジェクトマネージャーなんていないのだろう
VS2005自身、.NETで作られているようだけど。 EXE本体はソースが覗けないんだよな。あれはどうやってるんだ?
300 :
デフォルトの名無しさん :2006/11/19(日) 00:03:19
VS2005はVC+++MFC6で作られてるよ
じゃあ、VC+++MFC6は何で作られている?
ウンコンパイラで作られています。
ゲイツが機械語を手打ちしてる
304 :
デフォルトの名無しさん :2006/11/19(日) 00:11:27
>>300 VC+++MFC6はVC+++MFC6で作られてるよ
>>295 バイナリに適当に無駄なコードを挿入するソフトを使う
存在するかどうかは知らない
306 :
デフォルトの名無しさん :2006/11/19(日) 04:40:41
WindowsアプリケーションをC#で作ろうとしています。 アプリケーション内で使用するさまざまなデータはどこに配置していますか? Formのメンバとして宣言するのが普通ですか?
カテゴリ別に分けるべきだな
308 :
デフォルトの名無しさん :2006/11/19(日) 09:07:47
具体的は?
それくらい自分で考えろよ ┐(´ー`)┌
だね
>>306 MVCのMをどこに置くかって話だろ。
俺は、ModelのRootになるクラスを作って、Mainでそのインスタンスを作成し、View (Form)と結合させてる。
Model model = new Model();
MyForm form = new MyForm();
form.Model = model;
Application.Run(form);
みたいな感じ。
>>306 XML(DOM)が良
データ管理がすごく楽(データのバージョンもあんまり気にしなくていいし)。
オブジェクト指向にも合致した作りが簡単。
やってみる価値大。
かみ合ってない
素と見た
天然?
>>312 おいおい、そんなんじゃViewがModelのこと知りすぎてなんの意味も無いじゃんw
単なるマスタベ?
>>317 釣りはやめときましょう。
あまりおもしろくありませんよ。
>>304 VC+++MFC6は何で作られてますか?
そういえば、今のC言語コンパイラってC言語で作られているんだっけ?
コンパイラは自分をコンパイルできて一人前っていう感じ。
自分で自分を書けるのか? でも何もない素の状態なら ハンドアセンブラで書くしかねえんじゃねえの?
>>323 ハンドアセンブルで簡単なアセンブラ書いて、
それで BASIC インタプリタ書いて、
それで簡単な言語コンパイラ書いて・・・
って昔はやってた。
今は、優秀な C コンパイラがあるんだからそれで次のコンパイラ書いたり、
YACC とかのコンパイラ作成用ツール(コンパイラコンパイラ)がある。
C#からC#がコンパイルできるのと同じ理屈
326 :
デフォルトの名無しさん :2006/11/19(日) 20:08:19
質問失礼します。 listViewの項目をプログラム側から選択させたいのですが、どうすれば良いのでしょうか?
>>325 それはちょっと違うんじゃないかと思った。
>>326 SelectedItems とか SelectedIndices とかあるっしょ
SelectedIndicesってなんでぃすか?
>>326 ListViewItem.Selected
>>329 ListView.SelectedIndicesだろうが。
Data Datas Index Indexes だろ 常識だろ。
ちょ待
>>332 回ってきたソースにそういう変数名があったら泣けるよな。
>>335 dataを持ちだしてるところからネタだと判断できると思う。
DirectX Media ObjectをC#から触ることはできますか?
Serch ってメソッドがあったんだ……。
>>338 ごめんなさい。
一回スペルミスったまま納品しちゃいました。
Serch() Saati() Kensaku() 検索() どれがいい?
.NET でなら一番下。
多言語への移植が・・・まあ考えないか。省略形は昔のソースだとよくあったな。 つづり間違いと区別付きにくいが。Serchは絶対無いが
TextBoxとListViewをFormに配置しました。 両方ともDockプロパティをTopに設定したするとListViewの方が上に配置されてしまいます。 TextBoxの方が上に配置されるようにするにはどうすればいいのですか?
だれでも命名には苦労するね。 「もう一度、UNIXを作り直すとしたら?」 デニス・リッチー曰く 「creat()にeをつけます」
UNIXなんて30年前だからすごいのであって あんなcharベースのOSなんて今なら誰だって書ける linxなんてその典型
プログラマの作ってみたいもの 自作OS 自作コンパイラ 自作言語
>>347 何が言いたいのかよくわからんなあ。
現代の技術では容易く作れるってことが、もともとの発明の価値を下げるわけでもないし。
350 :
326 :2006/11/19(日) 23:46:36
>>330 ありがとうございました。
お陰さまで解決しました。
Plan9でも使っててください…
>>323 大体は最初は古いバージョンで新しいバージョンのソースをコンパイルする。
そして今度はコンパイルで出来たものでまた新しいバージョンのソースをコンパイルする。
pascalは昔自分で自分のコンパイラ生成が出来なかったためCより劣っているとされた。
後に仕様を追加してコンパイルできるようになった。
wikipediaの 『本物のプログラマーはパスカルを使わない』 で本物のプログラマは…との賜ってる人は 今で言うとC++MFC/ATLじゃないと…といってる人だな。
>>352 gccのビルドはまさにそんな手順だよね。
355 :
323 :2006/11/20(月) 12:17:03
>>324 YACCをググってみたけど良くわからんですねorz
高級言語ばっかり使ってるから……
C#+.NETなんて超高級だよなあ
>>352 それはわかるんですけど、その最初のバージョンはどうやって
つくるのかがイメージ出来ないんです
例えば今全く新しいCPU向けに gccを移植したいとすると
x86用のgccから新CPU用のgcc(バイナリ)が
つくれるってことですか
アセンブラでシコシコ書かなくても?
c#とは関係ない話題ですが……
>>355 yaccは文法定義から構文解析するCの関数を吐くツールだよ。
新しいCPUでは最初にgccのコード生成部分だけ置き換えてクロスコンパイラを作るんだよ。
コンパイラは必ずしもターゲット上で動かす必要はないだろ。
357 :
323 :2006/11/20(月) 14:27:17
>>356 なるほど !
ようやくイメージがつかめました
358 :
デフォルトの名無しさん :2006/11/21(火) 00:11:33
GZipStreamを使ってファイルを圧縮してみましたが すべてのファイルが容量が増えていますがなぜどしょうか。
何を圧縮したの? GZipStreamはじめて使ってみたけど、圧縮率悪いね。 中身のファイル名に変な拡張子つくし
360 :
デフォルトの名無しさん :2006/11/21(火) 01:00:56
1KBのテキストファイルや600KB位のDLLや10MBほどのWAVファイルとかです。 コードがおかしいのかと思ってMSDNのサンプルコードそのまま使っても 2/3くらい元のファイルより容量が増えてます。なんでだろ・・
どうやら単純に圧縮率が低いだけみたい。 冗長なファイル("a" x 16400000)を圧縮したら158275バイトになったよ。
gzipするならtarと組み合わせなきゃ
ばかはっけん
昨日からC#始めました。 デフォルトではDebugモードになってるらしいですが Releaseモードにはどうやって切り替えるんですか? それらしい設定が見当たらないよー(ノД`) VC#2005Expressです。
あちこちいじってみなよ
>>364 標準ツールバーのソリューション構成ボックス
Expressは普通にビルドするとリリース、デバッガ起動時はデバッグでビルドされる。
,一-、 / ̄ l | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■■-っ < んなーこたーない ´∀`/ \__________ __/|Y/\ Ё|__ | / | | У |
いや、ソリューション構成なんかねえんだよ
昨日から始めたらまだリリースする必要ねえよ
>>364 プロジェクト→プロパティ→ビルド→出力パス
ツール>オプション>全ての設定を表示 >プロジェクトおよびソリューション>ビルド構成の詳細を表示
374 :
364 :2006/11/21(火) 23:47:54
できました。
教えてくれた方ありがとうございます。
因みに
>>369 は俺じゃないです。
質問です。 フォーム上の色を取得する関数って有りますでしょうか? 例えば、フォームの右半分が赤色で左半分が青色だったとして、 色を取得して、青色だったら何々、赤色だったら何々と処理を分けたいのですけれども・・・
その色は誰が塗ってんの?
>>376 自分です。
例えば、青色の線のところだけ動く亀みたいなプログラムを組む場合、
フォーム上の青色のところだけ取得したいんです。
画面の色を取得するより 塗った領域を保存しておいた方がいいんじゃね?
>>377 例えば、亀さんが動くコースをデータとして持っておいて、定期的に:
1、そのデータに従ってコースを描画する。
2、亀さんの現在位置に亀さんを描画
みたいなことをする。
ダブルバッファリングするなり、必要最小限の位置を描きかえるなりしないと
フリッカーが出るよ。
領域を保存とはどういう意味でしょうか? 塗った領域を保存すると、例えばフォームが黄色で中に青い円が書いてある場合、 青い円の上だけ亀が動くプログラムが作れるのでしょうか?
>>380 円の座標と半径を覚えておけばいいだけだろうw
決められたコース上を動かすのが重要なんじゃなくて、画像を認識することが重要なの?
フォームにBitmapを貼り付けると言う条件付きで そのBitmapの色ならGetPixelで取得可能
Win32APIならフォームのDCハンドル取ってGetPixelしたもんだが。 Conterol.CreateGraphicsでGraphicsを作って、それをBitmap(Int32, Int32, Graphics)に食わせてGetPixelすりゃいいんじゃなかろうか。
.NET 2.0 の SerialPort クラスを使って、常に 232C から流れてくるデータを表示するだけの ソフトを作っています。 Start ボタンを押すと、受信開始、Stop で受信終了という単純なものです。 で、serialPort_DataReceived イベントメソッドを使用して受信は問題なく行えるように なりましたが、データ受信中 ( 表示中 ) は Stop ボタンを押しても Button_Click イベントが起動しません。 232C の送信を止めると、データ受信も終わり Stop ボタンも効くようになります。 serialPort_DataReceived イベントが発生し続けるので、Button_Click イベントに 割り込みが行かないようです。 Button_Click を効くようにするには、何かコツがあるのでしょうか?
SerialPortクラスって使ったことないけど、通信はちゃんと別スレッドでやってんの?
>>387 すんません。分かりました。テキストボックスをスクロールさせるために、TextChanged イベントメソッドの中で
this.Text.SelectionStart = this.Text.Text.Length;
this.Text.Focus();
this.Text.ScrollToCaret();
としていたため、ボタンにフォーカスが行ってなかったようです。
this.Text.SelectionStart = this.Text.Text.Length;
this.Text.ScrollToCaret();
に変更したら問題がなくなりました。
すんません、教えて下さい TEXTBOXとかに入力された数値ってstring型(object)になりますよね。 これをdouble型にキャストするのってどうやるの?
double.Parse()
>>390 早いなー!!
ありがとうございました。
もしよかったらもう少しおしえて下さい
string hoge = textbox1.text;
みたいには使えないんですよね?
いや、いいんですよ。罵倒しても
なんでやってみないの?
>>392 ごめんなさい。家のPCではVSが重くてまともに動かないんですよ(言い訳)
>>393 重ね重ね感謝します。
ありがとうございました
395 :
394 :2006/11/22(水) 20:54:11
private void button1_Click(object sender, EventArgs e) { string v = textBox1.Text; double.TryParse(v); MessageBox.Show(v); } じゃないんですよね。引数の使い方がわかりません。
>>396 textboxに入力された数値に係数を掛けたいんです・・・・
あと数値かどうかの判定とかも
>>395 センスなさ杉。
MSDNライブラリを百遍ほど読んで来い。
こうか? string v = textBox1.Text; double d; if (double.TryParse(v, out d)) { MessageBox("double にキャストした値は" + d.ToString()); }
string v = textBox1.Text; double d; if(double.TryParse(v, out d)){ MessageBox.Show(d); }else{ MessageBox.Show("パーズできねえ"); }
double d = double.Parse(textBox1.Text)
try{ Double d = Double.Parse(textBox1.Text); MessageBox.Show(d.ToString()); } catch{ MessageBox.Show("数値でない"); }
漏れはエラーには例外使う方がこざっぱりしてて好きだな。 フレームワークも何かつうと例外投げてくるし。
>>405 parseの発音は[-s]でも[-z]でもかまわんよ。
うむ
こんなレベルのが会社…!? 一人のニートが今戦慄を憶えた。
職業プログラマなんて大半がやばい人ばっかだからw
センスないプログラマは若いうちに辞めて他の仕事探したほうがいいと思う。
多分、職業プログラマじゃないだろ。 意外とC++使いとかw
PowerShell
つかう?↑
>string v = textBox1.Text; MFC使いには絶対に思い浮かばない発想。
>>414 その行だけなら、正常な頭をもつ C# 学習者なら誰が
思いついてもおかしくないような気がしなくもないけど・・・
MFC 使いだった人はC#でも textBox1.GetText(str) とか書くの?
コンパイル通る?
そんなことしない、メッセージをポストします。
textBox1.GetText(str) むう?
「ポストします」って日本語おかしくね?
(;^3^)
>>360 GZipStreamとDeflateStreamで圧縮するときはBufferedStreamなどでバッファリングしないと圧縮率が悪いようだ。
StreamWriterはそれ自身がバッファリングしてるからいいがBinaryWriterやらTextWriterを使った場合は必要となる。
サンプルは独自にbyte[]でバッファリングをしているようだ。
ただ既に圧縮済みのデータやランダムなデータはそれでも大きくなってしまう。
>>384 ,385
回答大変有難うございます。
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Bitmap bitmap = null;
bitmap = new Bitmap(@"C:\backcolor.jpg");
pictureBox1.Image = bitmap;
int sizeX = bitmap.Width;
int sizeY = bitmap.Height;
for (int Y = 0; Y < sizeY; Y++)
{
for (int X = 0; X < sizeX; X++)
{
int P = bitmap.GetPixel(X, Y).ToArgb() ;
string s = P.ToString("X");
textBox1.Text += (s);
}
}
}
見たいな感じで、画像の色が何色か文字列に表示しようとしているのですが、
textBox1 = {Text = ネイティブ フレームが呼び出し履歴の最初にあるため、式を評価できません}
とでて、文字を表示できません。
どなたか、ヒントをいただけないでしょうか?
変数にはs"FF0000FE"string
とうまく代入されているみたいなのですが・・・
>>386 で書き込みしたものです。
あれから色々と試しているのですが、serialPort_DataReceived で受信をしている途中で
stop を掛ける( serialPort_DataReceived イベントメソッドのアンバインド、シリアル
ポートのクローズ ) をすると、時々とまってしまいます。
例外が出るわけではなく、ブロック ( GUI の表示がとまる ) してしまいます。
問題なく stop がかかり GUI も普通に表示されるときもありますが、時々とまります。
このソフトを動かしているマシンが遅く、他の処理が始まるとこの止まってしまうのが
顕著になります。
serialPort_DataReceived が複数呼ばれ、処理が終わらないうちに stop を掛けると
止まってしまうようです。
どうすれば良いでしょうか。
>>422 う~ん。
たぶんだけど、textBox1.Textってstringそのものじゃなく、
プロパティでしょ。だから”+=”がうまくいかないんじゃないの?
一旦ワークのストリング変数で”+=”を行ってからtextBox1.Textに代入
すればうまくいくような気もするが。
あと、sizeX,sizeYがどの程度か判らないけど、レスポンスを気にするのなら、
StringBuilderを使った方がいいカモね。
>>422 50x50のjpgで試したら、時間はかかったけど問題なく表示されたよ。
>>425 まあ、TextBoxのTextを内部でどのように保持しているかだけど、
エディタとしての機能を考えると、改行毎のストリング列に変換してるぽいから、
get,setするたびにすごい変換がかかるし、
ストリングそのものが遅いって話しもあるしね。
時間がかかるのは仕方がない。
せめてループの外で設定しろって・・・
>>422 もうちょっと詳しく書けよ。
俺も試したけど、どう問題なのか分からんかった。
どっかから例外が飛んでくるのか?
そりゃループの中で2回もP/Invokeしたら遅くなるのは当然。 しかし、遅くなるだけで完全に動かなくなるわけじゃないだろ。
GetPixelもGDI+をP/Invokeするからループの外に出すべきだな。 LockBitsで先頭ポインタを取得してMarshal.Copyか。
自分ならLockBitsしたらそのままポインタたぐって中を覗くけど。
433 :
422 :2006/11/23(木) 13:39:12
すいません。寝てました。 ウワーン、皆さん本当にやさしいレスありがとうございます。 どんなプログラム書きたいかというと、フォームの色を取得して青色のところだけ 絵が進むみたいなプログラムなんです。 色を取得して、16進数に直してwhile(色=0x青)なら、pictureBoxが動くみたいなのを 想像しています。 で、Cはそこそこ分かるんですが、C#は今回初めて使うんです。 とりあえず、トライアンドエラーで覚えていこうと。 IDEはVisual C# Express EditionでマシンはThink Pad s30です。 で、何がいけなかったかというとマシンが遅すぎなのと、背景が500*500だったので 表示に時間がかかりすぎて自分がコンパイルに失敗したと勘違いしたことです。 50*50ならいけました。 なんとかこれを高速化すること出来ないでしょうか? かなり正解に近づきつつあるとおもうので。
436 :
435 :2006/11/23(木) 15:27:59
>>433 ごめん勘違いしてるかな?(高速化)
435の高速化は、画面走査に効くけど、テキストボックスには効かない。
テキストボックスに関してなら、StringBuilderでテキスト操作後
テキストボックスに入れればよい。
それから、レスポンスを測りたかったらStopwatchクラスを使うとよい。
StopwatchもStringBuilderも簡単だからヘルプを見てね。
>>435 テキストボックスも高速化しなきゃいけないのですか?
Bitmap bitmap = null;
bitmap = new Bitmap(@"C:\hoge.jpg");
pictureBox1.Image = bitmap;
int sizeX = bitmap.Width;
int sizeY = bitmap.Height;
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
int stride = bitmapData.Stride;
System.IntPtr Scan0 = bitmapData.Scan0;
unsafe
{
byte* p = (byte*)(void*)Scan0;
byte green;
byte red;
byte blue;
for (int Y = 0; Y < sizeY; Y++)
{
for (int X = 0; X < sizeX; X++)
{
green = p[0];
blue = p[1];
red = p[2];
p += 3;
string s = green.ToString("X");
textBox1.Text += (s);
} } } bitmap.UnlockBits(bitmapData); } とりあえず、 RGBのGだけ表示させようと思うんですけれど(うまくいけば後で連結させればよいかなと思って) 文法的に大丈夫でしょうか? 参考を例に適当にでっち上げてみたんですけれど・・・ 何をどうすればよいのか分け分からなくなってきました・・・
>>438 >文法的に大丈夫でしょうか?
コンパイラに聞けよボケ
まあ 5x3 ぐらいの小さな画像で GetPixel と比較しながら試してみると良いさ。
>int stride = bitmapData.Stride;
>>437 さしあたって、RGBの順番が違ってそうだね。
と、
>>441 が指摘してるように、yのループでのオフセットを進めないとね(参考例と違ってる)。
>テキストボックスも高速化しなきゃいけないのですか?
う~ん、それだと、絶対テキストボックスへのテキストの代入がネックになるから
高速化は期待できない。
テキストボックスに代入して何がしたいのかがわからない。
必要?それともデバッグ用?
デバッグ用と仮定しての話し。
下の文は外すべきでしょ。
string s = green.ToString("X");
textBox1.Text += (s);
そうでなければ、さしあたり、
string s+ = green.ToString("X");
にして、
textBox1.Text = (s);
をループの外に出したら。
出来れば、「string s+ = green.ToString("X");」をStringBuilderにした方がいいと思うけど。
ちなみに、StringBuilderなら、newして、AppendしてToStringすればいいだけなんだけど。
レスポンスは、テキストボックスへのテキストの代入、次にstringへの代入、StringBuilderの
順で速くなるから、これだけのループなら通常StringBuilderを使うと思うけど。
デバッグ用にしても、StringBuilderを使う。
>>437 もうちょっと、フォローしておくと、
>>422 が遅い原因が2つ考えられる。
・画面全域をGetPixelするにはつらいこと
・テキストボックスへの直接のテキストの代入。
自分のカレント位置が有って、その周囲8ポイント程度を見るのなら、
GetPixcelでOK。画面全域チェックならサンプルの方法を行う必要がある。
(以前自分が、写真の鮮鋭かを行ったときサンプルの手法でレスポンスが、
コンマ数秒程度で出来た。)
テキストボックスは、上にも書いたけど単純なstringの代入と思わない方がよい。
プロパティ(内部で複雑な処理が可能)のため、代入以外処理を行っている可能性大。
このため、非常にレスポンスが遅くなる可能性が有る(これは未チェック)。
ただし、数十万回のループなら、stringへの代入でも遅いはずだから、
スピードアップ用に用意された、StringBuilderを使うべき。
あたたかいお返事本当に有難うございます。少しだけ進歩しました。 お返事いっぱい頂いたのですが、 文字列を表示するのが本来の目的でなく、背景色が何色か調べるのが目的なので unsafe { int* p = (int*)(void*)Scan0; int color; for (int Y = 0; Y < sizeY; Y++) { for (int X = 0; X < sizeX; X++) { color = p[0]; string s = color.ToString("x"); int Compare = string.Compare(s, "fe0000fe"); if (Compare == 0) { MessageBox.Show("背景は青です"); } p += 4; textBox1.Text += (s); } これで、等しいが出るようになりました。 あとはifをwhileに変えてtrueの間だけpictureboxを動かせば良さそうです。 ここスレの皆様のご恩はわすれません。 どうもありがとうございました!
http://www.codeproject.com/cs/miscctrl/alphablendtextbox.asp ここにあるコントロールのインストール法が分かりません。ツールバーってどこですか?
誰か教えてください。
To use this control from the Visual Studio designer,
simply right click on the tool bar and choose "Add/Remove Items" and then click "
Browse" and browse to the AlphaBlendTextBox.dll file.
After doing this, the AlphaBlendTextBox control should appear in your tool bar (under "My User Controls" if you have VS2003). Now you can drag the control to a form and use it just like the original TextBox control.
The control has a new property named BackAlpha that will allow you to set the control's background alphablend value.
The range is 0 for transparent, 255 for opaque, or in between for translucent.
>>446 できました。ありがとうございます。
ツールボックス上でアイテムの選択というのを押したらできました。
>>444 ↓あぶなくないか?
p += 4;
Strideは4バイト境界用のパディングぽいから、送るのは
4未満のどの値が入るか分からないと思うけど。
サンプル通りにつくりたほうがよい。
多分、バグってると思われ。
第一、intは4オクテットだから深度3なら隣のピクセルの頭まで食ってる。
>>445 この程度のコントロールなら自前で用意したほうが早い
>>444 色が等しいかどうかなのになんで文字列同士の比較してんの?
intで比較しろよ
>>452 俺はこんなの簡単に作れるんだぞって言いたいだけだから相手スンナ
どーせリアルでは何も出来ない奴さ
カワイソウ
すいません、やはりうまくいきません。 画像を指定座標に表示するためにはどうすればよいのでしょうか? Bitmap icon = new Bitmap(@"C:\icon.jpg"); 画像の読み込み unsafe { int* p = (int*)(void*)Scan0; int color; for (int Y = 0; Y < sizeY; Y++) { for (int X = 0; X < sizeX; X++) { color = p[0]; string s = color.ToString("x"); int Compare = string.Compare(s, "fe0000fe"); while (Compare == 0) { Graphics g = pictureBox2.CreateGraphics(); g.DrawImage(icon, X, Y); p += 4; } } } } みたいなことは出来ないのでしょうか? 自分のイメージでは画像が走査線のように違う色まで走っていって欲しいのですけど。
人の話を聞かないのなら来るな
>>455 もうおなかいっぱい。釣りなら他所でやってくれ。
答えられないとなると急に叩きですか?w レベル低っ
>>455 いやさ、そのレベルなら画像処理なんてやめといたほうがいいと思うよ。
もうhello worldからやり直してください。ほんと頼みます。
>>458 最近、こういうのが流行ってるの?
すぐに答えをもらえないと悪態をつくっていうの。
ただの煽りだろ
>>426 結論から先にいいますと解決しました。
serialPort_DataReceived イベント自体がセカンダリスレッドで動作しますので
別スレッドで動作していることになっています。
でこのイベントメソッドの中で受信したデータをフォームに貼り付けていますが
この貼り付けも Delegate を使用し、
this.Invoke(Delegate, receivedData);
としていました。
これを、
this.BeginInvoke(Delegate, receivedData);
とすることで問題を回避できました。
マルチスレッドを扱ったのが初めてでしたので、ちょっとスレッドの勉強になりました。
もしも EndInvoke を呼んでないとしたらやばいかもよ
465 :
444 :2006/11/24(金) 00:45:42
すいません、寝てました。
やっぱり自分には出来そうにないのであきらめます。
最後にお返事だけ。
>>448 windowsは色が32ビットで表されると書いてあったので、
p+=4にしました。
>>449 自分では、何をおっしゃっているか理解できません。
ただ、黒0x00000000と赤では上手くいきませんでした。
青0xfe0000feと白0xffffffffの時は規則正しく同じ値の繰り返しだったので、
隣のピクセルは喰っていないと判断しました。
>>451 まず、16進数で判断したかったんです。
で、文字列にしないと自分の力では比較方法が分かりませんでした。
>>458 自分じゃないです。
___________________________________________
もしこれがC#とWindowsじゃなかったら、
パレット設定して直接VRAM0xa0000に書き込むんですが・・・
今回は有難うございました。
自分にはWindowsは難しすぎです。
昨日から >int stride = bitmapData.Stride; つってんだろうがよぼけ!
PixelFormat.Format24bppRgb とか自分で書いてるし!ムキー!!
Windows が難しいんじゃなくてプログラミングが難しいんじゃないか おまいさんには 数字と数値の区別も付いてないし
469 :
デフォルトの名無しさん :2006/11/24(金) 03:21:12
すいません、 webのItemDataBoundみたいなイベント、windowsフォームにはりつける datagridコントロールにありませんか?
470 :
444 :2006/11/24(金) 08:13:53
>>466 これって調べましたけれど何に使うのですか?
BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadWrite, PixelFormat.Format32bppRgb);
って指定して、
color = p[0];
intで4バイト読みこんで、(RGBと使わないビット)
p += 4;
じゃ駄目なんでしょうか?
>>467 いろに種類があったなんて知らなかったです。
勉強になりました。ここは参考コードのコピペです。
Format32bppRgbが求めているものになるのでこれに直しました。
>>468 そうですね、プログラミング向いてないです。
でも、今までメモリアドレスと数字しか使わないプログラミングしかしてこなかったので。
文字列型とか始めて知りました。
でも、C#2日目ですから、大目に見てください。
const string[] hoge を初期化したいのですが、どうしたらできるでしょうか。 よければGoogleでVC++を除いてVC#を検索に引っ掛ける方法があれば教えてください
>>471 static readonly にでもしとけ
Web Search なら main filetype:cs
Code Search なら main lang:C#
>>472 hoge[0] = "something"; が可能になる罠
VB6のString$(回数, 文字列)みたいに、charじゃなくてstringを 繰り返すのってどうやればいいでしょうか?VB.NETの互換ライブラリはなしで。 ありがちっぽいんですが探せなくて。いまループで処理してます。
StringBuilderを使ってループで処理する。
>>464 御指摘ありがとうございます。
IAsyncResult ar = this.BeginInvoke(Delegate, receivedData);
this.EndInvoke(ar);
という風にしてみました。
超初心者PGの質問です。 スレ違いならばご指摘ください。 UI層、コントロール層、データアクセス層、エンティティ層の構造です。 そのエンティティ層のクラスの考えなのですが、 1.DBのテーブルに依存するのか テーブルと1対1に定義する。 2.データアクセス層のSQL処理に依存するのか Select したいテーブル(結合含む)に定義する。 つまり、Select別に同じようなエンティティクラスを定義する なんだかよくわかりません。 どなたか考え方のご教授願えませんでしょうか・・・orz
>>470 スキャンライン [ピクセル | ピクセル | ピク・・・・・・・・・・・・・・・・・ | パディング ]
|--------width×ピクセルのサイズ----------|
|-----------------------stride----------------------|
別にC#に限った事ではなくて一般的な話。
479 :
477 :2006/11/24(金) 16:21:06
すいません 意味がよくわからないですね・・・orz ようは 1.DBのテーブルに依存する。 テーブルカラムと1対1に定義する。 Aテーブルのaカラム : A.a Bテーブルのbカラム : B.b 2.データアクセス層のSQL処理に依存する。 Select したいテーブル(結合含む)ごとに定義する。 つまり、Select別に同じようなエンティティクラスを定義する Aテーブルのaカラム : A.a Bテーブルのbカラム : B.b Cテーブルのa,bカラム : C.a C.b a と b は同じ内容です。 テーブルのちがうカラムを いっぺんでSelect するときは? どのようにあればってことなんです。
>>479 どういう答えを欲してるのか分からん。
もしアーキテクチャ理論の話がしたいんならスレ違いじゃないかな。
481 :
477 :2006/11/24(金) 17:46:51
あぅ・・・ そうですね・・・ すません エンティティクラスの実装のしかたなんですが 1.テーブル依存なのか 2.処理依存なのか ってことなんです・・・・
>>471 String以外の参照型は定数にできない。
配列要素も変更不能にしたければReadOnlyCollectionを使う。
static readonly ReadOnlyCollection<String> strings =
new ReadOnlyCollection<String>(new String[] { "foo", "bar" });
483 :
477 :2006/11/24(金) 18:26:36
>>477 俺のパソでそのURLを表示させると
ASP.NET に熟練する: カス...
とタスクバーに出て笑った。
>>483 DBに実装を載せるお兄ちゃんなんかキライッ!
くだすれC#ってないの?
パネルにテキストボックスとピクチャーボックスを配置して ピクチャボックスには画像(白を透過)を貼ってあります。 ピクチャーボックスの透過部分がテキストボックスと重なったときに テキストボックスが見えるようにしたいんですが パネルの背景色でテキストボックスが隠れてしまいます。 どうすればいいのか教えてください。
むりぽ
490 :
488 :2006/11/25(土) 14:51:56
>>490 図形にいちいちウィンドウハンドル割り当てるのも馬鹿らしいから、
普通はControlあたりを継承して自作のコントロールを作る。
>>491 ありがとうございます。
自分で作ったコントロールをフォームなどに配置していくような感じでしょうか?
まだ自分には難しくて無理そうですが自作コントロールを作ってみたいと思います。
DirectXでゴリゴリ描くとか
漏れならGDI+でへろへろ描く。 隅っこつまんで引っ張ってとか、触れる辺毎にカーソル変えてとか、 あれこれ細かい操作するなら自前で描画するのが結局いちばん楽だし動きも速い。
質問させてください VS2005ExporessでC#を勉強しています。 ディレクトリ単位でzip形式に圧縮するための 方法、サンプルなどありましたらお教えください
>>495 > VS2005Exporess
エクスポレスでつか。そうでつか。
zip形式に圧縮するのは自前でやるならzipヘッダ吐き出してDeflateStreamを使ってやるんだけど
初心者には大変だろうから、SharpZipLibを使うのがお勧め。
あれ? .net2.0からzip用のライブラリ追加になったはずだが???
ZipInputStreamだろ?
>>496 ありがとうございます
このご恩は10秒間忘れません
500
ごめん。 追加されたのはGZipStreamだった…
>>497 GZip/Deflate なので複数のファイルを纏めるのは無理
3.0 で追加されたとか何とかどっかで聞いたような気もするが
圧縮の形式ってほかにcabとかあるけど、 どうしてマイクロソフトはそれを標準にしないんだろう。 cabってzipより大幅に劣ってる?
圧縮アルゴリズムにLZX(21)を使えば、圧縮性能はzipやlzhよりは遥かに高いけど、4,5倍の時間がかかる。 cabはアーカイブに署名できたりしてけっこう面白いんだけどね。
遙かに高いってw こいしの基準っていったい・・・w
既存のコントロールの様に、例えばCancelEventを起こすにはどうすればいいのでしょうか? 要は、 CancelEventを持つ、あるUserControlを保持するFormが、 イベントをキャンセルするかまず決め(e.Cancelをtureにするとか)、 その上でUserControlで処理を行いたいのです。 しかしUserControl側から順にイベントを呼び出されてしまい、 どうしようもありません。御教授お願いします。
>>507 ごめん。何が言いたいのかよく分からない。
509 :
507 :2006/11/26(日) 01:15:52
ごめんなさい。 UserControl1はCancelEventHandlerを持ち、 メソッド1をCancelイベントに登録した。 Form1はUserControl1を保持している。 そして同じくCancelイベントにメソッド2を登録した。 UserControl1上でCancelイベントが起きた。 -ここから希望- Form1が登録したメソッド2が呼び出され、CancelEventArgs.Cancel値をいじる。 次にUserControl1もメソッド1が呼び出されCancelEventArgs.Cancel値がどうなったか知り、 それに応じて処理を行う。 -ここまで- しかしイベント呼び出しは、当然というかUserControl1から行われるため、 Form1側でいじった値をUserControl1が知ることは出来ない。 じゃあどうすれば、UserControl1の方で値がどうなったのか分かるのよといった話で、 どうも文章も本当に下手で申し訳ないです。
>>509 FormClosing FormClosed みたいにふたつに分けたらどうだろう?
ちなみにイベントに登録されたデリゲートが呼ばれる順序は規定されてないのでどんな仮定もしてはだめ。
>>509 いや根本的にイベントの使い方を間違ってると思われ。
UserControl1自身はいつイベントが発生するか知ってるんだから、
わざわざイベントハンドラを登録する必要なんてない。
private CancelEventHandler foo;
public event CancelEventHandler Foo { add; remove; }
void OnFoo()
{
CancelEventArgs e = new CancelEventArgs();
foo(this, e);
MessageBox.Show(e.Cancel? "canceled" : "not canceled" );
}
>>511 OnFoo は protected virtual void OnFoo(HogeEventArgs e) がお約束だぜぇ
>>512 分かってるが、そうすると例示するコードの段階が増えるじゃんけ。
素朴な疑問だが UserControl1.CancelEvent(CancelEventArgs e){ parent.CancelEvent(e); if (...){} } じゃだめなん?
parentって何だよ。
普通イベントフィールドはprivateだから特殊な作りをしていなければUserControl1から見えないんじゃなかろうか。
>>511 そこでfooのnullチェックってしなくても大丈夫だっけ?
520 :
507 :2006/11/26(日) 02:35:42
>>510-519 さん方
どうもありがとうございます!胸のつかえが下りました。
なんというか、イベント呼び出しの順序が決まってない、
というのは正直雷が落ちたような気分です。
delegateをCombineしないでリストで持っとけばいいんじゃね?
プロテクトプロパティって、要するに使いたかったら継承して 使えやゴルァって理解で桶?
>>231 亀レスだが、不可能ではないと思われ
ただその手のことはJavaのほうが向いていると思う(JXTAという専門API群があるので)
教えてください 構造体の中に構造体を入れることはできるんでしょうか?
30秒でできるんだから自分で試してみたらどうでしょうか
2004年ごろCマガでJXTAを使ったP2Pの連載があったな…
>>526 多分やったが出来なくて、出来る方法があるのか知りたいのだろう。
自分自身を含ませることはできん
やっぱり出来ないみたいですね。ありがとうございました。
できるから
構造体の中に自作の構造体を入れられるかということだろう?
むしろなんでできないと思ったのか聞きたい。 うまくいかない方法なんてあるの?
マーシャリングがらみと見た
そうだね。 たぶんねー apiから受け取る構造体の要素に可変長の構造体があるんだよ。 むりぽ。
Marshl.Copy上等
>>540 循環参照になっててコンパイラに怒られてるだけだろ?
無関係な構造体なら入れ子にできる。
ざっつおーる!
よく分かりました。 どうもありがとうございました。
これは循環参照。 struct MyStructA { MyStructB B; } struct MyStructB { MyStructA A; }
これも循環参照。 struct MyStructA { MyStructA A; }
/unsafeで、これはおk。 unsafe struct MyStructA { MyStructA * A; }
547 :
デフォルトの名無しさん :2006/11/27(月) 10:43:24
unsafeを使えば出来るんですね。ちょっと難しそうですが・・・ ポインタの勉強もしないとだめですね。 ご丁寧にありがとうございました。
コネクションを生成したり、DataReaderを返してくれたりするデータベースクラスの抽象クラスを作ろうと思います。 (これを継承してOracleやらPostgreSQLにする) コネクションを生成するメソッドは抽象クラス側で実装したいのですが、使用するデータベースごとにConnectionオブジェクトの型が違うことで躓いてます。 (IConnectionインターフェイスのようなものがあるかと思っていた。)ジェネリックなどを使えば、型の違いは隠蔽できるのかと思ったのですが、どうにもうまくいきません。 ちなみに↓のようなコードを一般化したいです。何かアドバイスを頂ければと思います。 private NpgsqlConnection con; void ConnectionOpen(){ con = new NpgsqlConnection(~); con.open(); }
あるって、抽象の実装やインターフェイスが。 2.0ならプロバイダファクトリ使いな。
550 :
548 :2006/11/27(月) 14:23:04
2枚の画像を使い、ある座標と座標をつなげて 3次元画像を作成したいのですがどうすればいいのでしょうか? お願いします。
まず赤と青の眼鏡を用意する
みなさんログを取るときってどんな工夫してますか? 自分はコンソールやファイルに直に書き出しているのですが、もっとスマートにできる方法を求めてます。 log4netなどはどうでしょうか?
赤い絵と青い絵を少しズラして、その眼鏡をかけて見る。 子供の頃、雑誌の付録でなかった? 映画でも有ったはず。
なんのくふうもしないなら、System.Diagnostics.Trace EnterpriseLibrary使うなら、これに入っているLoggingの機能 log4netつかっていいならlog4net みんな気に入らないなら自作
>>550 多くの場合は、構成ファイルの接続文字列設定からとってくる。
この設定にはプロバイダ名を指定できるようになっているので、
ここからとってきたプロバイダ名からプロバイダファクトリを取得して
各種オブジェクトを作成するようにすればいい。
>>556 >>558 なるほどなるほど。やっぱり外部ツールを使ったほうがよさそうですね。
log4netを扱った日本語サイトが軒並み更新してなさげだったので、廃れてしまったのかと思ってました。
そういやEnterprise Libraryの利用もあまり聞かないけど自分だけなのかな?
log4netて.NET2.0に対応してたっけ?
>>560 Log4net is available for several frameworks. For each supported framework an assembly targeting that framework is built:
Microsoft .NET Framework 1.0 (1.0.3705)
Microsoft .NET Framework 1.1 (1.1.4322)
Microsoft .NET Compact Framework 1.0 (1.0.5000)
Mono 1.0
Microsoft Shared Source CLI 1.0
CLI 1.0 Compatible
http://logging.apache.org/log4net/release/manual/introduction.html ダメっぽ(;ω;)ヴワッ
ぶほ
フォントのサイズをピクセルで知りたいんですけど どうすれば分かりますか?
文字ごとに違うけどな…
フォントサイズが13の時に何ピクセルになるか? みたいな事なんですが 何とか工夫してやってみたいと思います。
>>564 TextRenderer.MeasureText
Graphics.MeasureString
Scripting.FolderClass等を使ってフォルダのサイズを取得するものを作ったんですが Sizeプロパティで帰ってきた数値をlong型とか(計算出来る型)に変換したいんだけれど どうすれば良いですか? とりあえずできあがったのがこんな感じで、 public static void Main() { string path = @"C:\Program Files"; Scripting.FileSystemObject foj = new Scripting.FileSystemObject(); Scripting.FolderClass FSobj; FSobj = (Scripting.FolderClass)foj.GetFolder(path); Console.WriteLine("{0}byte", FSobj.Size); } ^^^^^^^^^ ^^^^^^^^^部分のFSobj.Sizeの戻り値をlong型とかuint型にしたいです・・・。
そもそも Size プロパティ自体 int で返ってきてるはずだけど。
>>571 System.IO使って再帰的になんとかって方法も考えました。でもFSOを使いたいのです。
>>572 まじで?int型の変数に代入できないんだけど?
Scripting.FileSystemObjectってどこにあるの? WSHのランタイムライブラリをtlbimp?
ファイルを開くダイアログでプレビュー機能をつけたくて とりあえず、OpenFileDialogを継承してみたのですが、プレビューさせるコントロールをはる ところがわかりません。
c++スレに帰ったほうがいいよ。
>>574 Microsoft Scripting Runtimeを参照設定しました。
C#ではそんなことすらできないんですか? となると、要望の多い業務アプリにはやはり不向きなんですね
そうだね
>>578 いい加減粘着はやめたらどうだ?
初心者用の内容じゃないだろ。
馬鹿の一つ覚え。
とおり一辺倒のアプリならC#のほうが簡単に作れるけど ちょっと枠からはみ出したアプリを書こうとするとMFCのほうが簡単だよ
582 :
574 :2006/11/28(火) 00:25:33
>>570 どうやらマーシャリングの設定がうまくいってないみたいで、
Int32をボックス化したのが返ってきてるけど、そのままunboxしてしまえば元に戻せる。
何でここはID出ないの?
でもintだから2G以上取得できないよ?
>>582 そもそも IFolder::Size は VARIANT なんで object にされるのは必然。
>>578 誰も出来ないといってませんが???
普通にform作ってダイアログにも出来るし…
MFCより簡単だと思うが???
>>588 その論争はあまりにも非建設的だから他所でやってくれ。
次はpdfのプレビューとか言ってくるんじゃないかな?
591 :
デフォルトの名無しさん :2006/11/28(火) 01:34:34
usingを定義すれば、クラスやインターフェースの名称がぶつからない限り、 namespaceを省略出来ると思いますが、 ウィザードが生成したWindowsアプリケーションのソースは private変数定義時に、"System.Windows.Forms"のnamespaceを省略していません。 これは何故なのでしょうか? また、こうすべきなのでしょうか?
デザイナで使われるクラス名がよそで定義されてたら困るからな。
自作コードではランタイムのクラスにまるかぶりのクラス名なんか作らないから、 usingしたほうがいいっしょ。インテリセンスの意味なくなるし。 またかぶるべきでもない
デザイナは機械的な処理を行うんであって 「わざわざ」省略形にするメリットがない。 デメリットと危険はいっぱいあるが。
595 :
591 :2006/11/28(火) 02:13:07
>>592-594 なるほど。汎用的なコード生成の為、安全を図ってるわけですね。
確かに自分で作るアプリケーションであれば、
同じ名前のクラスなんて基本的に作らないでしょうから、
usingを記述して、安心してnamespaceを省略しようと思います。
2.0のドキュメントをdexplore.exe使ってローカルで読みたいんだが、どうすればいいんだ
PSDKをインストールする 簡易版でいいならVC#Expressで一緒に入る
業務アプリをゴリゴリと書いてます。 データ表示用のグリッドを持つ類似した画面が10個程度あるのですが、基盤となるデザインを共通化するのにフォームの継承を使うのは拙い考え方でしょうか?
なんで拙いと思ったのか
600 :
デフォルトの名無しさん :2006/11/28(火) 16:35:06
Streamをいくつかつなげる場合の方法なのですが、次のようにまとめて書いていいのか using (BinaryWriter bw = new BinaryWriter(new BufferedStream(saveFileDialog1.OpenFile(), 1024*16))) { bw.Close(); } それともひとつひとつClose, Disposeしていったほうがいいのか教えてください。 using (Stream fs = saveFileDialog1.OpenFile()) { using (BufferedStream bf = new BufferedStream(fs, 1024*16)) { using (BinaryWriter bw = new BinaryWriter(bf)) { bw.Close(); } bf.Close(); } fs.Close(); }
601 :
デフォルトの名無しさん :2006/11/28(火) 16:38:44
StreamWriterやStreamWriterはそれ自体がバッファを持っているらしいので BufferedStreamを使う必要はないと考えていいのでしょうか? またBufferedStreamと組み合わせて使ってもいいものなのでしょうか?
using使っていればわざわざCloseする必要ないよ。
BufferedStreamとBinaryWriterは、もともとのStreamをまき沿いにして閉じるからそっちも考慮不要。
>>601 BinaryWriterはStreamWriterを継承してない。バッファも持ってない。
using (BinaryWriter bw = new BinaryWriter(new BufferedStream(saveFileDialog1.OpenFile(), 1024*16))) {
//処理
}
>>603 クラス内ではイベントをOn~で実装しないか?
>>602 ありがとうございます。連鎖的にClose/Disposeしてくれるわけですね。
601は質問の仕方が悪かったようで、少し訂正します。
普通はこれでいいとして
StramWriter sw = new StreamWriter(saveFileDialog1.OpenFile())
大き目のバッファをとりたい場合に次のような書き方をすると、
StramWriter sw = new StreamWriter(new BufferedStream(saveFileDialog1.OpenFile(), 1024*16))
StramWriterのバッファとBufferedStreamのバッファが2重になって効率が悪いのではないかと思いまして、
StramWriteとBufferedStreamの組み合わせは普通するのかどうか聞きたかったのです。
>>606 StreamWriterのコンストラクタでバッファサイズ決めるんじゃいかんの?
二重にバッファリングすることでどの程度遅くなるかは分からんけど、無駄でしかないのは確か。
608 :
ちょっと :2006/11/28(火) 20:39:49
ご質問があるのですが、例えばYahooメール等にログインをする際には ユーザID パスワード を入力しますよね。その入力するのを自動化するソフトを作りたいと考えて います。どの様にすれば良いでしょうか? ※Web何とかメソッドを使用してWEBページに使われているHTML スクリプトを解析するという仕方は自力で調べて分ったのですが、ただ、 ターゲットとする特定URLのブラウザの項目にフォーカスを充て入力を行うという 方法が分りません。 誰かご存知の方がいらっしゃいましたらお教え下さい。
WebBrowser をはっつけてDOM操作するのが簡単かな
教えてください listbox等を二つ横に並べて繋げ、その間隔をスライドさせ変化させるのって できますか?
SplitContainer
>>608 漏れは、ログインしてガンスト起動するのを作った。
参考になると思う。
http://www.filebank.co.jp/guest/gtk2k/gunst pass:gunst
こいつは、APIでマウス操作してボタンをクリックしているが、(ボタンがFlashを使用しているためプログラム上でのクリックができないので)
yahooなどは
ボタン(HTMLButtonElement)やサブミットボタン(HTMLInputButton)を取得し、
Clickメソッドを実行するとそのエレメントのクリック動作をプログラム上で行う。
また、フォームを使用している場合、HTMLFormElementでフォームエレメントを取得し、Submitメソッドを実行すると
フォームのサブミットをプログラム上で行える。
これらを使用してログインできると思われる。
ご質問があるのですが(笑)
614 :
612 :2006/11/28(火) 23:29:20
漏れ?
キャストするときに ()演算子とConvertクラスは何が違うのでしょうか? あと、皆さんはどちらを使いますか?
616 :
デフォルトの名無しさん :2006/11/29(水) 02:08:26
>>609 DOM操作でうすか?ぐぐって試してみます。
>>612 詳しくご説明頂きありがとうございます。試してみます。
>>615 キャストはC#の機能でConvertクラスは.NETの機能なんじゃね?
漏れはConvertクラスは使ったこと無いかも。
俺はDBがらみでConvert.ToString(hoge)はよく使う。 hogeのDB項目がNULLの場合、キャストだと例外が発生するが、Convert.ToStringだと 空文字列にしてくれる。みたいな~。
えー
バイナリ吐く時はかならずといっていいほど使っています
621 :
デフォルトの名無しさん :2006/11/29(水) 12:33:16
623 :
615 :2006/11/29(水) 23:06:23
>>617 ,618,620
回答アリガトウございます。Convertの方が便利そうですね。
Convert.ToInt32(true) → 1 Convert.ToInt32(false)→ 0 が便利。
>>624 それくらいだったら三項演算子使おうぜ・・・
6つのラジオボタンがある。 これををクリックすると、このイベントメソッド内で NumericUpDown.Value の値を変更。 ( Click イベントか CheckedChanged イベント ) ↓ この値変更につれて、NumericUpDown.ValueChanged メソッドである処理が行われる。 というものをやっているのですが、ラジオボタンの 1つめを押すとちゃんと値が変更されますが 他のラジオボタンを押しても NumericUpDown の Value に 0 が入ってしまいます。 どうしてでしょう?
>>626 お前さんが何か困っているんだということはよく伝わってきたが、それ以外はさっぱりだ。
>>626 答えはソースコードにあるってばっちゃが言ってた
ばっちゃはおまえが産まれるまえに死んだはずだが?
>>626 変だな?俺のところではちゃんと動いたぞ。
>>630 変かもしれません。こちらは .NET CF なので。
俺のところも .NET CF だが。ちゃんと動くぞ。
626 です。解決しました。 NumericUpDown.Value に 32768 以上の値を入れようとしていたのですが、 PPC での NumericUpDown.Value は Int16 までしか受け付けない仕様でした。orz
実行しているプログラム自身で、どのくらいのメモリを消費しているかって どうやって分かるのでしょうか?
>>634 System.Diagnostics.Processクラスを使おう
ピクチャーボックスのペイントイベントで図形を書いた上に ボタンのイベントなどでGraphicsオブジェクトを作成し図形を書いたあと 他のプログラムのフォームが重なったりするとグラフィックオブジェクトで描いた図形だけが消えますが これをコードで行う事は出来ますか?
637 :
636 :2006/11/30(木) 14:52:06
picturebox1.invalidate()を使わずにしたいです。
DoubleBuffered = true; でちらつかなくて便利なのですが; 異様に遅いです。 Vista で Aero 対応のビデオボードになったら早くなるのでしょうか? C での ダブルバッファより大分遅いです。C で自分でダブルバッファしているのも Aero で早くなるのかな? 結局 DirectGraphic で書くしかないのかな。。2DのCADなんですけど
スケールにもよるがCADで描画するなら .netを直に使わないほうがいいんじゃない?
640 :
638 :2006/11/30(木) 21:13:13
>>639 .net は Aero 対応でも遅いのかな。。こっそり DirectGraohis に変わってくれていないんでしょうか?
C で自前で ダブルバッファにしていたのでは Aero も効かないでしょうけど。。
我が家のビデオカードでは Aero が動かないので。。。。
>>636 ボタンのクリックイベントでプライベートフィールドなBitmapに描画
PaintでそのBitmap描画
System.Windows.Forms.HtmlDocumentから、mshtml.HTMLDocumentに変換する方法はあるのですが、 その逆、msht(ryからSyst(ryの変換は可能でしょうか?
>>642 コンストラクタ公開されてないから無理じゃないかな。
どういう必要に迫られてそういう変換が必要になったのか分からないからこれ以上アドバイスできないけど。
リフレクションを駆使すれば不可能ではないが ま、普通に IHTMLDocument 使った方がてっとりばやかろ
645 :
642 :2006/11/30(木) 23:58:07
無理ですか、この為に費やしたのべ一日が…。
>どういう必要に迫られて
WebBrowser.NewWindowイベントでURLを知りたいと思いまして。
で、URLはAxWebBrowser.NewWindow3なら大丈夫なのでラッパクラスを作ろうか、
けどHtmlDocumentの便利さを失うのは嫌だし、自作は無理だろうと。何あのmshtml暗黒世界('A`)
ただ、指針を頂いたのでなんとかなりそうな感じ。IHTMLDocumentで頑張ってみます。
>>643 さん、
>>644 さんありがとうございました。
その用途なら、WebBrowser の ActiveXInstance を SHDocVw.WebBrowser にキャストできる。
DirectX使わなきゃ高速な画像描画なんて無理不可能
DirectX が駄目なら XNA だ!
そこでOpenGLですよ
わかったVoodooを用意しよう
654 :
649 :2006/12/01(金) 20:51:06
無理なんですね。 DirectX無しならBitblt呼び出すのが一番高速ですか?
ファミコンのエミュレータならつくったで。 LockBitsで、scan0でMarshal.Copyでx2(512x480)までなら60fpsだせるが、 これ以上になると60fpsだせない。
>>654 win32apiのかな。だったらうん。
ちゃんとダブルバッファリング使いましょうね。
>>649 のサイトの人、人に教えられるような知識はなさそうですね。
こういうインチキサイトは不特定多数の人に悪影響を与えるから
さっさと潰れて欲しい。最初に目についたのはこれ。
型名 ビット数 意味 値の形式
bool 1 bit trueもしくは false の値を返す 真偽値型(なんて呼び方するのかな?)
これ以外にもつっこみどころ満載ですね・・・。
便乗ですがbitbltの使い方簡単に教えてください
何のことかと思ったが分かったw しかしピープ、ピープ連呼してるねw
665 :
デフォルトの名無しさん :2006/12/02(土) 12:01:59
質問です VS2003を使ってますが、フォームのControlBoxをfalseにしたらフォーム全体のサイズが高さのみ若干小さく表示されてしまいます。 調べてみたら「ControlBox=false」「Text=""」の場合にキャプションバーが無くなるらしいので、 サイズ計算時にキャプションバーの部分だけ小さく計算されているように思います。 実際のサイズもデザイナで637、実行時617と、丁度20ピクセル(?)小さくなってます。 これを正常に表示する方法はないでしょうか。
ControlBox==false && .Text==""のときだけ キャプションの高さ足せばいいんじゃね?
あまりにも適当だな
669 :
665 :2006/12/02(土) 13:55:29
すいません。説明が足りてませんでした。
自分が作っているフォームはTextに文字列が入っています。
でもサイズ計算はTextに文字列が入っていないものでされているようなのです。
結果、フォーム内の一番下のコントロールが途切れて表示されます。
>>666 ただしい解決策が見当たらなければ、最悪そうしようと思います。
670 :
649 :2006/12/02(土) 14:27:32
答えてくれた人、ありがとうございます。 Bitbltでやってみますね。
>>669 普通子コントロールの配置とか考えるなら ClientSize つかわね?
672 :
665 :2006/12/02(土) 15:16:42
>>671 コントロールの配置はすべてデザイナ上でやっており、移動やサイズ変更は一切していません
C#で実用的なテキストエディタを作成することは可能でした。 粘着さん次はどう来る?
676 :
デフォルトの名無しさん :2006/12/03(日) 07:42:08
ソースファイルはどういう規準でわけるべきでしょうか。 JAVAはパブリッククラス単位なのでわかりやすかったのですが。 あと、名前空間の分け方は、JAVAのパッケージ同様で良いのでしょうか?
>>676 > ソースファイルはどういう規準でわけるべきでしょうか。
> JAVAはパブリッククラス単位なのでわかりやすかったのですが。
C# でも基本はクラス単位で良いんじゃない?
> あと、名前空間の分け方は、JAVAのパッケージ同様で良いのでしょうか?
パッケージと名前空間は別物だからな。パッケージにはアセンブリの方が近い。
ガイドラインによるとテクノロジ単位で分けるそうだが。
まあ .NET Framework の各名前空間見渡してみればある程度理解できる。
678 :
676 :2006/12/03(日) 14:18:25
>>677 なるほど。名前空間はパッケージとは別物なんですね。
テクノロジーですか。趣味の開発だと、フレームワークなんか特にないですから
プロジェクト名かソリューション名にすればいいのかな。
ちょっと勉強してみます。ありがとうございました。
679 :
デフォルトの名無しさん :2006/12/03(日) 14:24:44
すいません、参照渡しの理解がイマイチなので質問させてください。
ttp://www.melma.com/backnumber_120830_237606/ static void Main(){
int[] nums = new int[] {1, 2, 3, 4, 5};
IncAll(nums);
foreach (int x in nums)
Console.Write("{0} ", x);
}
static void IncAll(int[] nums){
for ( int i = 0; i < nums.Length; i++ )
nums[i] += 1;
}
結果は、2 3 4 5 6
配列は参照型?(参照渡し?)ということで何となく理解ができましたが、
string型も参照型?って聞いたので
配列の部分を string s = "12345";
IncAllメソッドで s = "abcde";
にしても変化がありませんでした。(ref を付けるとうまくいきましたが)
string型は参照型じゃないってこと???
>>679 参照型・値型と参照渡し・値渡しは別物。
参照渡しには ref または out キーワードを使う。
参照型:呼び出し先でメンバを変更したら呼び出し元でも変更される(参照しているのは同じインスタンス)
値型 :呼び出し先でメンバを変更しても呼び出し元では変更されない(呼び出し時にコピーが作られるので別インスタンス)
参照渡し:呼び出し元で new したら呼び出し元でもインスタンスが変わっている(参照しているのは同じ変数)
値渡し :呼び出し元で new しても呼び出し元でもインスタンスは変わらない(呼び出し時に変数のコピーが作られる)
で、String 型にはメンバを変更するメソッド・プロパティがない。
681 :
679 :2006/12/03(日) 15:40:03
>>680 サンクス
>参照型・値型と参照渡し・値渡しは別物。
おお、ごっちゃになってました。
>参照型:呼び出し先でメンバを変更したら
>値型 :呼び出し先でメンバを変更しても
これは「値を直か、参照するか」ってことでなんとなくわかりました。
>参照渡し:呼び出し元で new したら呼び出し元でも
>値渡し :呼び出し元で new しても呼び出し元でも
「呼び出し元で new しても」ってこれ、呼び出し「元」であってる?
イマイチ参照渡しと値渡しが理解できていない。
値渡しはコピーして渡すから呼び出し元は無関係って言うのがわかる
ttp://ufcpp.net/study/csharp/sp_ref.html#byref 参照渡しで呼び出し先で new したら何で元が変わらないんだ?
682 :
679 :2006/12/03(日) 15:41:30
static void Main(string[] args) { int[] ar = new int[] { 0, 1, 2, 3 }; Henkan(ar); foreach (int i in ar){System.Console.WriteLine(i);} } static void Henkan(int[] ar) {ar = new int[] { 5, 4, 3, 2 };} 結果 0123 これだと元が変わらないのに static void Henkan(int[] ar) {ar[0] = 5;} だとかわる。 ええええ???
ぜんぜん分かってないな。 当たり前、だろ。
配列型(参照型)の値渡し。 つまり参照先のオブジェクト自体を操作したら当然呼び出し側でも影響を受ける。 っていうか、同じもの見てんだから当たり前。 変数が参照してるオブジェクト入れ替えても、 元のオブジェクト自身は操作してないんだから変わらないのは当たり前。 ar= new ~ 変数の指してる先を入れ替えてるだけ、元のオブジェクトに対しては何も操作してない ar[0]= ~ 元のオブジェクト自体の中身を操作してるんだから変わって当たり前。
685 :
679 :2006/12/03(日) 16:27:00
>ぜんぜん分かってないな。 仰るとおり、勉強中です。 >ar= new ~ >変数の指してる先を入れ替えてるだけ、元のオブジェクトに対しては何も操作してない >ar[0]= ~ >元のオブジェクト自体の中身を操作してるんだから変わって当たり前。 あ~、分かり易い答えをありがとうございます。 (ar = アドレス参照)= new だから「参照元が変わる」と考えてました。 たしかに変数に入れ替えているだけで元にはさわってませんよね。 ar[0]= ~ これは元にさわってますよね。 ども助かりました。
686 :
デフォルトの名無しさん :2006/12/03(日) 20:12:52
C#2.0をVS2005で勉強し始めたのですが いまいち 匿名メソッド が理解出来ません。 何か良い解説サイト等をご存知の方がいましたらお願い致します。 ※VS2003にてC#はずっと使っておりましたので一通りの文法は 分かっていますが、C#2.0については Partial generics 位しか理解していません。。。
結局のところメソッド内メソッド // 変数のスコープとか色々面白い側面はあるが 取りあえず @IT の記事でも見たらどうだ
>>687 > メソッド内メソッド
メソッド内メソッドはアクセス制限のある普通のメソッド以上ではないのだから、
匿名メソッドの本質を言い表してない気がするぞ。
690 :
デフォルトの名無しさん :2006/12/03(日) 20:39:05
>>687 ,688,689
どうもありがとうございます。
早速
>>689 さんに教えて頂いたURLを見て勉強します。
※今月になってからVS2005を使い始めたのですが、現在の
プロジェクトではバリバリC#2.0のテクニックが盛り込まれておりまして
勉強せねばと必死になっています(-Д-)つ
いいなー、C#2.0 使えるプロジェクト
692 :
690 :2006/12/03(日) 23:34:34
>>691 使い始めの頃はVS03と結構使い方が変わっていたので戸惑いましたが
慣れるとやっぱり生産性がVS05の方が良いと思いました。
C#3.0配備されるとラムダ式でトリッキーなことしだすやつが会社に一人くらいは現れそう…
つか、会社で.NETアプリを使うところがあるかどうか禿げしく疑問
あるってば
C#ができずに仕事の幅を狭めるなんてもったいない。
698 :
デフォルトの名無しさん :2006/12/04(月) 01:10:56
C#マジで最高の言語だろ。 Javaデビューのオレはそう思う。 そして金輪際Javaを使う事は無いだろう。
699 :
デフォルトの名無しさん :2006/12/04(月) 01:12:09
C++で試験的にDLLを作ったんだけど、 これをC#で可視できるようにするのにはどうしたらいいんでしょうorz C#のプロジェクトの参照設定を右クリックして 参照追加>参照タブ選択>作成したDLLを選択 ってやったんですけど 「~への参照を追加できませんでした。アクセスできて、有効なアセンブリであること、またはCOMコンポーネントであることを確認してください。」 と、言われて蹴られてしまいまいた><;
COMにすればいいじゃん
>>698 自分はC#から始めて途中CやC++やって最近はJAVAもやってる。
C#は自分の中でも最高だな。
>>699 漏れの場合は、
1.COMにする。
2.System.Reflection.Emitあたりでナニする。
みたいなことをしたけど、2番目のはけっこうめんどい。
704 :
699 :2006/12/04(月) 01:21:15
>>700 ,702
了解です。
とりあえず、COMにする方法を調べてみます。
回答ありがとうございました。
>>704 あう。
>>702 のはLoadLibraryみたいにやる話で、
ダイナミックリンクしちゃうならAPI使うときと同じようにDllImportできるよ。
706 :
699 :2006/12/04(月) 01:32:13
>>705 おお。やっぱりdllimportできるんですね!
でも、dllimortしたいんですけど、なにも考えずにDllimportを記述してもきっと自分の作成したDLLを発見できないんじゃないかと思うんですよ・・・。
自分の作成したDLLって何処に置けばよいのか全然わからなくて・・・。(言っていてなんか恥ずかしい><
C++ だと単純にコンパイルしただけじゃ関数名がエラい事になるぞ。 メンバ関数は呼び出せないし。 DLL はまあ exe と同じとこにおいとけばいいけど。
708 :
699 :2006/12/04(月) 01:46:04
と、とりあえずexeと同じところに置いてチャレンジしてみます。
なんの意味があるのか?
>>708 extern "C" で __stdcall とかつけたグローバルな関数なら普通に呼べる。
dllはexeと同じ場所か%path%の通ってる場所。
エクスポートしてる、が抜けてる
んああ、そうだね。それ一番重要。
713 :
699 :2006/12/04(月) 02:14:09
動きました。 みなさまに感謝です!
714 :
デフォルトの名無しさん :2006/12/04(月) 02:37:51
こんな深夜に何をしてるんだか。 流石オタクらオタクですねw
C♯ではビスタ用アプリ作れないんですか?
ここではWindowsCEのC#について聞いてもいいんでしょうか?
>>717 .Net Compact Framework?
とりあえず聞いてみようか。
WindowsCEなんですけど 例えばTextBoxにフォーカスがある場合、あるキー入力をTextBoxコントロールに渡るのを阻止したいのですが private void textBox1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) { if(e.KeyCode == Keys.Left || e.KeyCode == Keys.Right) e.Handled = true; } とe.Handled = true; をつかっても阻止できません、なにか良い方法がないでしょうか? ちなみに、.NET Framework 1.1です
知らんけど想像で。 キーによっては IsInputKey() をオーバーライドしないとイベントが発生せずに前処理されちゃう。
KeyPressイベントでやってみれば?
あるいはWndProcオーバーライドでWM_KEYDOWNみるか
723 :
719 :2006/12/04(月) 12:57:46
御教示ありがとうございます。 レス無くてすみません、今色々と試し中です
724 :
719 :2006/12/04(月) 13:16:00
KeyPressイベントは矢印キーが入ってきません IsInputKey(Keys keyData)のオーバーライドは参照先のメソッドがないと嫌われ WndProc (ref Message m)のはオーバーライドはMessageなんて名前ないよと嫌われる WindowsCE最強・・・・_| ̄|○
725 :
デフォルトの名無しさん :2006/12/04(月) 14:46:01
>>719 WindowsCEで.NetFrameworkは動かないでしょ?
.NetCompactFrameworkじゃないの?
Microsoft .NET Framework Version 1.1 再頒布可能パッケージ
http://www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-4842-8157-034d1e7cf3a3&DisplayLang=ja サポートされているオペレーティング システム : Windows 2000; Windows 98; Windows 98 Second Edition; Windows ME;
Windows NT; Windows Server 2003 Service Pack 1 for Itanium-based Systems; Windows Server 2003 x64 editions;
Windows Vista Business; Windows Vista Enterprise; Windows Vista Home Basic; Windows Vista Home Premium;
Windows Vista Starter; Windows Vista Ultimate; Windows XP; Windows XP Professional x64 Edition
726 :
719 :2006/12/04(月) 15:15:43
Form1にツールボックスでTextBoxを貼り付けて textBox1 System.Windows.Forms.TextBox を造った場合 派生クラス public class MyTextBox : System.Windows.Forms.TextBox{ } をtextBox1に割り当てたい場合どうしたらいいでしょう?
727 :
デフォルトの名無しさん :2006/12/04(月) 15:30:13
>>719 .NetCompactFrameworkならMessage構造体は
Microsoft.WindowsCE.Forms名前空間にある。
System.Windows.Forms名前空間のは使えないよ。
>>726 一度コンパイルすると、そのMyTextBox がツールボックスに表示されるので
ぽとぺた。
一応参考に
class TextBoxEx : TextBox
{
protected override void WndProc( ref Message m )
{
if( m.Msg == 0x100 )
{
if( (Keys)m.WParam == Keys.Left )
{
m = new Message();
}
}
base.WndProc( ref m );
}
}
729 :
デフォルトの名無しさん :2006/12/04(月) 16:14:32
DllImportの引数で下記の構造体を渡さなければならないのですが、 C#ではどのように書けば良いのでしょうか? どの型を指定すればいいのか解りません。 また、long qModifyId[2]とかやってみたのですが、サイズ指定できないと怒られたのですがワケワカメです struct NDdeShareInfo_tag { LONG lRevision; LPTSTR lpszShareName; LONG lShareType; LPTSTR lpszAppTopicList; LONG fSharedFlag; LONG fService; LONG fStartAppFlag; LONG nCmdShow; LONG qModifyId[2]; LONG cNumItems; LPTSTR lpszItemList; };
やっとちょっと意味が分かってきた using Microsoft.WindowsCE.Forms; で public class myMessageWindowClass :Microsoft.WindowsCE.Forms.MessageWindow { protected override void WndProc(ref Message msg) { } } ってやればエラーにならない さてこれからどうするか・・
>>729 これでどうよ。しらんけど。
[StructLayout( LayoutKind.Sequential, CharSet = CharSet.Auto )]
struct NDDESHAREINFO
{
public int lRevision;
[MarshalAs( UnmanagedType.LPTStr )]
string lpszShareName;
public int lShareType;
[MarshalAs( UnmanagedType.LPTStr )]
string lpszAppTopicList;
public int fSharedFlag;
public int fService;
public int fStartAppFlag;
public int nCmdShow;
public int qModifyId;
public int cNumItems;
[MarshalAs( UnmanagedType.LPTStr )]
string lpszItemList;
}
あ、stringのとこpublicがぬけてもうた
735 :
デフォルトの名無しさん :2006/12/05(火) 17:35:42
予め列だけ追加しておいたDataGridView (dg)に、コードから作成したDataTable (dt)の内容を表示したいと思います。 単純に dg.DataSource = dt とすると、予め追加しておいた列の横に新たな列が追加されてしまいます。 DataTableの列と、DataGridViewの列をコードで対応付けるにはどのように書けばよいでしょうか。
736 :
デフォルトの名無しさん :2006/12/05(火) 21:19:59
初歩的過ぎてすまないけど、「ボタンを押したら画像が開く」ようにするにはどうしたらいいか 教えてください。もう2、3時間調べてるけど分かりません。。。
もう2、3年悩んどけ
>>736 「開く」ってなんだよ開くって。
意味通じないよ。フォトショップで開くのか?
ピクチャボックスが全体にFillされたフォームのインスタンを new して Show するとか、
ちゃんと仕様を自分で決めろよ。質問するときはその脳内の仕様をちゃんと提示しろよ。
そんな姿勢でプログラムが書けるわけないだろ。
開くといえばファイルハンドルをオープンすることだと相場が決まっておる
>737-738 まあ落ち着け もう持ってるのかも知れんが何か適当な入門書を買ったほうがいいと思うぞ。 ホントに入門のやつ。
private void button1_Click( object sender, EventArgs e ) { Process.Start( @"C:\hoge\bar.jpg" ); }
初心者です。お手柔らかにお願いします。 やりたいことは、 MessageBoxを、他のアプリ含めたすべてのウィンドウの最上位に表示したい、です。 親となれるFormがあれば、それをTopMost=Trueにすればよいことは判りました。 実はMessageBoxを表示したいときにFormは存在しないのですが、 今は空のFormを作ってTompMostだけ設定して、それを親にするという 頭の悪いやり方でしのいでいます。 あと、Win APIを使えば何とかなる、ということも判りました。 お聞きしたいのは、Win APIを使わずにもっとスマートなやり方はないものでしょうか、 ということです。 何卒、よろしくお願いします。
反則かもしれんが MessageBox.Show("Hoge", "Hoge", MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, (MessageBoxOptions)0x40000);
746 :
743 :2006/12/06(水) 01:14:57
>>744 Win APIという表現が間違ってたかもしれませんが
ご紹介いただいた方法が、まさに私のいう第二のやり方です。
やはりこれが一番ですか。
>>745 すみません、試してみましたが、私が意図している動作とは違いました。
参考までに第六引数の意図を教えていただけないでしょうか。
>>746 >>744 と
>>745 は結局同じわけだが
MessageBox.Show()が内部で
>>744 を呼んでて
MB_TOPMOST(0x40000)を裏技的に設定してる。
DllImportしないで済むぶんだけ楽っちゃ楽
だが将来どうなるか分からない。
なんでMSがMB_TOPMOSTをMessageBoxOptionsに入れなかったのか
わからない。
途中で送信してしまったが
あなたが意図している動作とは何?
>>745 でMessageBox.Showでできることはすべてできるし
しかもTopMostにもなるはずだが
>735 > DataTableの列と、DataGridViewの列をコードで対応付けるにはどのように書けばよいでしょうか。 dg.DataSource = dtより前に、dg.Columns[n].DataPropertyNameへDBの列名をセットしておく。
750 :
名無し :2006/12/06(水) 12:28:33
初めまして、すごく切羽詰まってしまったのでこちらに書き込ませ頂きます 現在課題でプログラムを作成しているのですが仕様書がこちらになります。 閉じるボタンを押下すると「閉じてもよろしいですか?」というメッセージ ボックス「はい」「いいえ」 を表示する。「はい」が押下された場合画面を閉じる 「いいえ」が押下された場合は画面を閉じない。というプログラムを 作っていますがうまくできません、どなたかご教授願えないでしょうか・・・
23行目の最後にセミコロンが必要。
>>750 Form.Closingイベントがきたらダイアログ開いて、その結果によって、
イベントのCancelプロパティをtrue/falseにするとかそのあたり?
753 :
名無し :2006/12/06(水) 13:09:33
>752 VBなんですがFormClosingからではないと閉じることは不可能なので しょうか?私がやろうとしているのはButtonで閉じるボタンを作り そのボタンを押すと閉じる有無を聞かれ、はいを押せば閉じいいえを 押せば閉じないというプログラムをやっているのですが、まったくでき ませんでした。現在のプログラムはこのようになっております。 private void button3_Click(object sender, EventArgs e) { DialogResult myResult; myResult = MessageBox.Show("閉じてもよろしいですか?", "終了確認", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (myResult == DialogResult.Cancel) という状態です。
OKならClose()
OKじゃなくてYes
うん。いろんな意味で。
質問させてください。 100*100のBitmapを作成してそこに直接FillRectAngleで50*50の四角を描画したとき、 四角以外のところは何もかかれていない透明の状態になっているようですが、 ここにはデータが入っていないんでしょうか?それとも透明色が描かれているんでしょうか?
なんでGetPixelとかで調べてみないの?
ComboBoxをプログラムからドロップダウンリストを開きたいのですが やり方教えてください
DroppedDown
C#でSNMPマネージャ(GETのみ)もどきをつくりたいんですが、ググってみてもC#のサンプルがみつかりません。 VCとかならわりと簡単にできるみたいなんですけど、C#でないですかね。 外人さんの作ったsnmp.dllとかあるのは見たんですけど、できればソースの形で簡潔に書かれているものが知りたいです。
GetPixelを知りませんでした。今から調べます。 ありがとうございました。
なんでVC#2005でイベントハンドラとかのスタブを自動的に生成させると throw new NotImplementedException();じゃなくて throw new Exception("The method or operation is not implemented.");が追加されるの?
中の人が手抜きだから
こんばんは、質問があります。 ADO .NETでテーブル内にデータを追加しようとするとき、 もしテーブルに存在しなかったらデータをinsertし 存在していたらupdateするといった処理はどのようにやればいいのでしょうか したのソースだと次回主キーが存在しているものを指定したらキー制約にひっかかりますよね… // 接続用オブジェクトの作成 SqlConnection conn = new SqlConnection(); conn.ConnectionString = connStr.ToString(); // select用コマンド・オブジェクトの作成 SqlCommand selectCmd = new SqlCommand(); selectCmd.Connection = conn; selectCmd.CommandText = selectStr; // データアダプタの作成 SqlDataAdapter da = new SqlDataAdapter(); da.SelectCommand = selectCmd; // データセットへの読み込み DataSet ds = new DataSet(); da.Fill(ds, "table1"); DataTable dt = ds.Tables["table1"]; // 行の追加 DataRow newRow = dt.NewRow(); newRow["a"] = 1; newRow["b"] = "い"; dt.Rows.Add(newRow); // コマンド自動作成 SqlCommandBuilder cb = new SqlCommandBuilder(da); // データベースの更新 int j = da.Update(ds, "table1");
中の人に聞け MSDN フォーラムの VS フィードバックあたりに と MSDN forum 漁ったら MSFT の人のこんな発言があった > I believe that the change was made from throwing > an NotImplementedException to an Exception as the former > is not included in the Compact Framework, > therefore generating code that wouldn't actually compile. > However, in saying that I do wish this was better.
770 :
768 :2006/12/06(水) 21:48:26
>>768 のケース、
プログラム詳しい人にとっては簡単なことなんでしょうが、
どうか解決法をよろしくお願いいたします。
>>764 さん
ありがとうございます。Google Code Searchなるものができてるなんて知りませんでした。
目的のものはみつかりませんでしたが、これは使えそうです。
本当にありがとうございます。
772 :
766 :2006/12/06(水) 22:20:39
773 :
743 :2006/12/06(水) 22:54:26
>>747 ,748
MessageBoxOptions列挙体の説明を読んで、仰っていることが理解できました。
昨日試したときはなぜかTOPMOSTにならなかったのですが、
もう一度試したらちゃんとTOPMOSTになりました。
昨日は簡単に試したくて、コンソールアプリテンプレートを使ったのがいけなかったのでしょうか。。
ちなみにMessageBoxOptions.DefaultDesktopOnlyを使ってもTOPMOSTになるようです。
MessageBoxはWindows2000以前風でしょぼいですが。
774 :
743 :2006/12/06(水) 22:57:20
>>747 ,748
すみません、お詫びと御礼を忘れました。
充分検証せずに746のようなレスしていまい、申し訳ありませんでした。
また、ありがとうございました。勉強になりました。
>>774 こっちも十分に検証してないから
気にすんな
DataTableについての質問です。 テーブルに複数のキーが設定されている場合のSelect方法が分からずに困っています。 たとえば、Column1がstring、Column2がint16の場合、下記のような感じかと思ってチャレンジしたのですが あっさり失敗しました。 table.Select("Column1 = 'test1', Column2 = 123", "Column1 DESC"); どなたかご教授お願いしますorz
>>776 試してないが
Column1 = 'test1' AND Column2 = 123
じゃねーの?
779 :
766 :2006/12/07(木) 02:01:59
.NET frameworkでSMTPは提供されているのに、なぜPOPはないんでしょうか?
SMTPの方が需要が多いんじゃね?
そういうことはMSの中に人に訊けよ。
SMTPのが実装が簡単だからじゃなかろうか。
SMTPはログを管理者にメールで送りつけるとか、Webアプリのご意見フォームみたいのとか、 いろいろと用途が広いけど、POPは用途限られてるしね。
DataGridViewコンポーネントについての質問です。 DataGridViewのDataSourceに指定したデータテーブルの中にintのカラムがあるとします。 通常何も手を加えなければDataGridViewには数字が表示されますが、 数字に対応した文字列を表示する方法はないのでしょうか? (1なら”処理中”と表示。2なら"処理終了"と表示。みたいなイメージです。)
DataSourceの元が外部DBからSQLでとってくるものなら、SQLで置き換えるのが 一番簡単。Oracleならdecodeかますとか。 表示だけいじるのなら、DataGridViewのCellFormattingイベントで置き換えるとか、 いろいろ。
787 :
785 :2006/12/07(木) 15:54:18
>>786 返答ありがとうございます。
CellFormattingで試してみまっす。
質問です。 Bitmap中の同一の色を全てまとめて変更することは出来ないでしょうか? やっぱりforで地道にブン回すしかないですかね?
他にどんな方法があるんだよ
インデックスカラーにしてパレットをいじれば一発w
TextBoxの値をnullにしたいのですが、string.Emptyにしかなりません・・・ 空文字禁止のデーターベースに更新を掛けるとエラーが出てしまいます データーベースを空文字許可にする以外に方法はありますか?
Control.Textはnullにはならん。 データベースに渡す前に""ならnullに変えればいいんじゃないの
TextBoxの派生クラスを作ってTextプロパティをオーバーライドすれば?
ばかなことすんじゃねーよ
796 :
788 :2006/12/07(木) 21:03:15
>>791 うまくいきました。ありがとうございました。
>>793 ありがとうございます
nullに出来ないのですね・・・
>>747 アプリケーションでシステムモーダル(Win95以降はただの常に手前)は
使うなというガイドラインを守ったのだと思われ。
自前のアプリケーションからWEB上のhttpsサイトにログインしようとしているのですが、 上手く認証されずに「もう一度入力してください」の旨を示すhtmlが返却されてきてしまいます。 プログラムが悪いのか、パラメータ不足なのかを切り分けたいのですが 下記のコードに何か根本的な間違いはありますでしょうか? Hashtable ht = new Hashtable(); ht["username"] = textBox_LoginName.Text; ht["password"] = textBox_LoginPassword.Text; string param = ""; foreach (string k in ht.Keys) { param += String.Format("{0}={1}&", k, ht[k]); } byte[] postDataBytes = Encoding.ASCII.GetBytes(param); string url = textBox_LoginUrl.Text; System.Net.WebRequest req = System.Net.WebRequest.Create(url); req.Method = "POST"; req.ContentType = "text/html; charset=shift_jis"; req.ContentLength = postDataBytes.Length; System.IO.Stream reqStream = req.GetRequestStream(); reqStream.Write(postDataBytes, 0, postDataBytes.Length); reqStream.Close(); System.Net.WebResponse res = req.GetResponse(); System.IO.Stream resStream = res.GetResponseStream(); Encoding enc = Encoding.GetEncoding("shift_jis"); System.IO.StreamReader sr = new System.IO.StreamReader(resStream, enc); Console.WriteLine(sr.ReadToEnd()); sr.Close();
↓こういうモノのをポストするの? Content-Type: text/html; charset=shift_jis Content-Length: nnn username=xxx&password=yyy
801 :
799 :2006/12/08(金) 18:18:21
>>800 イメージ的にはそうです。
ただし、そのイメージがあってるかどうか自分でも自信がもてません。
> username=xxx&password=yyy
この部分は間違いない気がしますが、
Content-Typeについては、ログイン画面のHTMLに書いてあったものをそのまま使用すればよいのかと思い
> Content-Type: text/html; charset=shift_jis
と、しています。
また、Content-LengthについてはC#でのHTTP通信関連の情報をWEBで漁り、
パラメータ部の長さを入れているつもりです。
鯖はイメージ的には処理してくれないと思うが・・・ multipart/form-data で送るんじゃないの??
=と&で連結したクエリ文字列ならMIMEタイプはapplication/x-www-form-urlencodedだよ。 ASCIIに変換してるのに、charset=shift_jisと送ちゃってるのも間違い。 URIエンコードの処理が入ってないのも気になるが、その辺は簡略化したせいだろうか。
804 :
799 :2006/12/08(金) 18:42:47
やっぱり、色々間違ってるんですね・・・^^; ご指摘色々ありがとうございます。 まずは、Content-Typeとエンコード部分について見直してみます。
805 :
799 :2006/12/08(金) 20:07:19
無事ログインできました。 MIMEタイプがいけなかったっぽいです。 (実は一個程必須パラメータが抜けてたりしましたが・・・w)
漏れは@ITの記事で使えるようになった・・・
808 :
806 :2006/12/09(土) 11:12:49
>>807 確かにtipsは充実してますね、僕も今見ながら勉強してます。
でも何か物足りないような気がしたもので…
810 :
807 :2006/12/09(土) 11:17:55
文法や言語仕様を一通り理解したら、 GUIまわりはいろんなコントロールを使ったり作ったりして 覚えた方がはやいよね
本は何冊も買ったほうがいよ。 このスレで出てくる質問も載ってる本があるし。
英語版だといい本あるんだけどね。 日本語版は初心者用ばっか。
初心者スレだからそれでも良さそうだけどな。
815 :
806 :2006/12/09(土) 11:57:09
>>807 どうやら単に僕がperl出身(トリッキーなスクリプター)なので変なこと求め過ぎただけみたい…
匿名メソッドやC#3.0のvarに親近感がわきますねw
とりあえず@ITだけでOKみたいなのでしっかり制覇して、
なれたころに洋書でも読もうと思います。
みなさんありがとうございました!
洋書は理論や設計系の本のことじゃないかな 普通の初心者のようにコントロールの使い方だけでも 勉強したほうがいいんじゃないのかな
varは動的型付けってわけじゃなくて、 型が明らかなときにいちいち型名を書かなくてもいいようにするだけじゃなかった?
818 :
799 :2006/12/09(土) 15:31:01
799です。 SSLログインは上手く行き、ログイン後のHTMLを取得することが出来たのですが 次のページを表示させるべく改めてGET又はPOSTを行うと、「セッションが無効」の旨のページに飛んでしまいます。 セッションを維持すれば良いと思うのですが、セッションを継続しつつアクセスできる手段が探し当てられません。 (本物のブラウザーではクッキーを切っても動くのでクッキー関連ではないと思っています。) クラス名等、ヒント程度でもよいので宜しくお願いします。
そのサイトの仕組みも分からんのに分かるわけがなかろう。 だいたいSSLログインてなんだ? 改めてGET又はPOSTって具体的にどう改めてなの?
>>818 そこは鯖側アプリケーションの実装次第だからなんとも言えん。
セッションの保持にクッキーを使ってなければ、次に考えられるのはURIにセッションIDを付けて回るタイプ
>>819 SSLログインも知らんやつはもうおわっとる
SSLつかってるログインページでログインすることを SSLログインとでも言ってるのかな?
>>816 コントロールの使い方なんて覚えても何の意味も無い
人様に見せることが出来るアプリケーションを書こうとすると
ほとんどのコントロールは自前で用意することになるんだから
そんなレベルの話してねーだろ。 少しは空気読め&人の話を聞け
>>824 百歩譲ってそうだとしても,気違いじみた俺様設計コントロールにならないように
標準のコントロールの使い方ぐらい知っておくべきだろ
つかったことしかないのか・・・
そもそも自前で作れたらここ卒業だろ…
継承を覚えたての猿みたいに糞コントロール量産してる人がいるのはこのスレですか?
凄く初心者っぽい質問なんですけど ------------------------ Aクラス 普通のクラス Bクラス 普通のクラス Cメソッド Bクラス内で呼ばれるスレッドプールメソッド ------------------------ この条件で、AでB内部に定義されている構造体をnewしてBクラスのメソッドへ引数で渡し、 その渡されたメソッド内でスレッドプールCにその構造体を渡した場合、構造体の内部データは保障されるのでしょうか? 【イメージ図】 1. Aクラスにて構造体をnew ↓ 2. newした構造体をBクラス内のメソッドへ引数で渡す ↓ 3. 呼ばれたBクラスのメソッドは引数で受け取った構造体をスレッドプールメソッドCへ引数として渡し実行。
構造体の内部データってのがなんなのか分からん どの観点から見てのどういう保証なのかも分からん
832 :
830 :2006/12/10(日) 04:51:32
構造体の中身はintやstring等のデータです。 保障というのは、最終的にCクラス内でスレッドプールが実行されますが、 このスレッドプール処理が終了する前に構造体をnewしたAクラスのメソッドの処理が終わってしまう可能性があります。 その場合、Aクラスのメソッドが終了した時点で構造体内部のデータはガベージコレクションの対象になってしまうのでしょうか? それとも、スレッドプール処理が終了するまでガベージコレクションの対象にはならないのでしょうか?
>>830 構造体は値渡しだから、Bクラスに渡した時点とCメソッドに渡した時点で
それぞれコピーされるよ。
従ってもとの構造体は消えてなくなるかもしれないが渡した構造体は存続する。
構造体でなかった場合もGC対象になるのはすべての参照が断たれたオブジェクトだから
そのオブジェクトにアクセスする手段がある限りGCされることはない。
834 :
830 :2006/12/10(日) 05:09:10
>>833 なるほど。分かりやすい説明ありがとうございます。
つか、そこほんとに構造体でいいのかね?
>>833 > 構造体は値渡しだから、
初心者スレなんだしそこはきっちり用語を使い分けようぜ。
値型、な。
なにを構造体(値型)にするべきか、については MSDN のガイドラインで触れられてるから
一度目を通した方が良い。
C と同じ感覚で使うのはあんまり良くない。
>>836 いや間違ってないでしょ。構造体は値型、だから引数にすると値渡しになる。ってこと。
スレッドにrefやoutで渡せないんだからそれは
>>830 の話題と関係ないっしょ。
参照型を引数にすると参照渡しになるってか? 参照型/値型と参照渡し/値渡しはまるっきり別物だっつの。
つっこむやつは偉そうにつっこむだけじゃなくて、ちゃんと説明してくれ。 初心者用スレなんだから。
DataGridViewコントロールとDataGridコントロールって 何が違うのかよくわからない。もしかして処理速度とかですか?
>>843 うわー難しいこといっぱい書いてある。
高機能になったんだから何も考えずにDataGridView使っとけってことですね?
ありがとん
Form1の外にも移動できるツールボックスを作りたいんですが これはForm2をつくってやらないといけないんでしょうか? 良いやり方教えてください。 あとForm1とForm2を作った時にタイトルバーの状態を同じにする事は出来ますか? 例えばForm1がアクティブになった時、Form2のタイトルバーの色は薄くなってしまいますが Form1と同じように濃くしたいんです。
・そうですね。 ・良いやり方もなにも。 ・タイトルバー消して自前で描画。 ・普通はそんなこと考えませんが。
ボーダーをToolWindowだったかにしてオーナーセットしてShow
848 :
デフォルトの名無しさん :2006/12/11(月) 00:34:24
ちょっと間抜けな質問かもしれないんですが、 string st = textBox1.Text; で変数に複数行あるテキストデータを入れたのはいいのですが、 この中身を一行ずつ処理するにはどうするんだろ? テキストファイルならReadLineメソッドで一行ずつ処理できますけど、 改行コード¥r¥nで区切って?? あれれ?でもどうやって繰り返して変数の最後まで判断するんだ?
TextBox なら Lines プロパティ StringReader 使う手もある
850 :
848 :2006/12/11(月) 01:05:47
即レスサンクス。 StringReaderのほうはテキストファイルの読込と似た感じになるのかな、ちょっとわからん。 Lines プロパティなんてものがあったのね。 参考になりました。
851 :
845 :2006/12/11(月) 09:45:13
ボタンの縦幅をデフォルトよりも小さくしているんですが、キャプション文字の下側が上下に余裕があるにもかかわらず切れて表示されません。 ボタンの縦幅一杯まで文字を表示する方法はありますか?
Padding?
854 :
852 :2006/12/11(月) 11:27:34
PaddingはALL0にしてるんですが、それでもやぱり切れてしまいます。
自前で描画汁
856 :
852 :2006/12/11(月) 12:25:44
('A`)
>>852 >キャプション文字の下側が上下に余裕がある
とあるが良く見てみると無いと思う。
多分、余裕があると思ってる部分はボタンの斜面だよ。
どうしてもあわせたいならfontを微妙に(.5ポイントほど)小さくしてみたら?
858 :
:2006/12/11(月) 23:53:47
C#2.0でマスターすべきポイントの見出しを教えて下さい。 勉強します。
859 :
デフォルトの名無しさん :2006/12/11(月) 23:59:16
Windowsのエクスプローラ上でファイルを右クリックすると ポップアップメニューが出ますよね? それに項目を加えたいんですけどやり方がのってるサイトとかありませんか? あと、ブラウザにツールバー(Yahoo!ツールバーのようなもの)などを登録する やり方も教えてください。
>>858 C#2.0の新機能という意味ならジェネリック
その他は大体糖衣構文だからあんまり大事じゃない
861 :
:2006/12/12(火) 00:10:16
>>860 ありがとうございます。
勉強します。
※業務中にですがw
>>860 匿名メソッドを糖衣構文で済ますつもりか。
// いやまあ確かに使わずともほぼ等価のコードは書けるけどさ。
864 :
859 :2006/12/12(火) 01:28:44
>>863 ありがとう。むずかしそうwwwwwww
System.Console.Write("{0, -10}", str)な感じで均等に幅を確保したいんですが strに半角と全角がまざるとどうしてもずれてしまいます なんとかぴったり合わせる方法ありませんか?
自分で計算すれ
ExcelからDataGridViewに対してコピー&ペーストする処理は 自分で書くものなんでしょうか? どこかで設定すれば可能になったりしませんか?
自分で書きます。
869 :
867 :2006/12/12(火) 15:38:16
配列の宣言についての質問ですが int[] dat; でとしておいて ある関数で dat = new int[5]; とします。 別の関数で dat = new int[3]; とか配列を再割り当てしたい場合、dat = new int[3];の前にメモリーの解放関数or宣言みたいなものを呼ばなくても大丈夫でしょうか? もし必要があるならば、その関数or宣言も教えてください
ふよう それがりてん
クラスオブジェクトの配列の扱いがいまいちぴんとこないのですが class Arrからa個のオブジェクト配列がほしいとき Arr[] arr = new Arr[a]; arr[n] = new Arr(); //n = 0 ~ arr.Length というように必要な要素ごとにインスタンスを作るという感覚でいいのでしょうか
そう。 ただし n の最大値は arr.Length - 1 な。
VisualC#2005で カスタムコントロールの作り方がわからないので教えてください。 コントロールを継承して描画などは独自でやりたいんですが Windowsコントロールライブラリを作成した後 public partial class UserControl1 : System.Windows.Forms.Control でコントロールを継承させた後に何をすればいいのでしょうか とりあえず下準備?をしたいのですが この段階ではUserControl1' に 'AutoScaleMode' の定義がありません。というエラーが出ます。
userControlじゃないよ MSDNじっくり見てみな。
まずそのUserControl1を削除しろ それからプロジェクトにカスタムコントロールを追加する あとは↑を参照しながらOnPaintをオーバーライドするなりお好きにどうぞ
新しい項目のお追加にカスタムコントロールはありました。 カスタムコントロールって新規作成→プロジェクトからは作れないんですか?
Windowsコントロールライブラリでいけるでしょ
×public partial class UserControl1 : System.Windows.Forms.Control ○public partial class UserControl1 : System.Windows.Forms.UserControl 'AutoScaleModeプロパティ' はContainerControlクラスにしかない。 UserControlクラスはContainerControl を継承してる。 ContainerControl は ScrollableControl その他を継承してて、 ScrollableControl が Controlその他を継承してる。
Controlからの継承は初心者には難易度が高いから UserControlから始めたほうがいいよ
レスどうもありがとうございました。 継承の事も含め勉強不足のようなのでまず上のサイトを調べてきます。
884 :
デフォルトの名無しさん :2006/12/13(水) 00:02:06
「Visual C#2005 逆引き大全500の極意」って本の267ページに「ファイル名をすべて所得する」 ってのがあるんだけど、 System.IO.Directory.GetFiles()の説明で 3番目の引数にtrueかfalseでサブフォルダも検索するかを 指定するって書いてあるんだけど、これって「SearchOption.AllDirectories」または 「SearchOption.TopDirectoryOnly」で指定しないと駄目なんだよね? 本に書いてあるように、trueまたはfalse入れてもエラーになるんですけど?
885 :
デフォルトの名無しさん :2006/12/13(水) 00:11:46
>「SearchOption.AllDirectories」または >「SearchOption.TopDirectoryOnly」で指定しないと駄目なんだよね? うん。MSDNにはそう書いてる。 boolも取るGetFilesメソッドのオーバーロードは無いね。
たぶんベータの頃のが混じったんだろう 結構ベータからでも変わったところがあるからな
887 :
884 :2006/12/13(水) 00:27:47
やっぱり間違いか。出版社にメール送っておいた。
プロパティから配列にアクセスしたいのですが引数(要素?)を送ることってできないのでしょうか インデクサからアクセスすることで応急処置したんですが・・・
引数付きプロパティをやりたいのかと思ったが違うようだ こんなのやりたいという擬似コードだけでも書けんか
890 :
888 :2006/12/13(水) 07:23:28
>>889 仰るとおりのことだと思います
フィールドに2つ以上の1次配列メンバがあって個別にアクセスできるプロパティがほしいと思ったんです
しかしそれのために引数が2個以上のインデクサを作るのは忍びないと感じつつ
その変数ごとにインデクサからアクセスできるクラスを作ってしまった。といった感じです
>>890 C# 的にはそれで正解。
.NET のクラスライブラリも C# にあわせてそう言う構造になってるしな。
まったく意味わかんね
893 :
888 :2006/12/13(水) 07:43:40
>>891 そうなのですか。。
何とか割り切って有効利用できるようがんばります
>>892 言葉足らずですまんかった
> フィールドに2つ以上の1次配列メンバ の意味から分からない俺は頭悪いのか?
よくわかんねけど public int this[int index, int index2] { get { if( index == 0 ) return arr1[index2]; else if( index == 1 ) return arr2[index2]; else return -1; } } こんなかんじ? インデクサに複数の引数いけるって知らんかった
配列のインデックサつかうんじゃだめなんか?
>>893 配列なら普通にプロパティとして公開すればインデクサで要素にアクセスできるが、それじゃ不満なんだろうか
public int[] Arr1{ get{ return arr1; } } //とか。
VC#2005で 文字列をクリップボード経由で エクセル2003のワークシート に貼り付けたいのですが エラーが発生してしまいます Clipboard.Clear(); Clipboard.SetText("貼り付ける文字列"); Excel.Application exl = new Excel.Application(); exl.Visible=true; exl.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); exl.ActiveCell.PasteSpecial(Excel.XlPasteType.xlPasteValues, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false); ↑ここで 「Range クラスの _PasteSpecial メソッドが失敗しました。」 とエラーが出ます エラーの原因がわかりません・・・ どうやれば貼り付けできるのでしょうか?
>>898 リードオンリーにできないとか値チェックができないとか
インデクサの代用にはならなそう
>>900 複雑なことをやろうとすると、やはりラッパクラスを作るしかないわな
リードオンリーだけならReadonlyCollection<>が使えそう
デリゲート駆使してみるとか 引数つきプロパティぽくコーディングできるかも public class CallbackIndexer<TIndex, TValue> { private GetCallback getter; private SetCallback setter; public CallbackIndexer(GetCallback getter, SetCallback setter) { this.getter = getter; this.setter = setter; } public TValue this[TIndex index] { get { return this.getter != null ? this.getter(index) : default(TValue); } set { if (this.setter != null) this.setter(index, value); } } public delegate TValue GetCallback(TIndex key); public delegate void SetCallback(TIndex key, TValue value); }
>>902 いいかもね。
ただ個人的にはデリゲートがnullならゲッタでもセッタでも例外を投げてほしい
ゲッタがnullは例外を投げるべきだけど,セッタは別にnullでもいいんじゃないの
>>904 set や get が無いのはそれぞれ ReadOnlyCallbackIndexer とか別の実装にするべきだと思う。
コンパイル時にチェックしてもらえるから。
ところで、匿名メソッドの戻り値の型ってコンパイラが決めてくれるんだっけ?
>>905 そこまでするならインターフェースに分けて,
public interface IGetIndexer<TIndex, TValue>{TValue this[TIndex index]{get;}}
public interface ISetIndexer<TIndex, TValue>{TValue this[TIndex index]{set;}}
public interface IGetAndSetIndexer<TIndex, TValue> :
IGetIndexer<int, string>, ISetIndexer<int, string>{}
public class Sample{
public IGetAndSetIndexer Item{get{return new CallbackIndexer...}}
private class CallbackIndexer<TIndex, TValue> : IGetAndSetIndexer<TIndex, TValue>{
public TValue this[TIndex index]{get{...}set{...}}
}
}
なんか初心者スレなのに凄い事聞く人多いな クラスオブジェクトを配列に入れて、どんな目的で使うのか分からない Cで言う関数配列なら分かるんだけど、同じもんの配列でしょ・・・・
と書きながら、TextBoxとかのクラスを配列化すりゃ便利かと思い立った
VB互換ライブラリにTextBoxArrayとかあるじゃん
>>907 セッタとゲッタを別々にインターフェイスにできるんだな。ちょっと感動した。
しかしそれだと読み取り専用にしてもコンストラクタでsetterを要求されるのが美しくない。
>>908 Stringもクラスだが?
Cの関数配列ってのはC#でいうとデリゲート配列みたいなものか。
マルチキャストできるから配列にする意味はなさそうだけど
多分クラスとオブジェクトの違いが理解できてないんだよ
クラスオブジェクトを別の意味でとってるんじゃないか? フィールドも死語?
フィールドはMSDNでも使ってるでしょ。 クラスオブジェクトってのはTypeクラスのインスタンスオブジェクトのことなのか?
JAVAのClassオブジェクト… staticでも渡されるオブジェクト
クラスオブジェクトって言葉C#にあるの? フィールドはある msdnより >このトピックでは、フィールドについて説明します。 >フィールドとは、クラスまたは構造体に含まれるオブジェクトや値のことです。 >フィールドを使用すると、クラスおよび構造体でデータをカプセル化できます。
>>917 C#ではクラスオブジェクトという呼び方はしないな
他の型宣言をあらわすのも同じTypeだから、Typeオブジェクトとか言う
クラスオブジェクトって,クラス自体もオブジェクトとして扱われる言語で使われる用語だろ
クラスっていうクラスのインスタンス
いまだに
>>888 の言ってることがわかんにゃー
メソッドじゃダメなの?
>>921 foo.Bar[baz] += qux;
foo.set_Bar(baz, foo.get_Bar(baz) + qux);
object aaa = new object(); aaa = yyy.getxxx(); getxxx()はobjectの配列を返すのですが、 この場合、aaa[0]というような参照ができません。 ・・というかコンパイルで怒られます。 aaaを配列にするとaaa[0]に配列が代入されます。 配列の要素を参照するにはいかがいたしましょう。?
キャスト
>>922 そんだけの略記のために複雑な仕掛けをあれこれ考えるなら、
単に
foo.set_Bar(baz, foo.get_Bar(baz) + qux);
を一発で実行するメソッドを容易すりゃいいと思うけど。
だから初心者スレなんだなあ
>>925 プロパティはBarのほかにも何個もあるわけだし、
加減だけでなく、乗除やビット演算をしたくなるかもしれない
複雑な仕掛けを使わないで一発で実行できるメソッドを考えてみれ。
>>923 つか何でobject型で受けるの?
object[] bbb = yyy.getxxx();でいいのに
使いまわしはややこしくなるだけだよ
>>923 object[] aaa;
aaa = yyy.getxxx();
>>927 いやだから、そういうそのクラスにとって必要な演算子を直接実装すればいいんじゃないの?
将来必要かもしれないっていう理由であれこれ作りこむのは無駄に太ってく原因だよ。
>>930 もう俺にはお手上げだ。
foo.Bar[baz] += qux;
と同等の機能をメソッドと演算子で具体的にどう実装するのか教えてくれ。
.netフレームワークだったら、その単位ごとに新しくクラス作ってると思うが?
>>931 クラスに実際に必要なのは foo.Bar[baz] += qux; そのものじゃなくて、
それを使って表現するなんかしらの機能なんでしょ?
>>932 それは結局、上で論じてきたことと一緒でしょうが
結局インデクサかSetItem(int index, object value)だろ もういいよ
>>899 分からんけど
ActiveCell指定してないとかそのあたりじゃないのか?
>>933 俺らが貰ったのは引数付きプロパティで配列にアクセスするって言うお題だったわけよ
それ以上つっこまれても困る
すまんかった。 なんか水を差しちゃったみたいだ。
まあいいじゃないか。 少ない仲間同士仲良くしようw
MailMessage message = new MailMessage(); //メールの設定 message.To = "hoge@hoge.hoge"; message.From = "hoge@hoge.hoge"; message.Subject = "ほげほげ"; message.BodyEncoding = System.Text.Encoding.GetEncoding("iso-2022-jp"); message.BodyFormat = System.Web.Mail.MailFormat.Text; message.Priority = MailPriority.Normal; message.Body = "ほげほげほげほげ"; //添付ファイル MailAttachment attach1 = new MailAttachment(imagefileName, MailEncoding.Base64); message.Attachments.Add(attach1); ←←←←←←←←←←この一行 //SMTPサーバ System.Web.Mail.SmtpMail.SmtpServer = "mail.hogehoge.jp"; //送る System.Web.Mail.SmtpMail.Send(message); メールを送信する処理があるので、上記の様なコードを書いているのですが 「'CDO.Message' オブジェクトにアクセスできませんでした。」 と言うエラーが出てメールが送れてません。 どうも添付ファイルに問題があるらしく、「この一行」の部分をコメントアウトすると 問題なく送信されてます。 対象のサーバがsmtpの前にpop3ですの。事前にpop3認証はしてあります。 よろしくお願いします。
>>940 OSは?
System.Web.Mailは環境依存のCOMのラッパだから使わんほうが身のため。
System.Net.Mailを代わりに
>>940 MSDNに非推奨って書いてあるものをどうして使うかな。
些細な疑問なんだけど bool型ってtrueじゃなくていい場合でも初期化したほうがいい?
初期化しなかったら false だよ
>>943 default(Boolean)==falseだが、気になるなら初期化しとけ。
何に初期化されるかは言語仕様で決められてるので不要っちゃ不要
948 :
899 :2006/12/14(木) 08:01:04
>>936 Activecellの指定はちゃんと出来てると思う
PasteSpecialの部分を
Value="ああああ"とかに置き換えると、
エラーにならずちゃんと動くんです
もうだめぽ・・・
>>948 (exl.ActiveSheet as _Worksheet).Paste(Type.Missing, Type.Missing);
PasteSpecialはExcelでCopyした後でしか使えないと思う。
950 :
899 :2006/12/14(木) 09:26:04
>>949 おぉおおおおお、出来ましたぁああああああ
ありがとうございます!!!!
>>908 を書いた者だけど、色んな角度からレスしてくれて凄く勉強になる
この初心者スレ良いよ
>>941 わかりました。変えてみます。OSはWinXPHomeでした。
>>942 すいません。まだ初めてから三日目でしたのでそう言うところまでは
調べてませんでした。
なにがトリガーとなったか分かりませんが、 VC# Express 上から自作したプログラムを起動すると 「ファイル 'Microsoft.Windows.CommonLanguageRuntime, Version=2.0.50727.0' が見つかりませんでした。」 と、エラーがでるようになってしまいました。 対処方法がまったく分からない状況です。どなたか解決方法しらないでしょうか;
954 :
953 :2006/12/15(金) 01:59:21
955 :
953 :2006/12/15(金) 02:09:41
解決しました。 プロジェクト参照をやめてファイル参照にしたら無事復旧しました。 手塩に掛けたプログラムだったので取り乱してしまい申し訳ない。
最近始めてから3日とか言うやつ増えたな。 なんでだろ?
本当のこと書くと「○ヶ月やってその程度かよ」とか言われると思ったからかも。
プログラム初めて22年です… c#は3年くらい触ってます。
C#の場合は,使って覚えるよりも,先に徹底的に文法をマスターした方が早い気がする
色んな言語知ってる人なら半日くらい概要を調べたら、あとは使いながらの方がはやいよ。
そうだろうね。 C#からスタートって人は少ないだろうね。 俺はBASIC→アセンブラ→C→C++→JAVAだったから違和感なかった。 FORTRANやPASCALも学校で習ったがまったく覚えていない。
自分の場合はC#から始めたんだけど(6年程前) 当時は流行らずに消える言語だろうとか言われてて 選択を誤ったかと心配してた。 最近は結構流行ってきてるからうれしい。 C# -> C -> C++ -> JAVA
>>961 おれ自身は C とアセンブラがほぼ同時で最初で、その後、C++ → C#。
でも、今からプログラミング始めるなら C# ではじめるのが最良だと思ってる。
プログラムやるなら アセンブラ→C→C++→C#だろ C#から始めたらVBプログラマーみたいに狭い中でしか使えない奴になる
漏れは年寄りなので、 BASIC -> アセンブラ -> Lisp -> C -> C++ -> C# だったな。 アセンブラから始めたら、「自分が考えた通りに動くものを作れる」っていう プログラミングの魅力に触れる前に嫌になると思う。
Z80 のころならアセンブラからも良かったんだがな ま、何から始めようが本人次第
>>965 それはあるなぁ
でもハードを含めてプログラムの真髄を知るのならアセンブラやってた方がいいな
まぁ今だと組み込みなんかやらなければアセンブラなんてふれる事もないだろうが
と言う漏れももうアセンブラなんて面倒くさくて組めない
>>964 現状で↓を勧めるオマイの見る目の無さに感服
アセンブラ→C→C++→C#
ならばここらで手を打ったらどうだ? C→C+→C++→C+++→C#
もこみちがリリーフランキー役やる時代だから何でもあり☆
いきなりアセンブラはないだろw まずやる気が起きん。
まぁ何を目指すかなんだけど 今でもロボコンなんかでH8なんかのコードをCやアセンブラでしこしこ書いてる香具師 はいるわな 将来PGで飯食ってくのならVBかC#しかできんのなら偉く安く使われるだろうし C#から低級言語に行くのは難しいし若い内しかできん
初めてC#でツール作ったけど。凄い簡単だったな。 ファイル開いてテキストで読み込んで文字列の加工処理やるのが、 こんなに簡単に出来るとは。 C++でAPIとか呼んでやってたのがバカバカしく思える。
自分はC#から始めたけど、Marshalクラスに手を出して ポインタとかの使い方を覚えてからCに行った。
CASL II は必須にすべきものなんだよ
'95頃からDelphiやC++Builderを使ってきたが ようやくMSも徐々に出はあるがBorlandの統合開発環境のような 使い勝手に近付いてきたかと感じた。 まあそのBorlandも'02で見限ったが
VC++使っていたときはVB見たいにもっと簡単にできないのかと思ってたが C#使ったら簡単に色んなものが組めてしまうので逆に怖い C#良くできてるよ
とりあえずCILは覚えてみたが使い道がないな。
確かにC#はよくできてるし、開発効率も高い しかし、それがゆえに仕事にならん 中学生でも使いこなせるだろう
>>980 開発効率高くて仕事にならないって・・・
バカな俺にわかるように説明してくれ
>>980 標準的な事をやらせるならC#だけど
重箱の隅を突っつくような細かい事やるならVC++だと思う
まぁVC++ってボタンの色変えるだけでものすごい苦労するが・・・
>>981 それこそアルバイトでもできそうな仕事に、好き好んで大金を払うやつなんぞおらん
画像処理やストリームのビット操作が遅すぎるので使い物になりません =>C#
>>985 ダブルバッファリングもしても遅いし。。。参ってます
そんなに遅いかなあ。仕事で使ったことないからよくわからんや。
>>985-986 Win32APIを呼び出して使うかポインタ操作するか
DirectX使いましょうね
どうにも化石と学生が混じってるようで困る
詳しく
C#でちらつきの悩みって、なんか方向性が間違ってる気がする
992 :
デフォルトの名無しさん :2006/12/16(土) 05:51:15
ラベルに縦書きで文字を表示する方法ってないですか?
あるよ
何が遅いかわかってるならそこだけネイティブでやりゃいいじゃん 用途に応じておいしいとこだけ使えばいいの
・・・発作?
998
999
(・3・)b エェー またまた1000いただきだお
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。