※シェアウェア厨の相談はお断りです。
有料のソフトを作ろうと思っている香具師はそれなりの努力をしろ。
※死者プ厨の相談はお断りです。
.NEET乙
8 :
デフォルトの名無しさん:04/12/14 19:00:55
>>3 別にシェアでもフリーでもいいんじゃない?
教えてあげて、その報酬がないのが気に入らないわけでもないんだし。
必要なのはどれだけ独創的な発送をしたかであって、
それを実現する手段なんて、ただでくれてやらぁ
>>8 ずいぶん太っ腹だなあ。まあ俺も、プロジェクト開発に携わっている以上、
ここで質問してしまったら、シェアウェア厨と何ら変わりないから、自分が
プログラマである事を隠して質問してる。
職業としてる人が、ここで質問するのは
ちょっとなぁって気もするけど、ここの住民様たち
経験豊富だしレスもちょっぱやだし、やさしいからYO!
12 :
デフォルトの名無しさん:04/12/14 19:32:29
13 :
デフォルトの名無しさん:04/12/14 19:35:50
>>8 フリー=世のためになる
シェア=作った人のためになる
全然違う、以上。
>>12 VS.NET2002/VC#.NET2002では.NETの対象バージョンは1.0のみ。
.NET1.1を使いたいなら2003を使う。
うひゃ、まじですか?
そりゃ、致命的ですね!!
2005のECがよさげなんで、
さっそくアマゾってみようかな。
18 :
デフォルトの名無しさん:04/12/14 20:20:24
ぬるぽ
ありがとうございます
実は
o = null;
でうまくいかなかったもので・・・
原因は別にありそうですね。
僕も同じような問題で悩んでいます。
wDocとかwSelectionを利用しているのですが、
ワードをmyApplicationよりも先に終了したときに、
終了した事実をどう取得するか、という問題に取組んでいます。
ご存知でしたら、教えてNE!
ちなみに、GetType()で返り血を浴びてnullかどうか判定するという
意見もあったけど、GetType()がもともとなかったんだYO
Windows.Forms の DateTimePicker で、2004 と押したら、月の位置に
キャレットを自動的に移動する事はできませんか?
標準だと 2004 とタイプして カーソルの右を押して、12 を入力して
カーソルの右を押して…、とわざわざカーソルで年月日の項目へ
移動しないといけません。
これを、4, 2, 2 の入力で自動的に年月日の欄へ移動させたいのですが…。
何か方法があれば教えてください。
23 :
デフォルトの名無しさん:04/12/14 22:11:24
IPアドレス入力テキストボックスみたいにしたいのかな?
DateTimePickerのメンマをチェキラ
24 :
デフォルトの名無しさん:04/12/14 22:14:36
DataSet DatatableをDatagridのSourceとmemberに設定しているものです。
DataGridに表示されているデータを手軽に印刷する
方法で、PrtSc以外の方法はありませんか?
前すれまだ残ってるのに何でこっちに来てるんじゃ?
仕様?
26 :
デフォルトの名無しさん:04/12/14 22:42:12
ADO.Netで便乗質問です。
SQL文でFindとか書くよりも、DataSetの中の1テーブルを、
DataViewに入れて、FindとかSortする方が激しく楽なんですが、
この方法だと、テーブル全部がローカルのメモリに展開されている
ことになるんですよね?
レコードが数万件とかなる場合には、使っちゃ駄目なんですよね。
そのあたりの境って何か具体的な指標があるんでしょうか?
作ってみたら、重くて、駄目だこりゃ、っていう判断しかないんでしょうか?
レコードが数万件ならやめとけ
>>23 そうです。そういう感じです。
メンマをチェキラってみましたが(笑)
できそうなメンバを見つけられませんでした。
お手数ですが、御存知でしたらもう少しヒントを頂けると
助かります。
よろしくお願いします
VisualC# 2003買おうかと思ったけど、
高くて高くて・・・。
仕方ないので、SDKでがんばって、GetAdaptorInfoります。
30 :
デフォルトの名無しさん:04/12/15 01:19:17
dBASE IV用のADO.NETプロバイダは無いのですかね?
あるよ。
インストールし忘れたんだろ。
32 :
デフォルトの名無しさん:04/12/15 10:17:32
AというHashtableに設定されたキーと値をそのまま、
BというHashtableに追加したいんですが
Aの内容をグルグル回して追加していくしかないのでしょうか
クローンを作るんでないなら、そうだろうね。
>>31 申し訳ないですがプロバイダ名を教えてもらっていいですかね
振るインストールしたはずなんだけど、、
>>35 ole dbじゃまともに動かんのですよ
thx
>>37 ありがとうそこも読んだ事ある
書き方が悪かったですねdBASE専用のプロバイダが無いかなと質問したところでした
39 :
デフォルトの名無しさん:04/12/15 15:37:41
以前、CGIへデータをPOSTするコーディングについて
質問した者です。またお世話になります。
CGIへPOSTするデータ
key1=value1&key2=value2&key3=value3・・・
という文字列になるのですが、key2に設定する値がない場合は
key1=value1&key2=&key3=value3・・・
になるのでしょうか
key1=value1&key3=value3・・・
になるのでしょうか。
CGIの仕様に基づいて決まるものなのでしょうか。
>39
C# に関係ない。スレ違い。Webprog板にでも池
42 :
sage:04/12/15 16:57:39
VS2003である日突然デバッグ不能になりました。
C#アプリでもASP.NETでも両方です。
Exceptionが発生したり、ブレイクポイントにくると、
デバッグ中のアプリもVS2003も応答無しになり、
アプリ強制終了で、VS2003が復帰(ソースの位置を特定できません)
になってしまいます。
同様の現象 みたことあります?
おもいっきりageちゃった。
なんか、X Button Maker切ったら少し進んだ。
どうもデリゲートあたりらしい。
すまんかった。
デリケートなデリゲート
( ´д)ヒソ(´д`)ヒソ(д` )ヒソ
スルーしてやるのが大人の配慮ってもんだ。
おまえらもっと自分に素直になれよ
49 :
デフォルトの名無しさん:04/12/16 12:22:43
44はまだしも46はdmp
>>39 ここでPost系の質問しない方がいいよ
前のPart19
で僕がここの方々を怒らせていまったんだ。
なんでウェアウェアをお手伝いしてるのに、報酬がないんだ、と。
まったくもって、貧乏の集いだよな。
今年はクマーがよく出没する一年でした。
ウェアウェア ワロタ
>有料のソフトを作ろうと思っている香具師はそれなりの努力をしろ。
(( ;゚Д゚)))エ・・・エエー!! 聞いたらダメですか・・・
ここにいるのはみな趣味グラマなのか?
56 :
デフォルトの名無しさん:04/12/16 21:44:59
荒らすなボケ。シェアウェアで怒られるようなら、気付かれないように聞け。それくらいの心使いはあってもいいと思う。
そういう問題なのか?
内容がwebprog板だろって事だろ
だからなんでシェアを毛嫌いしてんだボケ。
個人でやってりゃシェアで、会社を興せばプロダクトか?
アンチスパイウェアだったはずが、いつの間にか
アンチシェアウェアに話がすり替わっている。
何故だ。
スパイウェア作るのがよく批判されるけど、
スパイ機能(とでもいうのでしょうか)でも搭載しなけりゃ
いつ海賊されるかと不安になるのわかる人手を上げて!!。
というか、こういうシェアウェアに関する話題のすれって
どこに行けばあるんですか?マ板にもなかったYO。
>>56 正論。反省します。
>>55 趣味グラマですが、仕事に直結した趣味グラムだけ。
ところで、39みたいな
POST機能(?)を使うに際して
FW等で警告を受けることはあるのですか?
「不正なアクセスが発生しました。下記のプログラムを終了します」とか。
62 :
デフォルトの名無しさん:04/12/17 00:02:30
>>60 ソフトウェア板にある。しかし、そこも"糞"シェアウェア呼ばわりされているがな。
要するに、情報はタダで得て、自分は金儲けの道具に使うってのを前に出すと
あまりにも虫のよすぎる話なのですぐ嫌われるから、有料のソフトを作ってるっ
て事を隠して質問しろ、って話。
65 :
デフォルトの名無しさん:04/12/17 00:31:53
普通有料のソフトつくる奴が質問なんぞしない
そんな奴がつくったソフトなんぞ誰も買わないし買ってもトラブルになるだけ。
訴訟されたときの覚悟はおあり?
ウイルスソフトばっかり作ってんじゃねーぞ。
> 訴訟されたときの覚悟はおあり?
余計なお世話。
68 :
デフォルトの名無しさん:04/12/17 00:38:44
誰もあんたのくさいソフトなんか海賊しないってのwwwwwwwwwww
69 :
デフォルトの名無しさん:04/12/17 00:40:07
C#で海賊対策なんぞ無理
そういうこともわからないようじゃ
100000000000000000000000000000000000000000000年ったっても
地面にはイツ配った乞食になるしかない
どうせシェアウェアつくろうとかしてるのは無職ニート童貞って相場が決まってる
70 :
デフォルトの名無しさん:04/12/17 00:45:48
人
(__) &⌒) l|l
(__) \ \ ii |’, |
( ・∀) / / _- ― = ̄ `|
/ ⌒ / , -'' ̄ = __―||―lilノ
ヽ,_ヽ ヽ/~"" _-―  ̄ /
ヽ,, __,,, - ∧ ∧―= ̄ `ヽ/,, _
ヽ / ( 〈__ > ゛ 、_―
ヽ / .'∴.' <.'∴'(/ , ´ノ
| | ・,‘ /// / /
| | .'∴/ / ,' ↑
| | / /| |
>>23 | | !、_/ / )
| | |_/
71 :
デフォルトの名無しさん:04/12/17 00:47:10
O
_O ・’
ノ\/・’ヽ∵.
>>23 │ _ノ ヽ
〉
結局、誰かのせいで仕事でC#をやっている人間がここで質問しづらくなったってことだな。
有料のソフトつくる奴の質問はお断り
今まで微妙な均衡が保たれてたのにどっかの馬鹿のせいで一気に崩れたな
まあ、崩れた均衡はもう一度取り返せばいいわけで。
シェアウェア作者は別に来てもいいと思うが、
>>23には来ないで欲しい。
あの既知概まだいたのか
78 :
デフォルトの名無しさん:04/12/17 11:45:56
VB.NETだと、windows scriptのnetworkDriveでネットワークドライブの割り当てができるようなのですがC#でそれをする方法はないでしょうか。
WSHはよー知らんが、VBでその部分作ってC#でよべばよかろ
80 :
デフォルトの名無しさん:04/12/17 12:07:30
金なくてC#しかないんです…orz
>>72 仕事であることを隠せ、by 56
>>65 何の根拠もない支離滅裂な発言はやめましょう。
ところで、いかなる問題が発生しても訴訟を起こすことが
できないように利用規約に予め明文化しておけば
いい、ってことはないですかね。
シェアウェアだろうと基本的に放置するので、そこんとこ大事。
またスレ違ιヽな発言をしてしまった。
ごめん、82はなかったことで。
すみあせん。
84 :
デフォルトの名無しさん:04/12/17 12:32:45
職業プログラマは質問に答えるだけにしましょう
86 :
デフォルトの名無しさん:04/12/17 12:46:47
>>85 そうですね。
趣味グラマがシェアウェア作るのに質問したとしても
バンバン惜しみなく教えてあげましょう。
うちらは、趣味グラマの何倍もの給与もらってホクホクですから!!
というか、出し惜しみするような知識なんて私にはありませんが・・・。
>>82 ほう。そんな糞シェアウェアは当然使わない罠。金は取るだけ取って、
後はユーザーからのクレームは一切無視か。そんなばかな。それは
詐欺ウェアですよ。
多分、明文化したとしても、訴えられたらあんた負けると思うよ。
>>87 ユーザーから不具合報告あったら、
バージョンアップ時についでに修正する予定です。
あ、もちろんバージョンアップ時にしかりお金をいただきますが。
それでユーザーが離れていっても別にかまわないし、
どうすればユーザーが増えるかってことを議論するのは場にふさわしくないので
■■■■糸夏 了■■■■
>>87 そのへんどうなのよ。
製造物だとPL法などもあるけど、さいしょからこの商品は壊れやすいものですがとか不十分でそれによる損害をおいませんとか書いてあっても責任生じるのか?
明文化していても自己責任にならんのか?
91 :
デフォルトの名無しさん:04/12/17 13:05:27
>>87 >多分、明文化したとしても、訴えられたらあんた負けると思うよ。
利用規約に、損害に対する責務を負わない旨を記載すれば、
相応の訴訟を起こされても、対抗できます。
利用規約に同意の場合にのみ利用するものとすると、
購入前に事前に通達しておけばいいことですから。
よって、不具合起こっても基本的に放置可。
すれ違いですみません。
消費者契約法によってその条項は無効になる
>>90 消費者契約法第8条1項1号があやしいな。
>>91 あまりにも消費者の利益をないがしろにした利用規約は、不利な物的証拠
になりますよ。
>>88 勝手に終了してんじゃねーよ。ま、中の利用規約を読んで、そのような内容
だったら、あんたが作った物だと思うことにするよ。そして「あー、ダウンロード
して時間を損したな」と思うから。
95 :
デフォルトの名無しさん:04/12/17 13:12:48
市販ソフトの規約すら読んだ事無いんだろ
普通どの規約にも損害おきてもシラネーヨなんてことくらいは書いてある
消費者契約法は無制限に保護することを可能とするものじゃないだろ。
前述の条項は十分に適当なものだと思うけど。
>>95 しかし市販ソフトの大半は、マイナーバージョンアップはタダだし、
しかもオンラインバージョンアップで手軽にできるし、ユーザーが
利益を享受できるように考えられている。
M$は悪の巣窟のように言われているけど、実際、どれぐらい多量の
WindowsUpdateで対応している?あの姿勢があるからこそばんばん
売れるんじゃないか?
ものによっては交通、科学技術、医療などの分野で使うことはお勧めしないなんて
文を混ぜてる規約もあるしな
99 :
82=91:04/12/17 13:16:48
>>94
どのソフトも、それによって生じたいかなる損害も
負わない旨が利用規約にかかれてますが、いかが?
だいたいWindowsXPだって不具合だらけで
よくPC凍るけど、それにともなって
未保存のワード文書が消失したからといって、
Microsoftを相手に訴訟を起こして勝てるとでも
思っているのかね。
つまりは、フリーだろうとシェアだろうとプロだろうと、
それにより生じた損害は自分で負うのだよ。
ではなく事業者が負うソフトがあるならば、
紹介してくれ。
そのソフト使って不具合を発生させて、
そのときたまたま大切な文書を書いていたことにして
訴訟を起こしてがっぽりもうけてみるから。
またあらぬ方向に話をそらそうとする奴が
相手にする奴が悪い
102 :
82=91:04/12/17 13:21:48
ちなみに私は
「このソフトは完全な動作を保障するものでありません。
したがって、利用前にはすべての記録媒体のバックアップを・・・」
と明文化するつもりです。これなら、いくら未保存のファイルが
あったとしても、ソフトの不具合が発生する直前の状態が正常ならば、
私に責任はありませんから、そしてどのソフトの規約にもそのような
ことがかかれてあります。
世の中には全部免責を謳ったパッケージやシェアウェアが結構あるが、
消費者契約法上無効になり、94の言う様に逆に不利になる恐れがある。
製品の瑕疵などによる損害賠償額は消費者が事業者(個人も含む)に支払った額を限度とする
と言う感じの契約にするのが無難。
ATOKの使用許諾契約書が法律的にCSR的に良く出来たものという評判がある。
>>99 不具合だらけでも使わざるを得ないから使ってるんだろ。
使う必要のない、しかも滅多にバグを直さない糞シェアウェアなんて
誰が金払ってまで使うかよ。
↓次で「別に文句のある香具師は使わなくていいよ」と言ってくれ。それで終結する。
だから、世の中に溢れてる全部免責の契約は無効なんだって
そういうソフトはあらを見つけて訴えると嬉しいことになるかもよ
別にマンコのある香具師は使わなくていいよ
107 :
82=91:04/12/17 13:26:58
別に文句のある香具師は使わなくていいよ
糞なのは自分がよくわかってる。
で、使わざるを得ないソフトを当然目指している。
というかもうできているが、公開する準備ができていない。
当然高額。サポート掲示板もあり、放置するわけがない。
よりよい製品を目指して、日々精進するのみ。
ちょっと煽りすぎてごめん。
無効にならねーよ
同意した人だけが使えて言ってるんだから使用してる時点で使用許諾の内容認めてるだろうが
そう思うならそうしろ
>>108 消費者契約法の第一条を100回読む事をお勧めする。
112 :
82=91:04/12/17 13:38:48
82=91 :04/12/17 13:26:58
別に文句のある香具師は使わなくていいよ
だから、すれ浪費するのもうヤメレ
>>112 自分で火を付けておいて何を戯言を言ってるのやら┐(´∀`)┌ヤレヤレ
| i"ヽ/"i
| ヽ ハ ノ 別に文句のある香具師は使わなくていいよ
| ('A`)ノシ
/ ̄ ノ( ヘヘ ̄
116 :
82:04/12/17 13:45:16
もうヤメレ。
これ以上、本題から外れたことGackt、削除依頼だすよ
>>115 君のような香具師は、実際に訴訟起こされて見るまで絶対自分だけは
安全だと思いこんでるんだろうな。
118 :
82:04/12/17 13:49:25
いい加減、もうヤメレ
120 :
82:04/12/17 13:55:21
>>119 どう思おうが勝ってだが、
僕はこのスレが好きなので、少しでも早く事態が収束することを
願い、また自分が場の雰囲気を乱してしまったことを反省しています。
ただそれだけで、それ以上でもそれ以下でもありません。
ソフトの利用許諾等に関してはソ板にあるので、
そちらへどうぞ。
ヘ( `Д)ノ 別に文句のある香具師は使わなくていーよーっ!
≡ ( ┐ノ
:。; /
122 :
82:04/12/17 13:58:11
別に文句のある香具師は僕の糞ソフト使わなくていいよ
だから、浪費はもういいよな、なっ!
てか、前スレ埋まってないから前スレでやれ。
124 :
78:04/12/17 14:38:50
そういえば、「超図解C#ルールブック」って本、読んだ?全然立ち読みでいいけど。
俺のソースは間違いだらけだったよ・・・orz
まぁ、俺は、一人でプログラムしているだけだから
それほど気にしなくてもいいかもしれないけどな。
超 とかついてる時点でアレな気はするな
amazonで表紙だけでも見てみるか
画像の形式(png→jpg)を変換するには
どうしたらよいでしょうか
Image.FromFile(string)してImage.Save(string, ImageFormat)すればいいんじゃないかな。
ImageFormatに「jpg」が出てこないのですが
確かにjpgは無いな。「jpg」は。
132 :
82:04/12/17 18:31:27
133 :
デフォルトの名無しさん:04/12/17 19:40:28
マジレスしていいのかわからないけど・・・・
82って無職だよね。
昼から幼稚園なみの能書きをタラタラ。
お母さん泣いてるよ
>>133 多分無職ニートだろ。ここまで世間知らずの厚顔無恥な書き込みは、まともな社会人なら
おいそれと出来るものではない。
〃〃∩ _, ,_
⊂⌒( `Д´) <別に文句のある香具師は使わなくていーよーっ!
`ヽ_つ ⊂ノ
蒸し返すなら前スレでやれ。
137 :
82:04/12/17 21:22:49
無職だからこそ、出会いソフトで一発金銭を狙っているわけでして、はい。
ニートってなに? API?
139 :
デフォルトの名無しさん:04/12/17 21:54:46
だめな奴がなにをやってもダメ
おとなしく自殺しろ
141 :
82:04/12/17 22:09:49
東大理2の学生ですが何か。プゲラ
あら〜今度はついに嘘つきですか・・・・可愛そうな人だ。ニート風情が。
143 :
82:04/12/17 22:12:16
もううそってばれたのか・・・●rz...
144 :
82:04/12/17 22:14:54
15秒しかたってないのに・・・
145 :
デフォルトの名無しさん:04/12/17 22:46:58
this._dtable.RemotingFormat = System.Data.SerializationFormat.Xml;
RemotingFormatがC#2005で認識されません・・・。
SerializationFormatも。
ComponentResourceManagerも。
2002から2005にバージョンアップしたばかりです。
お願いします。エロ異ひと。
>>120 >僕はこのスレが好きなので、少しでも早く事態が収束することを
>願い、また自分が場の雰囲気を乱してしまったことを反省しています。
じゃあ消えてください。さあ、今すぐに。
147 :
デフォルトの名無しさん:04/12/17 23:55:53
>>146 IPを抜き取りました。
今から、あなたの家へおやつを持って伺います。
148 :
デフォルトの名無しさん:04/12/18 00:30:38
.NET FrameWorkにはSQLサーバーを経由しないで
簡易データベースを作れるクラスはあるのでしょうか?
UNIXのBerkleyDBみたいな奴がほしいんですが
>>147 マジレスすると、ム板の人間にそういう原始人みたいな脅しが通用すると思うか?
1.まずどうやって2chに記録されているホスト/IPを開示してもらったのか?
2.百歩譲って1.が出来たとして、次にそのIPから、どうやって書き込み者の
住所を特定できたのか?プロバイダが情報を開示するのは、警察や司法の
要請があった時だけだぞ。
最後に一言。氏ね。
マジレスしてる時点で死んでいいよ(^^
>>150 なぜわざわざ「氏ね」という漢字を使っているのかも知らないのか。
お前、心底馬鹿だと思うよ。
152 :
デフォルトの名無しさん:04/12/18 01:02:18
sage厨同士仲良くしろよ。
(・∀・)ニヤニヤ
>>151 嗚呼わたくしにはあなた様の高尚な意図が全く理解出来ませぬ
どうかご解説くださいませ
アッヒャッヒャ!ヽ(゚∀゚)ノ
おお、マジレスしてしまった自分を悔いているのですか
悔い改めなさい、さすれば救われるでしょう
お前ら最高に面白い
159 :
147:04/12/18 02:19:56
>148
なにがしたいのかようわからんが、
System.DataのDataSetを使ってXMLで管理すればいいだけじゃないか?
あのクラス群はデータベースにアクセスするためだけのクラスじゃないのだから。
速度とか効率とかはしらんけど
ほかには、適当にクラスを作ってそれをコレクションクラスで管理して、
それをシリアライズすれば、オブジェクトデータベースっぽいものができるっぽ。
まぁ、入出力管理等々は自分でやらないといけないし、
メモリー上に作るから、プログラムが落ちたらデータも飛ぶけどな。
163 :
デフォルトの名無しさん:04/12/18 06:44:56
Visual Studio 2005 の発売っていつなんでしょう?
今 Visual Studio 2003 (C#) で開発しているのですが
Visual Studio 2005 が出たら、Visual Studio 2003 で開発したソースは
そのままリビルドして使えるのでしょうか?
御存知の方、教えてください。
>>164 2005年の第三四半期辺りらしい。
基本的にそのままリビルド可能なはず。
ベータを今までいじった範囲で書き直しが必要な部分は特になかったと思う。
ただ、一部Obsoleteになった機能があるから警告が出るけど。(コンパイル・実行はできる)
代表的なのだとXmlValidatinReaderとか。
Orcaはいつ頃になるかね……。
>>148 COMでよければ、ADOX.CatalogでMDBファイル(Accessデータベース)を作れるよ。
167 :
147:04/12/18 21:41:24
>>164
確かプログラム板に2005のスレッドあったよ。
2005の体験版が紹介されてるから、
インストールしてみるといいよ。
ちなみに、僕は2002のソースそのまま移行したら、
ComponentManagementなんとかっていうのが
エラーとしてひっかかってた。
だから無条件に移行できるわけではないような気がしたが
詳細はわからない。2005のスレッドで
質問してみるのがよい。
168 :
デフォルトの名無しさん:04/12/19 00:57:55
フォームをMDIのコンテナにして、
子フォームがMDIの外にでそうになると出るスクロールバーを
表示させないようにするには、どのようにすればいいのでしょうか?
AutoScroll = falseで解決できないのですね...
169 :
デフォルトの名無しさん:04/12/19 01:01:23
"ff"という文字列を
ffというbyte型に変換したいのですが・・・
どうすればいいのですか?
byte.ParseとかConvert.ToByteでできません・・・。
170 :
169:04/12/19 01:15:41
アホな質問で申し訳ないんですが
たまに見かける
>>170さんみたいに変数の前に_をつけてるのってどういう意味なんですか?
_passの_です。
コーディング規約かなんかですか?
Convert.ToByte(string, int)ってマイナーなのかな……。
>>169 だからさーそんぐらい自分で書けよ・・・探す能力も重要だけど、書ける能力もっと大事だと思うぞ。
>>171 誰でもがそうなのかは不明ですけども、
クラスのprivateフィールドとpublicプロパティを同じ名前にするときに
時々アンダーバーで始まる名前を付けることがありますね。
private string _name;
public string Name { ... }
のような具合。
>>173 それはそれで正論だが、例えば>172を知っていれば2進数の時や8進数の時に改めて書く必要はなくなるし、
逆方向の変換も同様の手段が執れるだろうと容易に思いつけるわけで。
PAINT.NET 2.0 が出てたので
ソースコード読んで勉強してみます。
177 :
デフォルトの名無しさん:04/12/19 04:07:56
>>171 頭文字に_(あんだば)つけると、
インテリセンス(だっけ?)が表示されたときに
候補の最上部に自作フィルドが集中して表示されるわけでして、はい。
もしくは、自作フィルドが一見してすぐ見分けつく。
178 :
デフォルトの名無しさん:04/12/19 04:12:46
// private System.Windows.Forms.DataGrid _g;
// private System.Windows.Forms.DataGridTableStyle _gtablestyle;
// private System.Windows.Forms.DataGridTextBoxColumn _gcolumn1;
// private System.Windows.Forms.DataGridTextBoxColumn _gcolumn2;
private Word.Application _wApp;
private Word._Document _wDoc;
private Word.Selection _wSel;
private object oMissing;
他と分けて見やすくする。
他のかぶるのを避けるためなんですね。
ありがとうございました。
個人の素人趣味グラマーには関係ないってことで…
いや違うだろ。
コメントの付け方について相談です。
private int hogehoge; // ほげほげ
とコメントをつけるとインテリセンスなどで表示しないので、本来なら
/// <summary>
/// ほげほげ
/// </summary>
private int hogehoge;
とつけるべきかと思いますが、このようにコメントをつけると行数がかさみ
1画面に表示できる内容が減ってしまいす。同様に
private enum Hogehoge
{
/// <summary>
/// ほげほげ1
/// </summary>
Hoge1,
/// <summary>
/// ほげほげ1
/// </summary>
Hoge2
とコメントをつけるのが本来なのかもしれませんが、
private enum Hogehoge
{
Hoge1, // ほげほげ1
Hoge2 // ほげほげ2
のほが(慣れもあってか)見易いです。みなさんは、コメントはどのようにつけてますか?
コメントは貴方の心の中にそっと留めましょう
間を取って
///<summary>Comment</summary>
enum Hoge {...}
パラメータを含む場合はsummaryも開始タグ・内容・終了タグの三段に分ける。
C#あぷりのなかでマクロとしてスクリプトエンジン動かしたいんですが関連クラスなどご存知ですか?
CodeDom?
ActiveScript使えないの?
>>185 んーやはしそこらへんですよね。マダ調べたりないんですけど、デバッグ環境とか難しそうで・・・まぁそこまで作りこむことないのかな・・・
ActiveScriptはなんかちがうっぽい・・・
読めん
Stream から Stream へ内容の一部を直接、複写するメソッドはないんでしょうか。
わざわざ byte[] を介在させるのが鬱陶しいのです。
192 :
デフォルトの名無しさん:04/12/19 20:33:38
Stream.Clone(int start, int end, System.Stream.FormatStyle);
すいません。質問です。
GraphicsオブジェクトからImageオブジェクトを作成することは可能ですか?
可能ならどうすればいいか教えてください。
無理。
>>195 そうですか。
いや、PictureBoxからCreateGraphicsでGraphicsを作成した後、
DrawRectangleで四角形を書いてもすぐ消えてしまうので、
どうしたものかと思ったもので。
public class Form1:System.Windows.Forms.Form
{
//generated code...
private Bitmap bmp
public void hoge()
{
Graphics g=Graphics.ImageFrom(bmp);
g.DrawRectangle(new Pen(new SolidBrush(Color.hoge),0,0,3,3);
pictureBox1.Invalidate();
}
public void pictureBox1_Paint(object sender , PaintEventArgs e)
{
if(bmp==null)return;
Graphics g=pictureBox1.CreateGraphics();
g.DrawImage(bmp,0,0,pictureBox1.Height,pictureBox.1Width);
}
適当にコンパイルも通さず書いてみた。
ぬるり大量発生の予感。
まずはGraphicsをDisposeしろ。
話はそれからだ。
確かにwよく忘れる。
SolidBrushも8Fとか二つ目にいるなぁ。。。
指摘されて思い出したが
e.Graphics.DrawImageの方がよかったねぇ。
>199ども
Graphicsはよく言われるけど、PenとかBrushとかFontとかってあんまりDisposeって言われないよね。
この辺も使い終わったらすぐDisposeすべきもののはずなんだが。
なるほど。。。
hoge()の中身をusing{}で囲むといい感じになるかな?
publicもprivateの方がbetterか。
あとはかっこはちゃんと対にしないとだめだめですなw
Java の LinkedList みたいなクラスってないの?
using(Graphics g = Graphics.ImageFrom(bmp))
{
using(Pen pen = new Pen(new SolidBrush(Color.Black), 0f))
{
using(Font font = new Font(FontFamily.hoge 〜〜〜))
{
// 面倒な上に読みにく杉
// using使う時のスコープの深さは一個ぐらいがいいと思うがどうよ?
}
}
}
>>204 2.0でジェネリック型として追加される。
>>205 個人的には、Graphics以外で使う範囲が大きいのはusingを使わずにDisposeするかな。
異なる型もまとめて宣言できれば楽なんだけどね……。
207 :
デフォルトの名無しさん:04/12/20 00:50:58
タスクバーもどきを造ろうと思うんですが
他のウィンドウが上にかさならないようにするには
TopMost = true;をする以外に
どんな処理が必要でしょうか?
異なる型もってIDisposableが無い型でもってこと?
oo○(using一発使ってみようかと思ったら意外に使いにくいなぁ。)
using(
Graphics g = Graphics.ImageFrom(bmp),
Pen pen = new Pen(new SolidBrush(Color.Black),
Font font = new Font(FontFamily.hoge 〜〜〜)){
// 面倒な上に読みにく杉
// using使う時のスコープの深さは一個ぐらいがいいと思うがどうよ?
処理・・・
}
こんなかきかたしてぇ・・・
>>207 それで何か不都合が出てから質問すれば?
>>209 コンマでつなぐのは美しくないので、セミコロンで。
private void hoge
{
auto Graphics g=Graphics.ImageFrom(bmp);
}
↓
自動でDispose呼ばれる
[AllDipose]
private void hoge
{
Graphics g=〜〜;
}
{}内で生成されたIDisposable型インスタンスは全部
Dispose呼んでくれる・・・。
こんなんどうだ?w
212 :
デフォルトの名無しさん:04/12/20 01:16:34
DataGridViewに関して
包括的に学習したいのですが、
お勧めきぼうぬ。
>>210 でるんだよカス
他のウィンドウ制御しないといかんだろうが
痴呆は病院にかえれよ
(・∀・)ニヤニヤ
ある関数内で、Exceptionが発生した場合、3回までリトライ処理を行います。
2回目、処理が正常に行えた場合でも、Exceptionに飛びます。
どうすれば回避できますか?
※正常に行えた場合は、そのまま終わりたい。
----------------------------------------
private string syori()
{
---処理---
return "成功"
}
catch( WebException webex )
{
// リトライ処理を行う
RetryCnt++;
if( RetryCnt < 3 )
{
syori();
}
throw (Exception)webex;
}
>>215 コードの流れを見れば明らかだと思うが……。
> catch( WebException webex )
> {
> // リトライ処理を行う
> RetryCnt++;
> if( RetryCnt < 3 )
> {
> syori();
> }
> throw (Exception)webex;
> }
一度catchして、if節でsyori()を行う。
成功したらreturnで呼び出したsyoriの次から実行する。
syoriの次になんて書いてるか分かるね?
ところでわざわざExceptionにキャストする意味はどこにもないんだが。
ありがとうございます。
Exception内で呼び出した関数の中で、returnが呼び出されていても
そこで終わらずに、Exception内の次のステップが実行されるとは
知りませんでした・・。
何度もすいません。
リトライ実行時以外(3回以上失敗)、Exceptionを返したいのですが
下記コードだと「値を返さないパスがあります」と怒られます。
どうコーディングすれば宜しいでしょうか。
------------------------------------------
catch( Exception ex )
{
// リトライ処理を行う
RetryCnt++;
if( RetryCnt < 3 )
{
this.UploadFile( prm_strUrl, prm_strCmd, prm_intNo, prm_strUserId, prm_strUploadFile, prm_strReName );
}
else
{
throw ex;
}
}
だからコードの流れを追えよ。
返値が必要なのに返されてないんだろ?
>>209 using(Graphics g = Graphics.ImageFrom(bmp))
using(Pen pen = new Pen(new SolidBrush(Color.Black))
using(Font font = new Font(FontFamily.hoge 〜〜〜)) {
// 一応これで見かけ上の深さは一個だが…
// 処理・・・
}
これでどうよ。もっとも見かけ上の深さが1個になっただけで
内容的には深さ増えてるんだけど。
逆にそのおかげ(?)でDisposeが呼ばれる順番が
内側から(上記だとFont, Pen, Graphics)になることが保証される。
まー、いちいちusing, usingって書かなきゃならんのは確かに面倒だがな…
>>217 this.UploadFileが成功しても3回同じ事しそうだが
一部分だけじゃなく周辺コード全部みせた方が的確なアドバイスもらえるぞ、きっと
>>220 そだね、いいかんじ。最近コードかいてなかったので当たり前のことにきづかなかたーよ。感謝。
>>217 自分ならこうする。
void? syori(){}
bool syoriWithBoolRet(){
bool ret=true;
try{
syori();
}
catch(){
ret=false;
}
return ret;
}
? AMethod(){
bool result=false;
long count=0;
while(result==false&&count<3){
result=syoriWithBoolRet();
}
if(count>=3){
throw Exception();
}
}
>>222 そのコードじゃ呼出元で例外の特定ができないから好ましくない。
boolの代わりにExceptionを返すようにして、成功ならnullを返すとか。
//可読性は落ちてしまうが。
224 :
デフォルトの名無しさん:04/12/20 16:14:24
>>217 漏れなら単にこうするぞ。
RetryCnt=3;
while (RetryCnt > 0)
{
try
{
syori();
return;
}
catch (Exception e)
{
if (--RetryCnt == 0)
throw(e);
}
}
皆さん、沢山のアドバイス、ありがとうございます。
泣きそうなくらい嬉しいです。
下記に修正しました。
---------------------------------
private void Syori( string prm_strData )
{
return "成功";
}
catch( Exception ex )
{
// リトライ処理を行う
RetryCnt++;
if( RetryCnt < 3 )
{
return this.Syori( prm_strData );
}
else
{
throw ex;
}
}
Syori()が例外をスローするんと違うの?
>>224のコードが自然だと思うが
Windows.Forms.TextBox にて、フォーカスを取得した時に
SelectAll() すると入力されている文字列が全て選択されてるのですが、
これをクリックの時に行なうにはどうしたらよいのでしょうか?
クリックの時といっても、初回クリック時は全選択で、2回目移行は
クリックした位置にキャレットを移動したいのですが、
1回目のクリック、2回目のクリックである事を自分で実装しないといけないの
でしょうか?
switch文で複数の条件を使いたいときはどのようにすればよいでしょう?
switch(flg) {
case 0:
case 1:
//処理
break;
case 0:
case 2:
//処理
break;
case 3:
// 処理
break;
}
みたいに 0 の時は 1 でも 2 でも処理したい、という感じです。
どうかよろしくお願いします。
goto
230 :
212○rz...(放置プレイ):04/12/20 20:38:07
>>224 どうでもいいことですよ。
どうでもいいことですけど、
あえて指摘させて頂きます。
while (RetryCnt > 0)
if (--RetryCnt == 0)
これって、重複してません?
>>228 private bool _case2Func(object something)
{
____//the same process shown in the range of case 2
____something = something + (string)anything;
}
を追加し、
switch(flag){
____case 0:
_________case0Func();
_________case1Func();
_________case2Func();
________break;
____case 1:
________(以下同様)これどうよう?
}
231 :
212○rz...(放置プレイ):04/12/20 20:39:24
とまぁ、アンダーバーでコードを見やすくしてみたんですけど、
どうですか?
usingの投稿を見て、思いつきました。
232 :
212○rz...(放置プレイ):04/12/20 20:40:36
と、調子に乗ってみるものの、
224さん、それどうやったの?
ちょっと逝ってきます ○rz.. =3
234 :
212○rz...(放置プレイ):04/12/20 20:44:01
テストしてみました。
スペース2
同4
↑あ、ほんとだ!! うまくイッタ!! (と、予めうまくいってみるテスト)
>>230 例外をスローする、しないの判断は君ならどうする
Windows Forms です。
KeyDown と KeyPress の使いわけは何か意味があるのでしょうか?
KeyDown は全てのキーのイベントが発生するので、あえて KeyPress を
使う意図がわかりません。
このあたりの使いわけに関してアドバイスを頂けるとうれしいです。
よろしくお願いします。
どのキーが押されたかを知りたいならKeyUp/Down
どの文字が入力されたかを知りたいならKeyPress
各イベントを表示する簡単なプログラムを作れば実感できるよ。
238 :
デフォルトの名無しさん:04/12/21 02:09:01
DataGrid(ASP.NET)で編集モードでの入力値を取得するのに
((TextBox)(e.Item.Cells[1].Controls[0])).Text
のようにしてるのですが、なぜか入力した値ではなく編集前の
値が取得されてしまいます。
ちょっと訳が判りません。教えていただけると有難いです。
画像のサイズチェックを、↓のように書くと
同じファイルを見ているのに、微妙に値が変わっています。
もっと正確なサイズを取得出来る方法ってありますか?
fileinfo = new FileInfo( filepath );
size = fileinfo.Length;
自分で書いてて、意味が分らなかったので、訂正します。
↑のようにコーディングして、2回同じファイルのサイズを取得してみたら
サイズが1回目と2回目で異なっています。
なぜでしょうか。
再現しない。
コントロールのイベントで、他の DLL に存在する関数を呼ぶ事は
できますか?
例えば、
public void KeyPress_Common(object sender, KeyPressEventArgs e)
{
// 処理を記述
}
と書いてあるクラスを用意して、
別のフォームのコントロールの KeyPress イベントで、
KeyPress_Common を呼びたいのですが…。
一体オブジェクト指向というものを(ry
そのメソッドがstaticなら呼べる。
他のDLLとか自アセンブリ内とかは参照設定してる限り関係ない。
244 :
デフォルトの名無しさん:04/12/21 12:48:44
245 :
212:04/12/21 12:50:17
DataGridViewなんかまだましな方さ。
RaftingContainer周りなんか英語ですらまともに情報がない。
画像のリサイズ(圧縮)は、どうすればよいのでしょうか
リサイズと圧縮はまた意味が変わってくるがね。
Bitmapの全てのメンバをチェックしてみたらどう?
特に一番最初のとか。
249 :
デフォルトの名無しさん:04/12/21 21:16:21
クライアント端末で入力したキー値を
サーバ端末のアプリに送ろうとしています。
で、以下の様に実現しようとしています。
1:
クライアント端末でキャッチしたKeyDownイベントの
KeyEventArgs.KeyCodeプロパティ値(Form.Keys型)を
サーバに転送する。
2:
サーバに転送されたキー値をSendKeys.Send(string keys)で
のアプリに流す。
3:
キーが入力されてから、それをサーバに流す過程の何処かで、
[Form.Keys]→[SendKeys.Sendのパラメータ文字列]の変換を行う。
3番の変換部分で面倒なコンバータを書かねばならず
ちょっといやな感じなのですが、
何か別の効率的な方法ありませんか?
Win32APIのkeybd_event/SendInputを使うとか。
移行してたことに気づかず、前スレに投稿してしまいました。
アプリケーション上のListViewからドラッグしたListViewItemを
デスクトップやエクスプローラで表示されているフォルダにドロップした際に、
ドロップ先フォルダのパスを取得する方法を知りたいのです。
よろしくお願いします。
HttpWebRequestつかっているんですが、
指定したURLが404だったり500だったりした場合、
StatusCode調べれば済むんですが、
鯖落ちなどでタイムアウトになった場合、何処で調べられますか?
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
して res.って入力してインテリセンスの候補探してみたけど見当たらないです
WebException.Statusではないかね。
254 :
デフォルトの名無しさん:04/12/22 00:24:08
ごくごく簡単なことなのですが、RichTextBoxで
文字列に下線つけるのは簡単ですが、これを波線(VCの怒られたときの
エラー表示)に近いものを表示する方法はないですよね?
なければ下線であきらめます。
ないね
Rtfプロパティは{get; set;}なので直接Rtfをいじるという手はある。
Rtfの書式とかはしらん。
257 :
デフォルトの名無しさん:04/12/22 13:02:53
ネットワーク上にあるファイルのサイズを知るにはどうしたらよいのでしょうか?
VC++を使っていたときはInternetSetFilePointerのFILE_ENDを見ればよかったのですが・・・
C#での方法をご存知なら教えてくださいませ
258 :
デフォルトの名無しさん:04/12/22 13:15:29
ガ━━ΣΣ(゚Д゚;)━━ン
新スレが出来てたのか!!
ここってC++マネージ拡張も質問していいのかなぁ?
System::UInt32 uint32 = 100;
System::Object* obj = uint32;
これをやると
'unsigned int' から 'System::Object __gc *' に変換できません。
って出てうまくいきません。なんか方法があるのでしょうか?
C#でいう感じを書きたい
uint a = 100;
object obj = a;
259 :
257:04/12/22 13:17:21
自己解決できますた。スレ汚しスマソ
WebResponse.ContentLength を使うのね
>>258 スレ違いだが __box(uint32);
261 :
デフォルトの名無しさん:04/12/22 13:45:22
>>260 有難うございます。
すごい助かりました(・∀・ )
DateTime な 2つの変数の経過分数を求めるにはどのように
したらよいのでしょう?方法を教えてください。よろしくお願いします。
まずDateTime同士を引き算して、その型を調べてみろ。
264 :
デフォルトの名無しさん:04/12/22 17:00:49
static char *myname = {"NAMAE"};
void main(void)
{
char *copyto, *copyfrom; /**/
copyfrom=myname;
copyto=(char*)0x00210000;
while(*copyfrom)
{
*copyto=*copyfrom;
copyto++;
copyfrom++;
}
}
一文ずつの動作説明の宿題なんです。助けて!
265 :
デフォルトの名無しさん:04/12/22 17:02:28
static char *myname = {"NAMAE"};
void main(void)
{
char *copyto, *copyfrom; /**/
copyfrom=myname;
copyto=(char*)0x00210000;
while(*copyfrom)
{
*copyto=*copyfrom;
copyto++;
copyfrom++;
}
}
一文ずつの動作説明の宿題なんです。助けて!
static char *myname = {"NAMAE"}; //
void main(void) // main の定義
{ // main 開始
char *copyto, *copyfrom; // copyto, copyfrom を char 型のポインタ変数として宣言
copyfrom=myname; // copyfrom に myname を代入
copyto=(char*)0x00210000; // copyto に 0x00210000 を char* 型として代入
while(*copyfrom) // *copyfrom が真の間繰り返し
{ // while 開始
*copyto=*copyfrom; // *copyfrom を *copyto へ代入
copyto++; // copyto インクリメント
copyfrom++; // copyfrom インクリメント
} // while 終了
} // main 終了
2重投稿きーつけてなー
それから、C/C++ 系の質問は、次回からは
さゆがC/C++の宿題を片付けるの 36代目
http://pc5.2ch.net/test/read.cgi/tech/1102753497/l50 で聞くように
あれ。ここってC/C++のスレだっけ。
と思った一瞬。
269 :
212○rz...(放置プレイ):04/12/22 22:42:24
あれ。なんでC#の宿題でないんだっけ。
と思った一瞬。
クリスマスプレゼントください。
Aつうクラスのスタートボタンを押すとBつうクラスで、とあるフォルダの中のファイルの
作成を監視します。
BつうクラスからAに出来たよーって通知したいんだけどデリゲートとイベントを使って
通知すればいいくらいの理解しかなく・・・。
スケルトンください。
C#でMSSQL Serverのデータベースをバックアップする方法ってありますか?
>>270 class B {
public event EventHandler Completed;
}
んで B から通知を受けたい奴は
b1.Completed += new EventHandler(b1_Completed);
でメソッド登録しる
B が通知を配布したい場合には
Completed(this, null);
を実行しる
っていうかまずぐぐれ
>>272 サンタさんありがとう。
ぐぐります・・・。
>>270 >BつうクラスからAに出来たよーって通知したいんだけどデリゲートとイベントを使って
デリゲートとイベント使えばいいと思うのだが、何か問題があるの?
スレッド使ってるなら他にもいろいろと気をつかうことあるよ。
>>274 使えばいいくらいの認識しかない奴は、そんなところにまで気を回せるわけがないと思われ
イベントでビギンインボーク見たいのはできんのか?
>>276 以下のような感じでかけるんじゃない?
event ClickDelegate Click;
override OnClick()
{ // fire Click event
foreach( Delegate d in Click.GetInvocationList()) {
Control c = d.Target as Control;
if (c != null && c.InvokeRequired)
c.Invoke(d);
else
d();
}
}
非同期で良ければ、BeginInvoke/EndInvokeの方がデッドロックの心配が少なくて好きだけど。
279 :
デフォルトの名無しさん:04/12/23 14:39:05
DataGridView で、ColumnをSortしたら、
CellのContentのNumberが以下のようにSetされてると
うまくいかないよ
1,2,3,4,5,6,7,8,9,10
↓
1,10,2,3,4,5,6,7,8,9
一応、ColumnのDefaultCellStyleでCellのContentを
全般から数値に変更してあるだけど・・・
DataGridViewってC#2.0だったっけ?
よくわからんけど string としてソートされているのか。
ListViewでもやるように自分でソートを定義すればいいんじゃないの
281 :
デフォルトの名無しさん:04/12/23 15:19:00
>>280 そこんとこ、もう少し詳しくお願いします(・人・)
VS2003でTabPageの派生クラス作って、デザイナの表示をすると
出来損ないのデザイナみたいなものが表示されるけど、なにこれ?
で、デザイナ上でコントロール配置したら、生成されるコードも中途半端なんだけど。
InitializeComponent()は呼ばれないし、Controls.Add()もしないし、
自分で書けってこと?
283 :
281:04/12/23 15:47:34
284 :
281:04/12/23 16:04:04
>>282 どうしてもWindowsフォームデザイナを使いたければユーザーコントロールを作って
public class UserControl1 : UserControl
{
// 略
}
public class MyTabPage1 : TabPage
{
public UserControl1 userControl1;
public MyTabPage1()
{
userControl1 = new UserControl1();
userControl1.Dock = DockStyle.Fill;
this.Controls.Add(userControl1);
}
}
>>285 サンクス。TabPageの代わりに普通にユーザーコントロール作って
できたコントロールをTabPageに貼り付けるんですね。
それにしても、あの出来損ないのフォームデザイナはなんなんだ。
287 :
281:04/12/23 16:51:27
DataGridViewで単に数字順に並べたいだけなのに
IComparerインタフェースを使わなきゃならないんですか・・・
288 :
281:04/12/23 17:03:33
289 :
デフォルトの名無しさん:04/12/23 18:53:19
有識者の方々、ちょいと御知恵おかしくださいまし
WinXP純正のペイントで直線を選択してドラッグした際の線の処理ってどうやって実現してるんでしょう?
線を引いた画像にDrawImageを使って元画像を貼り付けることによって線を消してたんですが
ペイントのそれと比較するとCPU使用率が比べ物にならんくらい重いんです
BitBlt使っても結果変わらんみたいなんでなんか小技が有るんでしょうか...
290 :
デフォルトの名無しさん:04/12/23 18:58:36
>>289さん
ControlPaint.
で反転矩形とか反転直線が引けますよ。
で、質問なのですが、asp.netで
DataSet.Tables[0]に日付でソートされていないランダムなデータがあるんですが
これをソートしてXMLに書き出す(Dataset.WriteXML())するにはどうしたらいいんでしょうか?
DataViewを使えば何とかなりそうな気がするんですが使い方がわかりません…
291 :
289:04/12/23 19:45:37
>>290 返答ありがとうございます
すみません、289では書いてませんでしたが変転させずに実現したいんです。
んでDrawImageとか使ったんですが重いなっと...
もうちっと調べてみます
>>290 データベースから引っ張ってくる時にソートする。
DataTable.Clone、DataTable.Select(string, string)、DataTable.ImportRow
辺りかなぁ。
DataView dv = getData();
DataTable dt = new DataTable();
dt = dv.Table.Clone();
this.dataSet2.Tables.Add(dt);
dataSet2.WriteXML()
でいけました。
ソートはgetDataでやってます。
ありがとうございました。
ぐはっ 別のファイル見てた…
>>294 のコードだとdtに何にも入って無かったです…
296 :
デフォルトの名無しさん:04/12/23 22:55:16
ただ今UDPで非同期通信を行っております(受信)。
開始と終了がボタンイベントで行うようにしております。
開始時に、Socket.BeginReceiveFromメソッドをスレッドでまわして使用して、
コールバックにIAsyncResultとしてソケットを渡してます。
しかし、終了時にThread.AbortとSocket.Closeを行うと、
コールバックに入ってしまい、Socket.EndReceiveFromメソッドで、
ソケットが破棄されているためアクセスできないと怒られます。
終了時の処理はどのように行えばよろしいのでしょうか?
ご教授お願いします。
メソッド呼び出しでオブジェクト引数のときにNULL渡す方法がわからんです・・・
おまいの質問がわからん。
null渡すと変換で金と文句言われます。・・・
P/Invoke(DllImport)の話と見たが、関数定義ぐらい書け。
>>296 よくわからんが、
Socket.Shutdownは?
>コールバックにIAsyncResultとしてソケットを渡してます。
IAsyncResult.AsyncStateにソケット入れてるということか?
Socket.EndReceiveFromする時に例外処理すればいいんでないかい?
まっよくわからん
302 :
デフォルトの名無しさん:04/12/24 19:44:28
hogehoge = fuga();
sum1 += hogehoge;
sum2 += hogehoge;
これを
sum1 += sum2 += fuga();
のようにかけないんでしょうか?
>>296 Closeした後はエラーになって構わないと思う。catchしておけばOK。
ただし、Thread.Abort なんてものを呼び出すコードは殆どの場合設計ミスなので、そっちを気にするべき。
そもそもBeginReceiveFrom使うならスレッドはいらない。
>>302 a += b += c; は、a = a + (b = b + c); と等価ですので、
意味が違ってしまいます。
それだとsum1の値がおかしくなっちゃうな。
sum1 = sum1 + (sum2 + hogehoge);
fuga()に作用がなく同じ値を返すことが保証されない限りhogehogeは使ったほうが自然。
不自然でよければこんなかんじか。-sum2を前に持ってくるのがポイント
sum1 += -sum2 + (sum2 += fuga());
306 :
デフォルトの名無しさん:04/12/24 20:24:21
へー
>>305 C# って加算演算子の左右の評価順序(結合順序じゃなくて)が定義されてたっけ?
優先順位が同じなら左から。
a + b + c == (a + b) + c
>>307 MSDNの言語仕様の項(7.2, 7.2.1)には次の記述がありますね。
>代入演算子を除くすべての二項演算子の結合規則は左から右です。
.NETですから処理系依存になりそうなことをすれば、執拗に警告やエラーを
出してくれますから、コンパイルが通って普通に動けば大丈夫だと思います。
ときどきやりすぎでないかいと思うくらいです。
>>309 わざわざ結合規則じゃなくて、と書いたのに・・・書いたのに・・・のに・・・
>>310 もう一箇所引用を忘れてた。7.2の方に例が出てますよ。
>式における演算子の評価順序は、演算子の "優先順位" と "結合規則" によって決まります
もちろん評価も左から。
-sum2の値をまずスタックに積んで、それからその後の計算にとりかかるんだから。
>>311 なるほど。7.2.1に詳しく出てますね。日本語版見てあまりの怪しさに英語版でも確認。
このあたりの言語仕様は(コンパイラ屋にとっては面白くないものの)使う側にとっては
C/C++より解りやすくなってますね。
質問です。
ButtonのButton1を左右に関わらずクリックするとMenuItemのMenuItem1を表示したいんですが、どうすればいいんですか?
検索したんですが、よくわかりませんでした。
MouseDown/Upイベントで良さそうだが、
さてMenuItemのMenuItem1を表示ってどういう挙動なのやら。
>>315 表示するのはどうすればいいんですか?
ContextMenuとか必要ですか?
317 :
デフォルトの名無しさん:04/12/24 22:18:38
リンク先がSystem.Collections.IComparerというのは何かのシャレか?
何が分からないのかつかめない以上、普通に実装しろよと。
というかDataGridView.Sortに使うのはSystem.Collections.IComparerであってSystem.Collections.Generic.IComparer<T>じゃないじゃん。
この二つは別物だぞ。
319 :
317:04/12/24 22:29:41
ち、違うのか・・・?
320 :
317:04/12/24 22:30:18
321 :
317:04/12/24 22:36:30
さ・・さんた・・・・じゃくて・・サンプル、栗。
あ、いや、そうじゃんくて、
もしできたらでいいので、C# DataGridViewのSOrtで
数字を基準に並べ替える方法を教えてください
或いは、その方法が記載されたURLを・・・。
数字を基準に、とは、SOrtの結果が
1,10,2,3,4,5とならないようにすることです、サンタさん。
322 :
317:04/12/24 22:43:19
シーン
=≡= ∧_∧
/ (・∀・ ) <静かにしてます
〆 ┌ | | .∈≡∋
|| γ ⌒ヽヽコノ ||
|| .| |:::|∪〓 .||
./|\人 _.ノノ _||_. /|\
323 :
317:04/12/24 22:45:36
=≡=
/
〆 . .∈≡∋
|| γ ⌒ヽヽコノ ||
|| .| |:::| ..〓 .||
./|\人 _.ノノ _||_. /|\
∧_∧
( ・∀・)
( ∪ ∪
と__)__) 旦
死ねばいいと思うよ
調べてみようかと思う気も失せるな。
テキストエディタに表示している文字を選択した状態で
自作ツールに戻って、ボタンをクリックしたら
1.[Alt]+[Tab]で一つ前のアプリ(テキストエディタ)に戻る。
2.[Ctrl]+[C]で前もって選択してある文字列をコピー。
3.[Alt]+[Tab]で自作ツールに戻る。
と言う動作をしたいのですが、そもそもそんな事って出来るのでしょうか?
ヘルプを見てもKey関係の説明はgetばかりだし、(setで出来るのかな?)
キーの動作と言えばマクロかなと思って、秀丸で試してみましたけどダメでした。
SendKeysクラスで可能だが。
アナクロだなー。
328 :
デフォルトの名無しさん:04/12/24 23:35:23
すいません。基本の基本だと思いますが、ArrayList に保存したオブジェクトを直接いじることってできますか?
例えば、
someObj.Param = true;
ArrayList test = new ArrayList();
test.Add( someObj );
test[ 0 ].Param = false;
ということがやりたいのですが、どうしたらいいでしょう?
330 :
デフォルトの名無しさん:04/12/24 23:39:05
>>329 早速のお返事ありがとうございます。
これは自分で作ったオブジェクトです。
ArrayListにはobject型として格納されるので、
引っ張り出してきた時はobject型として扱われる。
でも実際には作った時の型のインスタンスなんだから、キャストしてしまえばいいのさ。
ちなみにsomeObjが構造体(のインスタンス)の場合、この操作は無効になるんだが、
それが何故かは宿題だ。
332 :
デフォルトの名無しさん:04/12/24 23:49:07
>>331 では、
someObj.Param = true;
ArrayList test = new ArrayList();
test.Add( someObj );
SomeObj tmp = (SomeObj)test[ 0 ];
tmp.Param = false;
という感じですね。
JavaScript などでは直接、
test[ 0 ].Param = false;
という風にして配列に格納したままオブジェクトの値を変更することが出来ます。
C# では、
SomeObj tmp = new SomeObj();
tmp.Param = false;
test[ 0 ] = tmp;
という風に一度引っ張り出して再び格納をする必要があるのですね?
構造体の宿題ですが、
オブジェクト => 参照型
構造体 => 値型
この辺りに答えがありそうですね。
334 :
デフォルトの名無しさん:04/12/25 00:10:26
>
>>333 ありがとうございます。
SomeObj tmp = (SomeObj)test[ 0 ];
tmp.Param = false;
という風に引っ張り出すときに (SomeObj) としてキャストをしているつもりですが
この場所でキャストをするのではないのですか?
わざわざ tmp でワンクッション置かんでも
>>332 > という風に一度引っ張り出して再び格納をする必要があるのですね?
それがclassのインスタンスなら格納し直す必要はない。
インスタンス、つまり実体は一つなんだよ。
やりとりしてるのはインスタンスそのものではなくてその参照なんだ。
本棚に本が並んであって(オブジェクトの実体たち)、
本のリストにそのタイトルが並んでいる(配列とかArrayListとそれに格納されているもの)。
利用者はそのタイトルを指して「GetPage(3)=この本の3ページ目を教えてくれ」とか言うわけだ。
本のリストに直接本がしまわれてる訳じゃない。
> オブジェクト => 参照型
構造体のインスタンスもオブジェクト。
構造体に対するのはクラス。
> SomeObj tmp = (SomeObj)test[ 0 ];
> tmp.Param = false;
> という風に引っ張り出すときに (SomeObj) としてキャストをしているつもりですが
> この場所でキャストをするのではないのですか?
>332の前半コードと後半コードが変な事になってるな。
後半コードはこの場合あんまり関係なくないか(ArrayListと何の関係もなくなってる)。
>>334 (SomeObj)test[ 0 ].Param = false;
>>337 ((SomeObj)test[ 0 ]).Param = false;
あうち
340 :
デフォルトの名無しさん:04/12/25 00:24:01
>>336 名前:デフォルトの名無しさん [sage] 投稿日:04/12/25 00:15:32
>> 本棚に本が並んであって(オブジェクトの実体たち)、
>> 本のリストにそのタイトルが並んでいる(配列とかArrayListとそれに格納されているもの)。
>> 利用者はそのタイトルを指して「GetPage(3)=この本の3ページ目を教えてくれ」とか言うわけだ。
>> 本のリストに直接本がしまわれてる訳じゃない。
今実際に確認できました!
引っ張り出したオブジェクトの値を変えたら、格納されている値も変わりました。
分かりやすい説明感謝です。
>> >332の前半コードと後半コードが変な事になってるな。
>> 後半コードはこの場合あんまり関係なくないか(ArrayListと何の関係もなくなってる)。
orz
341 :
317:04/12/25 00:44:52
放置しないで・・・○rz....
さっきは、まじですまなかった○rz...
頼むから、教えてくれ・・・もう何時間もさまよってます・・・・
死ねばいいと思うよ
調べてみようかと思う気も失せるな。
>>326です。
>>327さんの書き込みをヒントに
System.Windows.Forms.SendKeys.Send("%({TAB})");
System.Windows.Forms.SendKeys.Send("^C");
System.Windows.Forms.SendKeys.Send("%({TAB})");
string mes = (string)Clipboard.GetDataObject().GetData(DataFormats.Text);
MessageBox.Show(mes);
とやってみたのですが、上手くいきません。
クールスイッチが見える時もあるので、Alt+TABは上手くいっているようなのですが、
クリップボードにコピーしてくれません。
何か間違っているのでしょうか?
327を書いてから警告し忘れてた事を思い出した。
やっぱり引っかかったか。
ALT+TABを押してから実際にフォアグラウンドのアプリに切り替わるまで、何十ミリ秒か誤差があるわけ。
SendKeysは「キーボードの入力をシミュレートする」機能だから、
間に時間を挟まないと、切り替わりきる前に次のを実行しちゃうんだ。
だからALT+TABを入力したらそのあとThread.Sleepするなどしてちょっと待つ必要がある。
逆にコピーした後元のアプリに切り替えるのに入力待ちは必要ない。
SendKeysは複数入力も受け付けてくれるので、"^C%{TAB}"なんて書き方もできるぞ。
346 :
デフォルトの名無しさん:04/12/25 14:25:44
TreeViewとRichTextBox用意したForm作ったときに変な描画バグがあって困ってます。
TreeView描画し終わった後に、RichTextBoxを再描画(WinProc)で行うと、
なぜか、TreeViewが暴発し300回ぐらい再描画発生し、すべての項目が真っ白
に表示されてしまいます。なぜですか?
それだけ書かれても検証のしようもないし。
変なコード書いてるからだろ、としか。
>>326です。
>>345さんレスありがとうございます。
>>344のコードの最初のAlt+TABの後に、
System.Threading.Thread.Sleep(1000);
を入れてみたのですが、実行してもコピーしなかったり、
たまにコピーしても何故か一つ前に実行した時に選択した文字列が表示されたり、
よく分からない動作をします。
で、SendKeysをググっていて、SetForegroundWindow()なるものを見つけて、
処理を分ける為とりあえずNotepad限定でやってみようと、見よう見まねで以下のようにやりました。
[DllImport("User32.dll")]
static extern int SetForegroundWindow (IntPtr hWnd);
private void button2_Click(object sender, System.EventArgs e)
{
Process[] pp = Process.GetProcessesByName("Notepad");
IntPtr i = pp[0].MainWindowHandle;
SetForegroundWindow(i);
System.Threading.Thread.Sleep(500);
System.Windows.Forms.SendKeys.Send("^C");
string mes = (string)Clipboard.GetDataObject().GetData(DataFormats.Text);
MessageBox.Show(this,mes);
}
続く
続き
これでは動作は一緒だったので、Ctrl+CをSendからSendWaitに変えてみました。
System.Windows.Forms.SendKeys.SendWait("^C");
すると望み通りの結果が!!
早速、元のコード(
>>344)のSend("^c")をSendWait("^c")に変えてみたのですが、
全くコピーしてくれなくなりました。
ふう・・・。何かいい方法はないでしょうか?
Notepadの代わりにAlt+TABと同じように、一つ前にアクティブだったアプリを
取得出来ればどうにかなるかと思うのですが、そんなこと出来るのでしょうか?
全くの素人です。
Windows上で実際の動きを確認しながら覚えられるような
参考書を探しているのですがなにかオススメはありませんか?
>>348 方針を変えて、クリップボード監視という形にしてみるのも一案だ。
Win32APIに深めに浸かる必要があるのが難点だが。
やる気があるなら、必要な関数などを挙げておこう。
IntPtr SetClipboardViewer(IntPtr hWnd);
bool ChangeClipboardChain(IntPTr hWnd, IntPtr hNewNext);
bool PostMessage(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam);
WM_DRAWCLIPBOARD = 0x308
WM_CHANGECBCHIAN = 0x30D
>>350 まったくの素人だとナニが最初の理解のきっかけになるかわからんからなぁ。
お金に余裕があるなら本屋で適当な入門書を3冊くらい買ってきて枕元に
おいとくと、はたとひらめくことがある。
全くの素人はまずコマンドプロンプトで動きを確認しながら覚えるべきだよな。
だな
355 :
デフォルトの名無しさん:04/12/26 00:34:54
TreeViewでラベル編集されたら更新するイベントが原因だとわかりましたが、
これ以外の正しいラベルの更新処理わかりますか?
下記の書き方だと、編集した後View上のどこか別要素のラベル1つが編集
された場所と同じ値になってしまいます。つまるところどうやって書けばいいの
ですか?
private void treeView1_AfterLabelEdit(object sender, System.Windows.Forms.NodeLabelEditEventArgs e) {
if(e.Label == null){
e.CancelEdit = true;
}else{
e.Node.Text = e.Label;
this.treeNode = treeNode;
this.treeView1.Nodes.Clear();
this.treeView1.Nodes.Add(treeNode);
}
}
リストの任意の位置で挿入、削除をひんぱんに行う場合、
CollectionsのArrayListだとC++のvectorやdequeのように
両端以外での挿入、削除が行われた場合、配列が再構成されるのでしょうか?
それともlistのようにリンクを繋ぎ変えるだけなのでしょうか?
ArrayListは内部では配列で管理してるよ。
>>326です。
>>351さんレス有り難うございます。
せっかく.NET Frameworkを勉強しているのにWin32APIなんて・・・
と思って悪あがきをしていて、GetNextWindow()なるものを見つけました。(^^;
またもや見よう見まねで
>>348を元に実装してみたのですが、しかし・・・。
[DllImport("User32.dll")]
public static extern IntPtr GetNextWindow(IntPtr hWnd, UInt32 wCmd);
[DllImport("User32.dll")]
public static extern bool IsWindowVisible(IntPtr hWnd);
private void button1_Click(object sender, System.EventArgs e)
{
IntPtr hd = this.Handle;
do{
hd = GetNextWindow(hd, GW_HWNDNEXT);
}while(hd != IntPtr.Zero && !IsWindowVisible(hd));
SetForegroundWindow(hd);
System.Threading.Thread.Sleep(500);
System.Windows.Forms.SendKeys.SendWait("^C");
mes = (string)Clipboard.GetDataObject().GetData(DataFormats.Text);
MessageBox.Show(this,mes);
}
とやってみたのですが、
「名前'GW_HWNDNEXT'はクラスまたは名前空間'TestProgram.Form1'に存在しません。」
とでます。Webやヘルプをみても間違っていないと思うのですが・・・。
試しにGW_HWNDNEXTの所に整数を直接入れるとエラーは出ないので、
何かしら初期値があるのかといろいろ調べてみたのですが、
どこにもそのような記述はなく、何が原因かさっぱりです。
どこが悪いのでしょうか?(改行規制対策で見にくいかもですm(_"_)m)
>>358 GetNextWindow() はWin32 APIだと思うのだが違うのか?
> 「名前'GW_HWNDNEXT'はクラスまたは名前空間'TestProgram.Form1'に存在しません。」
> とでます。Webやヘルプをみても間違っていないと思うのですが・・・。
間違っている。
MSDNはC/C++を対象にかかれていおりこれらの言語には
windows.h(またはそれが include するファイル)に GW_HWNDNEXT が定義されている。
C#から利用する場合はこれらの定義を調べて該当する値を直接入れなくてはいけない。
>>326 gu
ろーばるほっときーでふっくしちゃだめなの?
グローバル
何回もすいません。
>>326です。
最初に訂正です。
>>358ですと、GetNextWindow()じゃなくて、GetWindow()ですね。
>>359さん。
> GetNextWindow() はWin32 APIだと思うのだが違うのか?
結局Win32APIかい!と文末の顔文字で察してください。
>C#から利用する場合はこれらの定義を調べて該当する値を直接入れなくてはいけない。
これをヒントにWebで調べて「2」と言う数字でやってみたところ、
見事!上手くいきました!!
356で書いた「整数を直接入れる」と言う時に「2」は試したんですけど、
希望通りに動かなかったんですよね・・・今となっては謎ですが。
>グリーバルホットキーでフック
これまたなにやら難しそうですね。とりあえず今回は解決したので、
次に問題にぶち当たった時のために、覚えておきます。
てことで、一応解決しました。レスをくれた方々、有り難うございました。
363 :
デフォルトの名無しさん:04/12/26 14:26:24
試しに2005入れてみたのですが、
DataGridViewの使いかたがよくわかりません。
Compare?というか<T>とか、そこらへん
がバージョンアップしたみたいで・・・
過去レス読みましたが、317さん誤爆してるし・・・和良。
おながいします。
ありがとうございます
366 :
363:04/12/26 16:57:32
317==363にしか見えないが。
DataGridView.SortとIComparer<T>は関係ないと言っている。
368 :
363:04/12/26 17:02:38
か、関係ないんすか?
369 :
363:04/12/26 17:03:23
犯人「サンプルがほしいなら、マルペケ銀行に300万振り込め」
363「あいあいさー!!」
370 :
デフォルトの名無しさん:04/12/26 21:19:22
通りがかりのものですが、
>>363さん、
僕もそれ以前はまったことありますよ。
結局わからずじまいでしたが・・・
371 :
デフォルトの名無しさん:04/12/26 22:32:24
俺も俺も。
372 :
デフォルトの名無しさん:04/12/26 22:52:59
373 :
デフォルトの名無しさん:04/12/26 23:32:11
>>363よいつもここで馬鹿な質問する
俺ですら解ることだぞ?勉強不足じゃないか?
C++本のテンプレートの章じっくり読んでからだな。
質問です。
WebClientでプロキシは使えないんでしょうか?
>>375 GlobalProxySelection
ありがとう!
378 :
デフォルトの名無しさん:04/12/27 00:07:47
WebClient myWebClient = new WebClient();
myWebClient.Headers.Add("Range: bytes=1000-");
でも
myWebClient.Headers.Add("Range"," bytes=1000-");
でも
クラッシュするよ
たすけてちょんまげ
素直にWebRequest/HttpWebRequestつかっとけ。
ドキュメント読んだら、
#define ABC 300
みたいな使い方はC#では出来ないようなのですが、
各クラスから頻繁にABCを参照したい場合、C#ではどのように解決するのが
最もスマートなやり方はないでしょうか。
いくつかやり方を考えてみたのですが。
1.各クラス内にprivate const intで持つ。 → 各クラスごとに持つということで、ABCの中身が変わったとき非効率的。
2.共通クラスを作って、その中で持つ。 → 参照時に毎回、CommonClass.ABCとしなければならないので面倒。
各種定数を集めたクラスみたいなあり得ない構成は無しだぞ。
へぇ。俺の場合、クラス作って、中にstaticで「定数」書いて、
(定数というか、変更されたら困るんで、getだけのプロパティにする)、
使うたびに、CommonClass.VERSIONみたいにやってるけど?
どうやったらいいのか教えろよ。
CommonClass
{
public static string VERSION { get { return "5.20"; } }
}
みたいにやっている。
ListViewとListBoxはどのような使い分けになってるのでしょうか?
また、foreach(ListViewItem li foreach ListViewItems)
のような方法は、ListBoxを使ってやる場合どのようにするのが良いのでしょうか?
お願いします。
すいません↑
foreach(ListViewItem li in ListView1.Items)
の間違いでした。また、
ListView1.Items[2].Textの様な、要素へのアクセス法は
ListBoxではListBox1.Items[2].ToString()の様にやるしかないのでしょうか?
>>383 382は
class Teisuu {
public static readonly string Version;
public static readonly BindingFlags AllAccess;
public const double PI;
}
みたいななんでもかんでも定数を入れてしまうような非オブジェクト指向的クラスを指してる。
定数もそれに相応しいクラスに入れましょうってこと。
>>385 foreach (object obj in listBox1.Items) {...}
でいいんじゃないか。
アイテムに入れるものの型が決まってるなら
foreach (int num in listBox1.Items) {...}
とかでもいいけど。
> ListView1.Items[2].Textの様な、要素へのアクセス法は
> ListBoxではListBox1.Items[2].ToString()の様にやるしかないのでしょうか?
ListViewと違ってなんでも入れられるのがListBoxな以上、当然。
stringを入れるのならキャストだけで良いけど。
>>386 >みたいななんでもかんでも定数を入れてしまうような非オブジェクト指向的クラスを指してる。
>定数もそれに相応しいクラスに入れましょうってこと。
趣旨が分かりました。了解です。
>>386 なるほどです。
ListBoxは型制限なくがつがつ使う様ですね!
どうもありがとうございます。
389 :
デフォルトの名無しさん:04/12/27 14:48:27
ある拡張子を独自アプリに自動的に関連付けさせるにはどうしたらいいのですか?
エクスプローラの「フォルダオプション」-「ファイルの種類」で関連付けをしていますが
これをC#で操作したいのです。
インストーラ使うか、自分でレジストリを操作するか。
392 :
デフォルトの名無しさん:04/12/27 15:27:43
C#でPixiaやPictBearレベルのペイントソフトを作ろうとしています。
参考になるサイトや本を知っている方がいましたら教えてください。
よろしくお願いします。
Paint.NETとか言ってみる
stringを扱う時にヌルポチェックしないで、それに時間を費やすのがもったいないからから
予め空文字いれてくれとか言ってる人間を最高にバカにできるいい言葉ないですか?
.NETじゃヌルリだよバーカ
Windows Forms の テキストボックスで ReadOnly = true とした
コントロールの背景色は必ず SystemColors.Control となる、というのは
間違いないでしょうか?
今、テキストボックスから派生したコントロールを作っているのですが
ReadOnly のコントロールの背景色が何になるのかわからなくて。。。
よろしくお願いします。
398 :
373:04/12/27 21:19:47
やべ、久しぶりにDataGridViewの並べ替えカスタマイズやってみたら
うまくいかねー(T_T)
どっかサンプルなかったでしたっけ?
というか ReadOnly = True に設定するとグレー(SystemColors.Control?)
になるんですが、コントロールの BackColor を適当な色に変更すると
ReadOnly = True にしても、グレーにかわりません。
ReadOnly = True の時、グレーになる条件というのはどういったもの
になるんでしょうか?
一度 BackColor = System.Drawing.Color.Red のように変更すると
BackColor = System.Drawing.SystemColors.Window にしても、
その後の ReadOnly = True でもグレーにかわらず困っています。。。
よろしくお願いします。
>>399 そのためのResetBackColor()。
>>400 ありがとうございます。でも System.Windows.Forms.TextBox から
ResetBackColor() はどうやって呼べばいいのでしょうか?
なんとも情けなくて申しわけないのですが、アドバイスお願いします。
へ? 普通にpublicなインスタンスメソッドだけど?
AppendTextを使うノリで使うだけだが?
403 :
363:04/12/27 22:48:01
The great thing about generics is
ジェネリックスのいいところは、
now you can have your cake and eat it to,
どちらの長所をも兼ね備えているところです。
because you can define a List<T> [pronounced: List of T].
Tのリストを新たに定義できるので。
When you use a List, you can actually say what the List is a List of,
リストを利用の際、そのリストがどんな内容なのかを実際に定義でき、
and have the compiler strongly type check it for you.
コンパイラが人手に代わって監視してくれる。
So that's the immediate benefit.
そんな機能が簡単に手に入るのだ。
404 :
363:04/12/27 22:55:23
>>403 テンプレートで検索しろ。
Objectに無理にデータを放り込んだりしなくてよくなる。
てのを応用してかなりおもしろいことができる。
406 :
363:04/12/27 23:08:06
>>402 すみません。できました。インテリセンスにあらわれなかったので、
メソッドを呼べないと思い込んでしまいました(^^;;
408 :
デフォルトの名無しさん:04/12/28 00:55:36
WM_PAINTとか定数ってWindows.hに定義してあるっていうけど、
7Kbのそのファイル100万回見ましたけどどこにも定義ないのですが
これからもWM_PAINTとは違うものも使う必要になってくるのでどこで
定義したるかご存知のかたよろしくお願いします。
MSDN/ヘルプの該当項目に定義ヘッダが書かれてる。
>>408 Windows.hからさらにincludeしてるのを100万回見れば出てるよ。
findとかgrep系のコマンドくらい覚えろよな。startメニューの検索でもいいぞ。
411 :
デフォルトの名無しさん:04/12/28 05:24:18
Form1にタブコントロール。Form2に"タブの追加"というボタンを用意して、
Form2のボタンが押されるたびにForm1のタブコントロールにタブが追加されるように
するのをモードレス状態で実現するにはどうしたらいいでしょうか?
class Form2 : Form{
//中略
public event EventHandler AddButtonClick;
private void button1_Click(object sender, System.EventArgs e)
{
if(AddButtonClick!=null) AddButtonClick(this, EventArgs.Empty);
}
}
public class Form1 : Form{
//中略
private void Form2を表示(){
Form2 f = new Form2();
f.AddButtonClick += new EventHandler(form2_AddButtonClick);
f.Show();
}
private void form2_AddButtonClick(object sender, EventArgs e){
this.tabControl1.TabPages.Add(new TabPage("たb"));
}
}
webrequestなどで、webから画像を
ダウンロードする前に画像の(縦横の)サイズを知ることは出来ませんか?
ひょっとしてそれはギャグで言っているのか?
>>413 internetexplorerなどで、webから画像を
ダウンロードする前に画像の(縦横の)サイズを知ることは出来ますか?
あれ?
無理すぎもいーとこでしたか。。
internetexplorerで読み込んで、即停止を押し、画像が表示される前に
右クリックでプロパチやると画像が非表示状態でも、
縦横サイズはわかるので、全部読み込む前に
わからないかな?と思ったんですが。。ブヒブヒ
>>412さん
ソースまで書いていただき、ありがとうございました。
_| ̄|○ ペコ
>>416 そりゃ単にHTMLが指定してる画像サイズを表示してるだけじゃないのかね。
>>416 C#とは何の関係もないのでスレ違いだが、
gif画像ファイルの最初の部分(ヘッダ)に、縦横の情報があるだろうから、
それを見たらいい。全部ダウンロードしなくてもヘッダだけダウンロードした
時点でわかるだろ。
あれ。gifとは言ってないのか。jpgなりpngなり、ヘッダ構造は自分でググってください
指定年月の月末日付を取得するにはどうしたらよいでしょう?
2004/12 の月末日付は 2004/12/31, 2005/02 の月末日付は 2005/02/28 のように
末日を取得したいのですが方法がわかりません。
よろしくお願い致します。
>>421 X年Y月の月末を求める場合、
X年Y+1月1日から、−1日すればOK。
年をまたぐ場合注意。
>>421 DateTime.DaysInMonthメソッド
>>423 のやり方でできました。どうもありがとうございました。
このスレにはプロがいるな
426 :
363:04/12/28 22:03:14
<<417
i envy you...○rz...
427 :
363:04/12/28 22:10:25
>>373 いくら僕のことを馬鹿にしてもいいから
頼むからヒント・・・・下さい・・・。
5行で十分ですので、お願いします。
今、得た情報
1.Generics
2.IComparer<T>はどうやら関係ないらしい
3.テンプレート? >405
必死に検索かけてますが、もうお手上げです。
目の下くまが出来てます。画面見すぎて頭がづきづきします。
僕は馬鹿です。でもがんばります! ちょこっとのヒントをお願いします。
質問
DataGridViewでColumnをSortするときに、
数字列が、1,10,11,2,3,4,5となってしまうのを正しく並べ替えたい。
好ましくは、新たにRows.Add(new object[]{a,b,..})で追加した
行を追加と同時にSortされた列の適切な行番号に挿入させたい。
ただし、前記挿入は、別個メソッドを新設し、それを呼び出すことで
実現してもよいし、好ましくはそのような行挿入時の特殊な操作を
明示的にしなくても前記目的を達成できる簡潔な方法・・・キボンヌ marurz...
428 :
デフォルトの名無しさん:04/12/29 00:52:45
グレープシティのコンポーネントでも買えば?悩まないですむよw
>>427 馬鹿にしてるんじゃない、うざがってるんだ。
質問するからじゃない、態度が厨だから。
・IComarerを実装したクラスを定義する。
・Compereメソッドの比較に使われるのはDataGridViewRowインスタンスなので、
これのCellsから対応するセルの値を取得し、比較する。
・CellEndEditイベントでSortを呼ぶ。引数は上で定義したクラスをその場でnewするなり。
ジェネリクスやらIComerer<T>やらは一切関係ない。
IComperer.Compereの実装が分からないと言うのなら出直せ。
430 :
デフォルトの名無しさん:04/12/29 01:54:52
Tablet PC Platform SDKの InkCollector についてです。
Form1にPictureBox1とPictureBox2を用意してインクを下のように宣言して、PictureBox1に実装しています。
InkCollector myInk = new InkCollector(pictureBox1);
実現したいことは、Form1にボタンを用意して、これを押すとPictureBox1には入力不可になり、PictureBox2が入力可能
になるようにすることです。ここで躓いているのが、ボタンを押すと、myInkのハンドルをPictureBox1からPictureBox2に変換する
という方法です。ハンドル先を変える手段を知っている方がいましたら、教えてください。
よろしくお願いします。
>>427 public Form1()
{
InitializeComponent();
dataGridView1.SortCompare +=
new DataGridViewSortCompareEventHandler(dataGridView1_SortCompare);
}
void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e)
{
if (e.CellValue1 == null || e.CellValue2 == null)
return;
int i, j;
string str1, str2;
str1 = e.CellValue1.ToString();
str2 = e.CellValue2.ToString();
if (int.TryParse(str1, out i)
&& int.TryParse(str2, out j))
{
e.SortResult = i - j;
}
else
{
e.SortResult = String.CompareOrdinal(str1, str2);
}
}
ListViewのViewプロパティをListにした場合
項目が多くなると、横スクロールバーが現れるのですが、
これを縦方向スクロールに変えるにはどうすればよいでしょう?
>>433 無理ぽ。
そういえばView.Listなので縦スクロールってのは見ないよなぁ。
がぃ〜ん
どうもありがとうございます。
ListBoxにしますです。
ListBoxだと結局ListView(View.Details)のヘッダ一つと変わらなくなる気がする。
detailにした場合上側に項目名の帯?
が出来て邪魔くさいと思ったのです。
帯が消せるならバッチグーですが。
438 :
427:04/12/29 17:54:25
神様って、やっぱりいるんだなって、
ふと、思ったよ。 d
439 :
427:04/12/29 20:40:21
万事、うまくいっちゃったよ。
まじ、ありがとね、グスン。
440 :
427:04/12/29 20:49:09
>>431さんのプルサンでうまくいきますた。
int.TryParseですね。なるほど。
で、objectをstringにしてからintにするのですね。しヴい。
>>429さん
>・IComarerを実装したクラスを定義する。
431さんの手法とどのような点が異なるのですか?
またそれに伴なうメリットとデメリットはどのような点でしょうか。
>・Compereメソッドの比較に使われるのはDataGridViewRowインスタンスなので、
> これのCellsから対応するセルの値を取得し、比較する。
SortComparerの引数がDataGridViewRowを実態とする[ e ]であって、
e.CellValue1が「対応するセルの値」となるわけですか?
>・CellEndEditイベントでSortを呼ぶ。引数は上で定義したクラスをその場でnewするなり。
CellEndEditは、new object[]{a,b,..}をRows.Addしたときに発生するイベントですね。
そのなかに、mydatagridview.Sort();と書いておけばいいのですね。
>ジェネリクスやらIComerer<T>やらは一切関係ない。
○rz...
>IComperer.Compereの実装が分からないと言うのなら出直せ。
mydatagridviewのパブリックメソッドにSortComparerというのがプロパティウィンドウに
あったのでダブルクリックして該メソッドを追加しただけですが、
以上の工程が、「実装」にあたる、と考えても間違っていませんか?
以上、誤解等ございましたら、ご指摘いただきますよう、お願い致します。
441 :
デフォルトの名無しさん:04/12/29 20:55:51
442 :
デフォルトの名無しさん:04/12/29 22:04:08
C#でthread勉強していて疑問に思ったのですが、
どうもプログラムXで、thread起動させ(これをAとする)、フォームを終了すると、
タスクマネージャで見てもXは起動したままなんですね。
多分スレッドAの性でなにかなっているんだと予想しましたが、
フォームの×を押した時にちゃんと終了させるにはどうしたらよいのですか?
Thread.IsBackground
>>442 UIスレッドの終了を検知してAを終了するか
AのThread.IsBackgroundをtrue
445 :
デフォルトの名無しさん:04/12/29 22:16:54
あるクラスがあって、そこに外部から Hoge.Command += "delete";
みたいにコマンドを追加していって
あるクラスはそのコマンドを読み取って実行…という感じにしたいです。
STDINからだったらConsole.ReadLineつかえばいいんだけど、
これをSTDINからじゃなくてあるクラスから行ないたいです
そうか、がんばれ。
「標準入力からじゃなくてコンソールから」とか、
「標準入力からじゃなくてファイルから」なら分かるが、
標準入力からじゃなくてあるクラスから、ってのがよく分からんのでもっと詳しく。
448 :
535:04/12/29 22:53:12
皆さんは、ListViewクラス等で呼ばれているWin32APIがどれか
などをMSDNを掘って調べているのですか?
Splitter にて、画面を上下に分割する Windows.Form を作成しました。
Splitter より上はデザイン時に表示されているサイズを最大としてそれ以上に
広がらないようにしたかった為 Splitter.MinExtra を調整すればいいのかな
思い、Form の SizeChangeed にて、
this.Splitter1.MinExtra =
this.ClientSize.Height -
this.statusBar1.Height -
this.panelUpSide.Height -
((this.Splitter1.Size.Height +1) * 2);
という計算式を入れたのですが、どうもうまいくいきません。
splitter より上の部分が常に同じ位置までしか広がらないようにしたいのです
がどのようにすべきでしょうか?
教えて頂けたら幸いです。よろしくお願いします。
>>450 どう解決したか書かないヤツはホントのスレ汚し。
csファイルをダブルクリックして
その状態でコンパイルすることは出来ないですか?
プロジェクトとかではなくテスト用にcsファイル単体に記述してチェックしたいのですが
454 :
デフォルトの名無しさん:04/12/30 12:07:12
TextBoxにファイルを表示するとき
一行ずつAppendTextするしかないのでしょうか?
Textに代入すればいい。
そもそもAppendTextが一行ずつに限定というわけでもないな。
改行が自動的に追加されるみたいな機能があるわけでも無し。
あ、拡張子の関連付けではなく(それはVSインスト時にされてました)
csファイルをダブルクリックで開くと
上のツールバーのDEGUGとかがないため
コンパイル出来ないので困っていました。
スレ違いぽいのでVC#スレに行ってきます!
Control の Focus() と Select()
ってなにがちがうの?
459 :
デフォルトの名無しさん:04/12/30 13:49:44
string hoge = "こんにちは";
とソースに書いた場合、標準で「こんにちは」はUTF8のエンコードになっていると思いますが、
string hogeにshift jisの「こんにちは」を代入するにはどうしたらいいですか?
System.StringはUnicode(UTF-16)で保持されてる。
ソース上の文字コードとは何の関係もない。
実行環境がバイト配列を見てこれのエンコーディングが何か一々判断しなきゃいけないなんて馬鹿馬鹿しい事はない。
ドキュメント読んだら分かると思うがstring型はユニコードを格納するものなので
他のコードは入らない。何をやりたいかをもっと詳しく書けば答えられると思うが。
462 :
デフォルトの名無しさん:04/12/30 14:18:38
とあるライブラリを使っているんだけど、hogeLib.Send(string message);となっていたのだけど、
Sendする対象がsjisで受付しているのでmessageのエンコードをsjisにしたかったのですが、
無理ですか…。
ためしに\x82\xa4と「う」をsjisの文字コード直接かいたら上手くいったけど、
二バイト目が[\x5c]だったりしたら使えないだろうし、
自動変換するのも大変だろうし…と思ったのです。
とあるライブラリを使うのを諦めるしかないんですかね?
DllImport属性かStructLayout属性あたりにCharSet=CharSet.Ansi
DllImportとかってunmanagedを呼ぶ時ですよね
このライブラリはC#のマネージ関数だから何処に書いていいのか分からないです…
465 :
デフォルトの名無しさん:04/12/30 14:49:08
C#初心者です。
WMIクエリの実行結果を、DataGrid上に表示するプログラムをテスト兼練習で作成しているのですが、
ManagementObjectCollectionを上手にDataGridへセットする方法がよくわかりません。
どなたか教えてはいただけないでしょうか?
よろしくお願いします。
そのマネージ関数とやらをどうコーディングしてるのかすごく気になるのだが。
Encoding.Unicode.GetString(Encoding.GetEncoding("shift_jis").GetBytes(str));
一応こういうコードでShift_jisのバイト列をUTF-16で解釈した文字列を取得できる。
1バイト文字を奇数個含んだ文字列の場合、最後の1バイトは切り捨てられるが。
受け取る側もこの逆操作をする必要があるわけで、あり得ないよなぁ。
>>465 どんなのを想定してるのか分からないから、取りあえず。
自前でDataTableに突っ込んでいく。
>>462 引数にstring型を指定しながらShiftJISで受け取るマネージ関数のライブラリって、いったいどんなライブラリだそれ。
イカれてるとしか思えない。
469 :
デフォルトの名無しさん:04/12/30 15:57:52
Reg.CreateSubKey( @"System\Hogehoge" ).SetValue( "Size", 444 );
とすると普通に REG_DWORD でレジストリに格納されるけど、
Reg.CreateSubKey( @"System\Hogehoge" ).SetValue( "Size", 0xE0011431 );
や
Reg.CreateSubKey( @"System\Hogehoge" ).SetValue( "Size", 3758167089 );
とすると REG_SZ で 3758167089 という文字列で格納されてしまいます。
どうしてでしょうか?
>>468 外国製だからそんなの想定していなくて
でもぶちこみたいの
.NETは強制的にUnicodeなんだから外国製とか関係ないし。
472 :
465:04/12/30 16:55:56
>>467 >自前でDataTableに突っ込んでいく。
昨日、foreachで回してDataTableに代入していく、という手法も試したのですが、とてつもなく遅い、重いので使い物になりませんでした。
ManegementObjectSearcher mos = new ManegementObjectSearcher();
mos.Query.QueryString="SELECT * FROM CIM_DIRECOTORY";
(中略)
DataTable dt = new DataTable();
foreach(ManagementObject mo in mos.Get()) {
DataRow dr = dt.NewRow();
foreach(PropertyData pd in mo.Properties) {
dr[pd.Name] = pd.Value;
}
dt.Rows.Add(dr);
}
grdResult.DataSource = dt;
実際のソースとは若干違いますが、流れはこんな感じです
CIM_DIRECTORYを条件なしですべて読み込もうとするのが無茶なのは判っています。
ただ2000行くらいまでは読み込みたいので、それに耐えうる手法がほしいのです。(現状では200行もつらい)
なにかしらスマートな手段があると思うのですが、私はまだC#の基本的な手法もあまり知らないので、何かしらサンプル等いただけると助かります。
よろしくお願いします。
>>472 それが多分最適解で、しかしそもそもWMIはそういう用途に向かない。
475 :
465:04/12/30 19:37:30
>>474 あらら。
ファイルにTSV出力して、エクセルで見る方がいいのかな。
>しかしそもそもWMIはそういう用途に向かない。
そういう用途=ディレクトリやファイルの走査、に向かない?
それはどのような理由からなのでしょうか?
遅いとか、かな?
(ちょっとスレ違いだけど、ご意見いただきたいです)
>>475 WMIは、色々なデータを統一的に扱うためのインターフェイス。
統一的に扱えるから利便性に優れているけれど、その高い汎用性の代わりに機敏性が失われたりする。
C言語(散らばった関数)とC#(扱いやすい代わりに自由にならないメモリなどのトレードオフ)との比較みたいなものか。
> ファイルにTSV出力して、エクセルで見る方がいいのかな。
再帰でDirectoryInfoをArrayListに詰めていって、
そいつをDataSourceにするとか。
478 :
465:04/12/30 20:27:09
>>477 ありがとうございます
とりあえず、もう少しいろいろやってみます。
Windows.FormsのDatetimePicker で、
Formプロパティを Custom, CustomFormatプロパティを yyyy/MM、
ShowUpDown を False と設定すると、
2004/12 の表示で、上下のスピンボタンが表示されます。
ここまでは期待通りの動作なのですが、月にキャレットを移動して(12の部分)
スピンボタンの上下をクリック、もしくは、カーソルの上下で値を増減
させると、
System.ArgumentOutOfRangeException が発生してしまいます。
これを回避する方法を御存知の方がいらっしゃいましたら
教えて頂けないでしょうか?
よろくお願いします。
>>479 こりゃまたひどいバグだねー……。2.0ベータでも直ってないし。
現在の日付部分を書き換えずに新しい年月日で設定しようとするから(2004, 11, 31)とかになって例外が飛ぶと。
/ddまで表示してたら対処される辺り、何というか。
初期設定でValueを現在の年月の1日に設定。
ValueChangedで選択年月の1日に書き換え。
と言うのでどうだろう。
>>480 ありがとうございます。
日付の部分を 1 に強制的にかきかえる事で対応できました。
というかバグか…。MS のサイトにバグデータベースとかないでしょうか?
読み込むDLLがファイル出入力つかうのを制限/つかうのかチェックってできますか?
ゲームのAI部分をDLL化すれば面白いかなと思ったけど
ファイル出入力とかを制限できないと危険なので。
>>482 AppDomainとか役立ちそうですが。
ある配列から探したい配列をサーチできるメソッドはBaseクラスライブラリにないでしょうか
Array.IndexOfだと配列から1変数しか探索できないので
>>482 興味深いのでAppDomainによる制限を書いてみた。
//プラグイン用の抽象クラス。AppDomainを使う場合MarshalByRefObjectから継承する必要がある。
namespace Plugins {
public abstract class Plugin : MarshalByRefObject {
public abstract void FileRead(string filename);
}
}
//プラグイン。PluginInstance.dll
namespace Plugins {
public class PluginInstance : Plugin {
public override void FileRead(string filename) {
System.Console.WriteLine(new System.IO.StreamReader(filename).ReadLine());
}
}
}
//プラグインのロードと実行
System.AppDomain domain = System.AppDomain.CreateDomain("Plugins");
System.Security.Policy.PolicyLevel polLevel = System.Security.Policy.PolicyLevel.CreateAppDomainLevel();
//原則無許可としてパーミッションセットを作成
System.Security.PermissionSet permSet = new System.Security.PermissionSet(System.Security.Permissions.PermissionState.None);
//実行を許可
permSet.AddPermission(new System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityPermissionFlag.Execution));
//ファイルアクセスを許可する場合はコメントをはずす
//permSet.AddPermission(new System.Security.Permissions.FileIOPermission(System.Security.Permissions.PermissionState.Unrestricted));
polLevel.RootCodeGroup.PolicyStatement = new System.Security.Policy.PolicyStatement(permSet);
domain.SetAppDomainPolicy(polLevel);
Plugins.Plugin p = domain.CreateInstanceFromAndUnwrap("PluginInstance.dll", "Plugins.PluginInstance") as Plugins.Plugin;
try {
p.FileRead("test.txt");
}
catch (System.Security.SecurityException ex) {
System.Console.WriteLine("SecurityException : {0}", ex.Message);
}
//ドメインごとアセンブリをアンロード
AppDomain.Unload(domain);
ただ、作成したプラグインのインスタンスは別のアプリケーションドメインに作られるから、
呼ぶたびにドメイン間通信が行われてパフォーマンスがかなり落ちる。
メンバを頻繁に呼ぶのはやめて、大きな仕事をまとめてやらせるべきだろう。
>>482みたいな制限をテラリウムが導入してたな。
ほー、勉強になるな。
高度な話の中で低レベルな質問なんだが、
Bitmapクラスの中身をリセット(newした状態に)したい場合はどうればよい?
毎回newしてたらリソース喰いまくるかGC発動しまくりだと思うんだ。
背景色で塗りつぶすと透過しないしさ。
>>489 いまいち何をしたいのか分からないのだが。
元絵をCloneして取っておくとか?
元絵の再取得が難しい(ネットから取得したとか)ならともかく、そうでないならnewを気にする必要もないと思うけど。
それよりも使い終わったBitmapをDisposeするのが重要。
Image/Bitmapの場合DisposeすればGCと関係なくメモリを解放するようだし。
491 :
デフォルトの名無しさん:05/01/01 15:18:18
コンパイルされた日付を実行ファイルが表示するにはどうしたらいいでしょうか?
……ファイルの更新日時?
>>489 >背景色で塗りつぶすと透過しないしさ。
?透過させたいんなら透過色(Color.Transparentとか)で塗りつぶせよ。
494 :
デフォルトの名無しさん:05/01/01 16:58:09
>>492 そうだよカス
GCCにはあるんだよ素人はだまってママのおっぱい吸ってな
>>491=494?
キれてる意味はわかりませんけど。
using System;
using System.IO;
using System.Reflection;
class Test
{
public static void Main()
{
Assembly asm = Assembly.GetAssembly(typeof(Test));
FileInfo info = new FileInfo(asm.Location);
Console.WriteLine(info.LastAccessTime);
}
}
こんな感じのことをやりたいのだろうか。
GCCではどんな感じになる/させているのか言っておくと
誰かがきちんと答えてくれる予感。
失礼極まりないな
親パネルの端っこに子パネルを貼り付けて、
子パネル上にマウスが入った場合も
親パネルのMouseEnter、MouseLeaveイベント処理をさせたいのですが、
この場合どうすれば良いのでしょうか?
単純に、子パネルに出入りした場合、親パネルのMouseEnter,Leaveメソッドを呼ぶと
子パネル上から親パネル上にマウスが移動した場合
親パネルから子パネル上にマウスが移動した場合
無駄な処理が増えてしまいます。
(子パネル(Label)は文字のみ表示させて、
文字の表示以外は、子パネルを完全に無視して考えたいのです。)
よろしくお願いします。
「そのパネル上にマウスがあるかどうか」のフラグ変数を作れば?
>>497 そういうことを透過的にやるフレーム作りなよ。
キー処理とかマウスとかフォーカスとかアクティブとか
作れば後が楽
>>495 それですぅうううううううううううううう!
ありがとう。大好き
>>498-499 やっぱり単純に再現できるプロパティやらはないのですね。
初心者ッ子なもので、いろいろwebを探してみたいと思います。
どうもありがとうです。
>>494 「GCCにはある」という発言がカスぐあい露呈している。
素直に__TIME__,__DATE__マクロがないのか聞けや。
あるフォームから、別のフォームをモーダルで表示し、そのフォーム上で
ダブルクリックをするとフォームを閉じ呼び出し元に制御を戻します。
その時ダブルクリックされた位置の、呼出し元フォームのコントロールで
MouseUp イベントが発生してしまいます。
この MouseUp イベントを発生させないようにする方法があれば
アドバイス頂けないでしょうか?
504 :
デフォルトの名無しさん:05/01/02 01:10:44
一つのフォームにテキストボックスがいっぱいありまして、どれかにフォーカスがあります。
これを強制的にフォーカスを外したいのですが、一つ一つのテキストボックスの .Focused を
見ていくしかないでしょうか?
505 :
デフォルトの名無しさん:05/01/02 01:18:27
>>504 単純ですが解決しました。
自分のフォームにフォーカスをあてました。
>>503 それは多分、元フォームからダイアログを開けるためのマウスクリックの分のMouseUpだと思う。
//メニューからダイアログを開けたら発生しないはず。
元フォーム側のダイアログを開ける処理をMouseUpで書くか、あとはフラグ立てるか。
ColorやBrushesにTransparentがあるとは知らなんだ。
だが透過色で塗り潰しても描画内容はリセットされなかったよ(´・ω・`)
fieldSurface.Dispose();
fieldSurface = new Bitmap(640, 480);
Graphics g = Graphics.FromImage(fieldSurface);
newとDisposeを使えばこれで意図した動作はしてくれるんだ。
ただ再描画する度にnewするのが気持ち悪くてしょうがない。
Disposeってどこまで信用できるのだろうか?
あるディレクトリがシステムディレクトリ
(RecyclerやSystem Volume Informationフォルダなど)
かどうかを調べるにはどうすれば良いんでしょう?
System.Environment.SpecialFoloderで特殊フォルダーは調べられますが、
ひとつひとつこれと同じかどうかをチェックしなければいけないのですか?
509 :
デフォルトの名無しさん:05/01/02 15:38:39
ショートカットファイルの読込を行えるWSHをC#で読むにはどの様にしたらいいのですか?
.lnkを読み込んで実体ファイルパスを知りたいのです。
>>507 ん?
using(Graphics g = Graphics.FromImage(fieldSurface)) {
g.Clear(Color.Transparent);
}
で駄目ってこと?
現在,ネットワーク越しにファイルを転送するソフトを作っております.
で質問なのですがー
Explorer とかでファイルをコピーする時に,
プログレスバーの上に紙が左から右へ移動する絵が出ますが,
あーいうの(ていうか,可能ならアレそのもの)を簡単に実装する方法はありますか?
何か参照設定して貼るだけーとかだと楽でいいなーと思ったのですが,
自分でビットマップをいちいち描画しなきゃならないでしょうか……
自分でも色々検索したりしたのですが,いかんせん,
アレが何という名称なのかわからないので
どこにもたどり着けませんでしたw
>>511 SysAnimate32 (アニメーション コントロール) でAVIを再生している
>>513 そうだったのかー!
疑問が氷解しました.どうもありがとう!
>>510 Clearメソッドあったのか。FillRectangleしてたよ。orz
Fontを指定した場合の文字列の幅を取得したいのですが、
e.Graphics.MeasureString
(e:PaintEventArgs)
だと、PaintEventArgsが必要となってしまい、
OnPaint関数内とかでしか実行できず
Formを描画する前に文字列の幅を取得することが出来ません。
何かお手軽に文字列の幅を取得するような方法はないですか?
SizeF size = g.MeasureString(str, font);
Graphics.FromHwnd
519 :
デフォルトの名無しさん:05/01/03 17:21:19
MemoryStream ms = new MemoryStream();
DataFormats.Format df = DataFormats.GetFormat("hoge");
ms = (MemoryStream)Clipboard.GetDataObject().GetData(df.Name);
String str = System.Text.Encoding.GetEncoding("Shift_JIS").GetString(ms.ToArray());
という形でテキストベースのデータをstrに読み込んでいるのですが、逆にこのメソッドで自分でセットしたデータを読み込ますには
どうしたらいいですか?
DataFormats.Format myFormat = DataFormats.GetFormat("hoge");
byte [] b = System.Text.Encoding.GetEncoding(932).GetBytes("ほげてすと");
IDataObject myCopyData = new DataObject(myFormat.Name,b);
Clipboard.SetDataObject(myCopyData,true);
としても何も読み込まれません。
GetFormat("hoge")のhogeって何?
DataFormats.Textじゃ駄目なの?
521 :
デフォルトの名無しさん:05/01/03 18:02:08
hogeでいいよ
; .
`
フォーマット名はなんでもいいんですが、生Textではなく
>>619に示した読み込み方で読めないと困るのでその方法を探しているのですが。
>>517-518 どうもありがとうございます!
無事出来ました。
が!
Formのコンストラクタ内で使用したのですが、
Graphics g = this.CreateGraphics();
(Graphics g = Graphics.FromHwnd(this.Handle)も同様)
この一行があるとFormのLoadメソッドが呼ばれなくなってしまいます。
これは何故なのでしょう??
MemoryStreamにデータを書き込んで、
dataObject.SetData(typeof(MemoryStream), memoryStream);
とか。
>>524さん
いけました。 ありがとうございました。
526 :
デフォルトの名無しさん:05/01/03 22:11:19
VisualC# 2005
で、DLLは作れますか?
; .
`
>>526 2003 の時点で DLL 作れた気が。
リソース管理の極論として、
クラス(IDisposable実装)は全てDispose()もしくはusingしる、でいいんか?
Graphicsオブジェクトに描画を行う時、原点は(0, 0)なわけだが、この原点を変更する方法はある?
フォーム作成時に
一瞬アクティブになってから、元のフォームにフォーカスを戻す以外で、
アクティブにしない方法ってありますか?
532 :
デフォルトの名無しさん:05/01/05 02:10:18
フォームのフェードイン、フェードアウトがあると聞いてるのですが、
コントロールのフェードイン、フェードアウトはあるのでしょうか?
あるとしたらその方法を教えてください。よろしくお願いします。
533 :
デフォルトの名無しさん:05/01/05 16:37:02
GraphicPathってのと
普通にg.DrawLineとかで描くのとって何が違うんですか?
FillPathメソッドを使えるというのは大きな利点だな。
あと操作が増えればGraphicsPathで描画する方が効率がよくなる。
>>534さん
GraphicsPathの方が効率良いんですか。 なるほど。
>>535さん
詳細キボンヌ
538 :
C ◆.6Hqkk7dyk :05/01/06 01:38:01
すいません。質問です。お願いします。
C#.netのtextboxで右寄せカンマ区切り数値入力ってどうやって実現するのですか?
ネットを散々、探したし本も大量に買ってきたが何処にも出ていない。
初心者でも出来るC#みたいな本には3桁までの整数しか扱わないサギみたいな
サンプルばかりで何の役にも立たない。(カンマ入力にならないから)
禁断の○○○の技みたいな本にも書いていない。
一言、「C#で実現できるのですか?」
本当に悩んでいます。よろしくお願いします。
さてそれはSystem.Windows.Forms.TextBoxの話なのか、System.Web.UI.WebControls.TextBoxの話なのか。
それは本当にTextBoxでなければいけないのかどうなのか。
>>538 文字が1文字でも変化するたびに発生するイベント無かったっけ?
それを拾ってカンマを手動で埋め込むとか。
StringFormatでいいだべさ
Debug.Assertが失敗したときにでるダイアログの表示を
プログラム実行中に一時的にすべて止めたいのだけれど、
なにかいい方法はないですか?
TraceSwitchクラスは違った。。。
DefaultTraceListenerを継承したらいけました。すんません。m(__)m
545 :
デフォルトの名無しさん:05/01/06 15:39:17
.net のクラス関係をUMLず使って説明してるようなリファレンスに近いものって海外書籍でも(・∀・)イイ!!からありませんかね?
まいかいMSDN引いてるような感じなんだけど、全体いまいち把握してないので・・・
Makefileについて質問です。
自分で調べて思考錯誤しましたが、これ以上前に進めそうにないので
書き込みします。
2つのソースファイルのグループを、異なるオプションでコンパイル
するためのmakefileを作りたいのですが、現状は、make clean の後の
makeは問題ないが、touch等で更新しても、makeしてくれません。
以下、自分のmakefileです。
CC = sh4-linux-gcc
LD = sh4-linux-gcc
DESTNAME = このファイルを最終的に作りたい
OBJS = なんとか.oたくさん
OPTOBJS = なんとか.oたくさん これと上のグループのオプションを変えたい
.SUFFIXES: .c .o
all: ${DESTNAME}
$(DESTNAME):$(OBJS) $(OPTOBJS)
$(LD) -o $@ $(OBJS) $(OPTOBJS)
CFLAGS = -O3 -Wall -DCPU=V830 -DSYSTEM=GHS -DCPU0 -DSIMULATE -c
OPTCFLAGS = -Wall -DCPU=V830 -DSYSTEM=GHS -DCPU0 -DSIMULATE -c
$(OPTOBJS):
$(CC) -o $@ $(OPTCFLAGS) $*.c
$(OBJS):
$(CC) -o $@ $(CFLAGS) $*.c
clean:
rm -f $(DESTNAME) $(OBJS) $(OPTOBJS)
以上です。
よろしくお願いします。
ややスレ違いだな。他を当たれ
板間違えたようです....
場所変えたほうがいいですか?
わかりました。
550 :
デフォルトの名無しさん:05/01/06 16:38:06
C#で
ArrayList array = new ArrayList();
String[] a;
String str = "0,1,2,3,4,5,6,7,8,9";
のときに
array.Add(str.Split(','));とやっても上手くデータが入ってくれません。
a = str.Split(',');の場合は上手くいくんですが、ご教授いただけないでしょうか?
よろしくお願いします。
ArrayList.Addの引数を調べてみよう。
ついでにAddの一つ下に書かれてるだろうメソッドも調べてみよう。
>>538 NumericUpDownコントロールなら
ThousandsSeparatorプロパティーがあった気がする。
Trueにすると1000ごとにカンマ自動挿入
あるクラスのコンストラクタ内で
文字列の幅を求めたいのですが、
コントロールを継承していないクラスの場合
CreateGraphicsが使えず、Graphicsオブジェクトが取得できません。
こういう場合はどのように文字列の幅を取得するのでしょうか?
コンストラクタの引数でコントロールを受け取る。
やはり、文字列の幅求めるだけでも
よそのコントロールを使ってGraphics取得するしかないのですね。
どうもありがとうございます。
そもそも、その「文字列」が何を指しているのかわからんのだけどね。
557 :
デフォルトの名無しさん:05/01/07 01:13:59
DataGridViewにRowDeletingがないので、
RowのDelete『前』の当該RowのValueが取得できません。
myDataGridView.Rows[e.RowIndex].Cells[0].Value.ToString()
は、消された行に繰り上がった行の内容が・・・〇rz...
558 :
デフォルトの名無しさん:05/01/07 03:04:41
>558
だめ
>559
マジですか!?
どんな感じでやるんでしょう??
>>559 ふぉんとですか!?
どんな感じでやるんでしょう??
MSDN調べるとか、自分で出来ることぐらいやったらどうかと
>>558 出版社に掛け合ってみたらどうだ?「もう出来上がっている」って言えば
強いかも。
>>558 乙……っていうか凄いな
出たら見てみたいっスよ
その手があったか。翻訳ってどれぐらい印税入ってくるのか、あまり期待はできないだろうが・・・。
これ訳して欲しいっていうニーズがあったらやってみたいねえ。
>>567 もう訳せてあるみたいだし、とりあえずこの手の出版社 (日本のでも) に掛け合ってみたらどうか
話が通れば出版社側が全部手配してくれるような気も
俺は出たら欲しいかも
>>568 C# Network Programmingの話じゃなくて、一般的に「この本を訳してほしい」って
ニーズがあればやってみる、という意味じゃないか?
>>567 6%とかそのくらい。
これが多いと見るか少ないかと見るかはケース・バイ・ケースでしょうね。
特に原書に誤りが多い時など(以下愚痴続く
571 :
550:05/01/08 20:59:53
>>551 レス遅くなりました。
アドバイス通り調べたところ無事解決できました。
本当にありがとうございます!!!
#あんたサイコーだぜっ!
RichTextBoxって色分け機能がありますよね。
あれを、普通のTextBoxコントロールで実現するにはどうしたらいいんでしょうか?
色分け機能が欲しいなら、自分で描画するしか無いんじゃないの?
RichTextBoxでもrtfコードをいじればそこそこ高速に出来ると思うけど。
やっぱ無理ですか(´・ω・`)
RichTextBox使います。
あと、.NET Frameworkでは、文字コードは全てUTF16ということなんですが、
textBox1.Text = "はげ"; ←で、画面に表示される文字は、文字コードを変更して表示できるんでしょうか?
×文字コードは全てUTF16
○文字列値は全てUTF16
です。
内部文字コードっていうのがよく分からないんです。
>>575 > textBox1.Text = "はげ"; ←で、画面に表示される文字は、文字コードを変更して表示できるんでしょうか?
わけわからん。
どんなコードだろうが文字は文字だろ。
>>575 文字コードを変更して表示されます。(意味わからんがフィーリング)
ソースが SJIS で記述されていても、コンパイル時点で内部的には UTF16 になります。
ただし、画面上などに出力される時点で、別のコードに変換されてるかもしれません。
コンパイル後の中間コードをバイナリエディタで覗いたら、そういう
文字列はユニコードに変換されて格納されているよ。
そういう問題じゃないのかな?どのみちstringに格納されている
文字列を描画してくれるのはWindowsなので、テキストエディタを
作るなどで文字コードに気を配る必要がある場合以外は問題なし。
内部コードがUNICODEになったのってVB4か5のころからだったような・・
DOS窓は今でもShift-JISだから、ファイルI/Oはutf-8デフォルトだけど
Console.Out,Error,InはエンコードがShift-JIS(Default)になってますね。
こういう文字と文字コードと後正規表現とかのフレームワーク上でのクラス関係がのってる本と買ってないかね。
ほかのクラスとかについてもある程度一覧で載ってるのがあれば生産性あがるんだけどな・・・
MSDNとかで調べるのも玉二時間かかるときあるし
キンタマキンタマ〜
チンコチンコ〜
584 :
デフォルトの名無しさん:05/01/09 14:49:38
ArrayListを使って多次元配列を実現したいのですがうまくいきません。
int i, j;
ArrayList arr = new ArrayList();
arr.AddRange(new ArrayList());
for(i = 0 ; i < 10 ; i++)
{
for(j = 0; j <10 ;j++)
{
arr[0][1] = i*j;
}
}
代入するところでエラーが出ているのですが、宣言部分がおかしいのでしょうか?
どなたかご教授頂けないでしょうか。
お願いします。
>>584 さてどこから突っ込もう。
> arr.AddRange(new ArrayList());
例えばint[]をAddRangeするとしよう。
int[0]、int[1]、int[2]と言う風に順番にAddされていくよな。
int[]の代わりにArrayListをAddRangeしたらどうなる?
> arr[0][1] = i*j;
これは
list = arr[0];
list[1] = i * j;
の2つに分解できるわけで、まずArrayListのインデクサは何型を返すとヘルプに書かれてる?
>>585 能書きはいいからさっさと正解書けやボケ。
587 :
584:05/01/09 15:10:51
>>585 586は自分じゃありません、今調べているところですorz..
色々調べましたが何もわかりませんでした。
やっぱり無理なのですね。
boxingって int -> string とか object -> int とかのこと?
どっと…… orz
592 :
584:05/01/09 15:46:15
>>585 おい、そろそろ答え書かんかい。もったいつけよって、本当はわからないんだろ?( ´,_ゝ`)プッ
じゃあジャグ配列から考えてみる。
int[][] arrays = new int[3][];
このarraysにint[]を格納していくわけだが、さてどう格納する?
//後段の問題はまず配列の配列を作れてから。
>590
何となくわかった気がする
>584
ArrayList.AddRange メソッド [C#]
ICollection の要素を ArrayList の末尾に追加します。
ってMSDNに書いてた。
596 :
584:05/01/09 15:57:43
>>594 それは持ってる本に書いてあります。
arrays[0] = new int [5];
arrays[1] = new int [4];
arrays[2] = new int [6];
と言う形みたいです。
>>596 さて、int[][]はint[]をそれぞれ要素に持つ配列だ。
ArrayListは>592の通りobjectをそれぞれ要素に持つ(擬似的な)配列。
ところでC#では全てのクラス・構造体はobjectから派生している。
つまり全てのオブジェクトはobject型である、と極論できる。
これを利用してArrayListはなんでも入る配列になってるわけだ。
int[]も結局はオブジェクトで、つまり上記の通りobject型でもある。
もちろんArrayListもオブジェクトでobject型でもある。
さて、ArrayListにobject型を追加するにはどう書こう?
>597
入れるとき
ArrayList arr = new ArrayList();
ArrayList arr2 = new ArrayList();
arr.Add(new ArrayList());
arr2 = arr[0];
arr2[0] = "The fox is white";
arr2[1] = "The dog is lazy";
出すとき
ArrayList arr3 = arr[0];
string fox = arr3[0].ToString();
string dog = arr3[1].ToString();
じゃないか?
すまんがエラー出たので変更
ArrayList arr = new ArrayList();
ArrayList arr2 = new ArrayList();
arr.Add(new ArrayList());
arr2 = (ArrayList)arr[0];
arr2.Add("The fox is white");
arr2.Add("The dog is lazy");
ArrayList arr3 = (ArrayList)arr[0];
string fox = arr3[0].ToString();
string dog = arr3[1].ToString();
600 :
584:05/01/09 16:29:39
>>597 こんな感じですが
int i, j;
ArrayList arr = new ArrayList();
ArrayList arr2 = new ArrayList();
arr.Add(new ArrayList());
for(i = 1 ; i < 10 ; i++)
{
for(j = 1; j <10 ;j++)
{
arr2 = (ArrayList)arr[i];
arr2.Add(i*j);
}
}
インデックス範囲をこえていますってエラーが出る。
ってやってたら
>>598さんと同じ感じなんですが、合っているのでしょうか。
>>598-600 さて、それなりに正しいけれど理解の方はどうなのかな。
> ArrayList arr = new ArrayList();
> ArrayList arr2 = new ArrayList();
> arr.Add(new ArrayList());
> arr2 = (ArrayList)arr[0];
> arr2.Add("The fox is white");
> arr2.Add("The dog is lazy");
arr2に新しいArrayListを作成。
arrに新しいArrayListを作成して追加。
arr2にarrのインデクス0のオブジェクトをArrayList型として取り出し。
……はじめにarr2に入れたArrayListはどこへ?
> string fox = arr3[0].ToString();
……まあこれも有りかなぁ。普通はキャストするけれど。
> for(i = 1 ; i < 10 ; i++)
> {
> for(j = 1; j <10 ;j++)
> {
> arr2 = (ArrayList)arr[i];
> arr2.Add(i*j);
> }
> }
arrへのAddは一回しかやってないよ?
つまりarrに入ってるArrayListは一つしかないんだけど?
いまさらだが、Box化が知りたかっただけなので見守るだけにする。
と1レス消費。
ぬるぽ
Box化なら入門書嫁
ぼくのおちんちんはBoxingしたままです
いたいのでUnboxingできません
いつも誰にも相手にされないからもったいぶるんだろうな。
童貞?
ウボォーギンです
609 :
584:05/01/09 19:07:14
int i, j;
ArrayList arr = new ArrayList();
ArrayList arr2 = new ArrayList();
ArrayList arr3 = new ArrayList();
for(i = 0 ; i < 10 ; i++)
{
for(j = 0; j < 10 ;j++)
{
arr.Add(new ArrayList());
//object型だからキャスト
arr2 = (ArrayList)arr[i];
//格納
arr2.Add(i*j);
richTextBox1.AppendText(arr2[j] + "\n");
}
}
//取り出すとき配列参照
for(i = 0 ; i < 10 ; i ++)
{
arr3 = (ArrayList)arr[i];
richTextBox1.AppendText(arr3[4] + "\n");
}
どうでしょうか?
一応動作しているようですが、直したほうがいい点あったら教えていただきたいです。
・変数arr2、arr3に最初に代入したArrayListのインスタンスが無駄
・変数のスコープはもっと狭い方がいいかも
・AppendTextのところで「Object + String」をやってる
>610
いい加減教えてやれ。かわいそうになってきたorz
ArrayList arr = new ArrayList();
for(inti = 0 ; i < 10 ; i++)
{
for(int j = 0; j < 10 ;j++)
{
arr.Add(new ArrayList());
ArrayList arr2 = (ArrayList)arr[i];
arr2.Add(i*j);
richTextBox1.AppendText(arr2[j].ToString() + "\n");
}
}
//取り出すとき配列参照
for(int i = 0 ; i < 10 ; i ++)
{
ArrayList arr3 = (ArrayList)arr[i];
richTextBox1.AppendText(arr3[4] + "\n");
}
と、こう思った。
ArrayList arr;
arr = new ArrayList();
for(int i=0; i<10; i++){
arr.Add(new ArrayList());
}
for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
((ArrayList)arr[i]).Add(i*j);
}
}
for(int i=0; i<arr.Count; i++){
for(int j=0; j<a.Count; j++){
int n = (int)((ArrayList)arr[i])[j]
Console.WriteLine("[{0}][{1}] : {2}", i,j,n);
}
}
int[,] i32 = new int[10,10]
for (int i = 0; i < 10; i++){
for (int j = 0; j < 10; j++){
i32[i,j] = i*j;
}
}
Control.Invalidate()を呼び出すとそのコントロールのPaintイベントが発生するわけだが、
複数のスレッドが同時にInvalidate()した場合でも、Paintイベントはスレッドセーフになる?
メッセージキューにPAINTメッセージが順に入るだけなので
同時実行はされないような気がするが。
おぼーん
>>615 Controlのメソッドの呼び出しは、
そのControlを生成したスレッドからしか行えなくなる予感。
619 :
デフォルトの名無しさん:05/01/10 14:54:48
Invalidateとかも呼び出しできないようにするのかな・・・
('A`)マンドクセ
2.0からは例外が上がるってどっかのサイトに書いてあったよ
BeginInvoke覚えるか、スレッドはワーカーと割り切るかだねえ
匿名メソッドが使えるようになってInvokeの手間も随分省けるようになるさ。
Invoke よりデッドロックの方がややこしい、一番つらい所は匿名メソッドでも解決しないので辛い、
Form関係は設計失敗だよ、あれは正直なところ作り直して欲しい。
623 :
デフォルトの名無しさん:05/01/10 22:10:14
デッドロックってどのこといってるんだ?
そこで起こるのは一般のマルチスレッドで起こりうるものじゃないのか?
ただの固定長多次元配列ならそれでいいが、わざわざArrayListを使うんだから可変長を求めてるんだろう。
626 :
デフォルトの名無しさん:05/01/10 22:50:31
PictureBox1 += new EventHandler(form2_Click_Button1);
のようにイベントを追加したあとに、追加したイベントを削除したい時には
どうしたらいいのすか?
PictureBox1 -= new EventHandler(form2_Click_Button1);
//なんかコードが変だけど。
628 :
デフォルトの名無しさん:05/01/10 23:04:51
Object obj=new EventHandler(form2_Click_Button1);
PictureBox1 +=obj;
PictureBox1 -=obj;
こんな感じ。
629 :
デフォルトの名無しさん:05/01/10 23:28:22
「次回は表示しない」のチェックボックスがついたようなメッセージボックスを
時々見ますが、
C#ではそのようなクラスはないですか?
.NETではそんなクラスは無いな。
そんぐらいつくろうよ・・・
あればそれに越したことはないと思ってた次第です。
ありがとうございました。
633 :
626:05/01/11 00:01:09
634 :
584:05/01/11 00:38:06
レス遅くなりました。。
>>624 i,jのfor分は配列に代入する例だったので特に使わない予定です。
わざわざすいません。
>>625 可変の配列を使いたかったです。
たとえるならゲームでPOPする敵って感じです。
敵の数=arr,敵のプロパティ=arr2みたいな風に使おうと思っています。
>>634 > 敵の数=arr,敵のプロパティ=arr2みたいな風に使おうと思っています。
そのりくつは おかしい
敵=Enemy抽象クラスから派生したクラス
出現した敵集団=配列
arr2はDQでいう1グループみたいなもんか。
637 :
584:05/01/11 03:16:31
>>636 おかしいかなぁ?
FFXIみたいに、フィールド上に何体敵がいるかわからない様な状況考えているのですが。
データをArrayに格納してそれをクラスにする予定です。
Arrayで管理するのがおかしいのでしょうか?…
C#でツールを作って、自分ではXPで動作確認したのですが、
MEのユーザーから、リストボックスの表示がおかしいと
報告がきました。
.netのアプリって、meや98ではうまく動かないのでしょうか?
それとも、自分の作り方が悪い?
既にWindows2000が出ていた時期に
98SEやMeを載せて売ってたPCメーカーの罪は重いよな〜
少し価格を上乗せするだけではるかにいいOSが載せられたのに
>>639 2kの時点では仕方なかった。
コンシューマ用のドライバが全然出そろってなかったんだから。
//鶏が先か卵が先かになっちゃうけど。
色々なドライバが2k対応になったのは実質XPが出てからだよ。
MSの戦略ミスも大きいね。
>>638 どうおかしいのか分からない事には何とも言い難い。
641 :
デフォルトの名無しさん:05/01/11 11:05:05
>>639 無理無理。
あの状況で2000一本に絞るにはUIの洗練が足りなかった。
Meの存在がそれを物語ってる。
ども。
xpとmeの違いではなくて、ただのバグでした。
リストボックスに項目がひとつだけの時に表示されないという現象でした。
発生条件が特定できたので、自分で対応できそうです。
>>640 当時の自作板じゃ、2000な香具師も結構いた気がする。
漏れもこんな感じだったし。
Dynabook(98SE)、BIBLO(ME)、DeskPower(ME)、自作(Win2000(組んだのは2001年))
性能/価格は自作最強だと思った。これ以降、デスクトップは全部自作w
>643
そろそろスレ違いだと気付け。
645 :
デフォルトの名無しさん:05/01/11 18:47:37
>>643 趣味でPCやってりゃRC2が出ていこうは当然2000だろ。
サポートを強いられるメーカーPCに入れるOSとしては価格を含めて
問題ありすぎだったというだけ。
関係ないが組立PCを自作って呼ぶのはいまだに違和感がある。
自選PCかな、実質
ケースを選べるのが一番のメリットだったりする
647 :
デフォルトの名無しさん:05/01/11 19:29:22
近頃は、相性とか調べる元気がないので専らショップブランド。
自作の方が安上がりっていう時代もとっくに過ぎたしな。
ショップブランド最高!
でスレ違いなので聞きたいんですが、ちょっとしたプログラム作るときでも
namespaceはちゃんと定義してますか?
使い捨てみたいな奴はついつい面倒で、
--- hoge.cs ---
using xxx
using xxx
class Hoge {
...
}
て感じでゴリゴリ書いてしまうんですが。
最近は相性なんて考える必要もまず無いから自由度だよ自由度。
E-ATXケースで中の取り回しも楽々のHDD5台キャプチャボード2枚さ。
>>648 趣味グラマだけれど。
汎用クラスの場合、自分用の固定名.機能orジャンル(Microsoft.CSharpみたいに)をつける。
アプリの場合、自分用の固定名.アプリ名をつける。
3段以上になる事はまず無いな。
foo(string s)でsがカンマ区切りの4つのデータ以外の形式で渡されたときに
投げる例外ってArgumentExceptionでいいの?
それともMyClassExceptionを定義してそれ投げた方がいいの?
この二つの投げ方の使い分けの基準みたいなのがあったら教えてください。
便乗質問。
あるメソッドを実行する時に、持ってるプロパティが不整合だった場合に投げる例外ってどんなのがいいでしょ?
プロパティの状態が異常だから
InvalidOperationException ではなかろうか。
>>650 ArgumentExceptionで妥当だと思われます。
自前の例外クラスを作るとcatchして例外処理するときに便利だったりしますね。
表現が難しいのですが、ボタンがコンボボックスみたいなのになっている
コントロールというのはどのように実装するのでしょうか?
(Visual Studio の ファイルを開くダイアログの開くのボタンがそのように
なっています)
そのままコントロールが存在すればありがたいのですが、
なければ自分で作ろうかとも考えていまして…。
よろしくお願いします。
>>652 ありがとう。
確かにすごく妥当な解説になってますね。
>オブジェクトの現在の状態に対して無効なメソッド呼び出しが行われた場合にスローされる例外。
グローバルホットキーを設定して、
特定の組み合わせに反応してマウスの各種動作
(左右クリック/ダブルクリック、中クリック/ホイールスクロール)
をさせたいのですが、
(ex: Ctrl+[ を受け取ったときにアクティブなウインドウでホイールスクロール動作をさせたい)
どう調べていいか見当が付かないので
hogehogeでぐぐれ!といったヒントをいただけないでしょうか?
RegisterHotkey
SendInput/mouse_event
Win32APIの海に沈め、と。
ReflectorみたいなのでSystem.Windows.Formsを使用していないもの紹介希望。
Monoでの動作確認があると最高。
C#というんではないんだが、ThreadPriority.Lowestにしてワーカースレッド作ったのにGUIが固まるというのは何なんでしょう
メモリ足りずにページファイルでスレッド全体固まってるのか?
>>659 ファイルI/O(ページファイルへのアクセスを含む)はスレッドの優先順位関係ないですからね。
あとワーカ側でCOM呼び出しを行っている(ライブラリ経由も含む)なら、ワーカ側にもApplication
作ってあげて定期的に DoEvent するべし。
>>659 2000だが2003やXPだと多少スレッド管理まともになるのかね?ページファイルからむとエクスプローラーもかたまるような。
COMのはなしはSTAがらみのときかね?あまりもうCOM触らないので興味本位ですが。
コントロールのデザイン時の属性つにいてもし知っている方がいたら教えてください。
オブジェクト型プロパティーを準備して
[Browsable(false)]
を使ってデザイン時に表示しないようにしています、
これを適当なフォームに放り込むと初期時(InitializeComponent)で null を入れて初期化しようとします。
null を入れられるとちょっと困った事態になるし、初期状態では設定すべきオブジェクトが完成していないので
この段階でデフォルト値として設定するわけにもいかずで、ちょっとこまっています。
プロパティーに一切触らないようにできないでしょうか?
>>659 ワーカースレッドはマジ死ねます、できる限り使わない設計がよかろかと思う、
プログラムの構造としては直感的でなくてかなり嫌だけれど、DoEventを使った再入式がベスト。
理解可能なバグは大量発生するハメになるけれど、理解不能の謎バグはこれなら少なくとも出てこないです。
上にも書いてありますが、ライブラリーの構造がいとも簡単にデッドロックを引き起こすような構造をしている。
.NetFrameworkのワーカースレッドは鬼門です。
>>662 >.NetFrameworkのワーカースレッドは鬼門です。
それは言いすぎじゃないかなぁ。
サーバ側なんかワーカスレッド(スレッドプール)のカタマリになるわけだけど、別段謎バグとかの問題はないし。
メッセージキューに触りにくいので簡単なスレッド間通知がし難いのは感じるけど。
ユーザ定義メッセージのPostとそれのハンドリングはデフォルトで付けといて欲しかった。
(BeginInvokeはそれなりに面倒だし)
>>663 てゆうか、もう疲れたって感じなんで……
アレを使うと何のための作業をしているのか分らなくなってしまう。
>>664 それは設計が悪かったのでは・・・
というのは置いといて、.Net の各種 BeginHogeHoge の非同期処理メソッドって実は壊れた設計ですよね。
async_result = f.BeginXXX(); とかするわけだけど、非同期コールバックが呼ばれる前にこの代入が完了している、
という保証は無いわけで、内部で安心して EndXXX(async_result) できない。
殆ど全ての場合大丈夫だろうし、サンプルでもこの問題は無いことになってるけど、実際にはlock等で代入の完了を
待ち合わせる必要があるはず。out パラメータにして、値がセットされてからコールバックが呼ばれることを保証して
くれればよかったのに・・・
>>665 アプリが小さい内は設計による動作保障は簡単なんですがね、大きくなったらもうお手上げです、
何処で何を起こされているのか全く分らない。
もっとも厳しいのはデバックしても原因不明となってしまい、
ほとんど丸ごと廃棄処分にせざるを得ないといった事態です
で、実際そうなって、こんなもの使わないほうが初期は多少面倒でも最終的には利があると思ってしまいました。
>>662 ShouldSerializePropertyでfalse返す。こんな感じ。
private bool ShouldSerializeMyProperty() { return false; }
private int myProperty;
[Browsable(false)]
public int MyProperty {
get { return this.myProperty; }
set { this.myProperty = value; }
}
静的に値が決められない場合はShouldSerialize使えってMSDNにもかいてあると思う。
>>665 > async_result = f.BeginXXX(); とかするわけだけど、非同期コールバックが呼ばれる前にこの代入が完了している、
> という保証は無いわけで、内部で安心して EndXXX(async_result) できない。
具体的に説明をお願いできます?
>>665 の勘違いだろう。
代入は呼び出し元のスレッドで行われるので、
EndXXX() に移った時点で完了していないわけがない。
>>665 あんた非同期コールバック内で呼び出し元で代入した変数使うのか?
なんのための引数なんだ…
>>670 何が解らないのかわからない。
bool ShouldSerialize[プロパティの名前]()
ってメソッド作って、現在の状態で永続化(つまりコード上での代入処理だ)
が必要な場合にはtrueを返す。いらない場合にはfalseを返す。
デザイナはその結果をもって、代入処理が必要かどうかを判断するってだけだろ。
>>663-672 イベントとか使ってGUIスレッドでの動作保障させるとかってできるんですかね。
ワーカースレッドイベント発行->非同期でかまわないからGUIスレッド側でイベント処理デリゲート起動されるような。
まだGUIスレッド関係精査してないので基本事項なのかもしれませんが・・・
MicrosoftのDigitalPhotoImageって画像ビューワー兼エディタありますが、あの写真の高速表示はなに使ってるんでしょう?
DirectDrawとかでしょうか?それにしてもたくさんのファイルの読み込みも速かったのですがその割にはメモリ使ってないように見えました。
>>665 EndInvokeは完了まで待機するから使えないってことかな。終わったかどうかポーリングしたいなら
IAsyncResult.IsCompletedを使えばよい。ワーカースレッドならThreadPoolを使ったほうが楽では
ないだろうか。戻り通知はイベントで処理。
public class FormXXXXX : System.Windows.Forms.Form {
// いろいろ省略
private void button1_Click(object sender, System.EventArgs e) {
button1.Enabled = false;
ThreadPool.QueueUserWorkItem(new WaitCallback(Worker1), "儲かりまっか");
}
public void Worker1(object arg) { // ここではGUIにアクセスは禁止
string s = (string) arg;
// なにやら重い処理
RetEventArgs retArgs = new RetEventArgs();
retArgs.status = "ぼちぼちでんな";
// スレッドにマーシャリング(投げっぱなし)
this.BeginInvoke(new RetEventHandler(Owari), new object [] { this, retArgs });
}
private void Owari(object sender, RetEventArgs e)
{
TextBox1.Text = e.status;
button1.Enabled = true;
}
private class RetEventArgs : EventArgs { public string status; }
private delegate void RetEventHandler(object sender, RetEventArgs e);
}
>>673 すみません、その説明を見たらますます混乱したのですが、
bool ShouldSerialize[プロパティの名前]()
の
[プロパティの名前]
の部分はどういう意味ですか?
C#でゲームを作ったんですけどexeファイルでは自分のローカルでしかあつかえませんよね。
誰でも出来るようにJavaScriptみたいにhtml上で動かせるようにすることって出来ないのでしょうか?
HTML 上で exe が動かせるようになったらブラクラ作り放題ですな
>>680 動かせるよ、今でもセキュリティー付きで。
>>678 そのまま[プロパティの名前]。
例えば Name プロパティなら ShouldSerializeName だし、
MyProperty1 プロパティなら ShouldSerializeMyProperty1 という具合でしょう。
>>682 ありがとうございます。
例えば「テトリス」でぐぐると、FlashやJavaScriptで作られ、サイト上に埋め込まれたものがたくさんヒットしますが、
このようなことは出来ないのでしょうか?
>>684 現状ではできないのでは無いかと思う(詳しい人よろしく)
実はこれ、ノータッチデプイメントですら、実際やってみるとあまりよろしい物ではなくて……
現状では使えるクラスが殆どないんですよ、これを使うと、DirectXが使えないというのが特に致命的、
まだ取りあえず動かしてみましたって感じです、今すぐならFlash/JavaScriptがよろしいかと。
ロングフォルンにちょっと期待しているのですが、さてさてどうなる事やら。
ASP.NETでもクライアント側の処理はJavaScriptだしな。
ノータッチデプロイメントのDirectXはManagedならそのうちOKになるかな?
>>679 しかしJavaScriptにしたって、結局ローカルにダウンロードして動いてるだけだしな。
サーバーサイドの技術と勘違いしてるのか?
>>687 要するにブラウザのプラグイン的に動作するもの、と言う要件ではないかな。
ノータッチデプロイメントはいかにもexeを実行してますって雰囲気だし。
>>686 多分いけるようになるんじゃないかな、DirectXがGDIの下に入るという事は、
GDIが実行可能になるためにもDirectXは実行可能でないとならないと思うので。
もっともフルスクリーン等の画面のっとり系は、なりすまし実行防止でブロックされると思うけど。
691 :
デフォルトの名無しさん:05/01/13 12:10:10
ぷるるん♥
692 :
デフォルトの名無しさん:05/01/13 12:23:55
C♯初心者(プログラミング自体もPerlしか・・・)です、質問宜しくお願い致します。
ファイルをコピーする速度を測りたくて、タイマーで100m秒ごとに変数を増加させながら、
ファイルのコピーを行って、ファイルのコピーが終わった時点でタイマーを止めて、
かかった時間を割り出したいと思っています。
ボタンをクリック → timer1.Enable = true;
→ スレッド(tjeread1)を開始
ってところまではできたんですが、肝心のタイマーを止められないのです。
public static void thread1()
{
string copy1 = Application.StartupPath.ToString() + "\\" + "test1.bin"; //コピー元
string copy2 = Application.StartupPath.ToString() + "\\" + "test2.bin"; //コピー先
File.Copy(copy1, copy2, true); //コピーする
timer1.Enable = false; //タイマーを止める
}
上のような動きをさせたいのですが、thread1の中からtimer1.Enableをfalseにはできないものなのでしょうか??
諸先輩方、宜しくお願い致します。
System.Windows.Forms.Timerはマルチスレッドでは使わないのが無難。
System.Timers.TimerかSystem.Threading.Timerをつかうべし。
ところでさ、コピー時間を計るだけならわざわざそんなことしなくても
開始直前の時間と終了直後の時間を比較すればいいと思うのだけど。
System.DateTime.Nowを使えば現在の時間が取得できるよ。
確かにノータッチデプロイメントはインターネットゾーンではできることは少ないですね。
イントラゾーンだとわりと使える。アプレットの代替というよりイントラ向きの機能と思います。
個人的にはディスクトップを含むDocuments and Settings以下はイントラゾーン扱いにして
欲しいと思ってるくらいですけどね。
695 :
692:05/01/13 13:09:29
>>693 System.Timers.Timer も
System.Threading.Timer も全然知りませんでした(涙
手元に偶然あったのが古本屋で買ってきたVB6.0用の本だったので・・・
早速ぐぐってみますね
>開始直前の時間と終了直後の時間を比較すればいいと思うのだけど。
。・゚・(ノ∀`)・゚・。
「かかった時間」という先入観で全く思いつきませんでした(苦笑
まったく何というか、自分にはプログラミングの才能のカケラもないみたいです。
それにしても素早いレス本当に有り難う御座います。
もう一つ質問なのですが、
Thread1の中ではtimer1.Enabelと同様に、TextBox1.Textとかから情報を受け取ることができないのでしょうか?
例えば
>>692のソース内の
string copy1 = Application.StartupPath.ToString() + "\\" + "test1.bin"; という箇所を
string copy1 = TextBox1.Text.ToString();
みたいにして、任意のファイルをコピーしたいのですが、timer1.Enabelと同様、エラーが出てしまいます。
(スレの流れを完全に無視した質問失礼します・・・
>>695 > Thread1の中ではtimer1.Enabelと同様に、TextBox1.Textとかから情報を受け取ることができないのでしょうか?
とりあえず読むだけなら深く考える事もなく可能だよ。
> 例えば
>>692のソース内の
> string copy1 = Application.StartupPath.ToString() + "\\" + "test1.bin"; という箇所を
> string copy1 = TextBox1.Text.ToString();
> みたいにして、任意のファイルをコピーしたいのですが、timer1.Enabelと同様、エラーが出てしまいます。
この質問にはstaticと言うものを理解する必要がある。
端的に言ってthread1メソッドからstaticキーワードをはずせば可能になるだろうけど。
もっと基礎を勉強すべきだね。
>>692 System.Windows.Forms.Timerで起動されるイベントはメッセージポンプをもつユーザーインターフェイス
スレッドで動作します。Win32のWM_TIMERを使ってると考えればわかりやすいでしょう。
このためFormや他のGUI関係のコントロールと同じく他のスレッドから操作に制限があるものと思われます。
System.Windows.Forms.Timerは呼び出し元と同じスレッドで動作しますから、呼び出し元のGUIコント
ロールに安全にアクセスできます。その代わり呼び出し元が実行中ならばイベントは保留されます。
またイベント実行中は呼び出し元は保留状態になります。このため時間のかかる処理にはこのTimerは
向きませんし間隔も正確ではありません。
>>676 でスレッドにマーシャリングとありますがこれは原理的にはイベントをメッセージループに乗せて
発行していると推測できます。
698 :
692:05/01/13 15:46:57
>>696 static・・・
慣れないモノですっかり忘れておりました。
一応、ファイルのコピー速度を測るプログラムは皆様のおかげで作ることができたのですが、
外付けHDDに書き込むスピードは13MB/sと普通なのですが、
読み込みのスピードが180MB/sとかとんでもないスピードで表示されてしまうのです。
バグがないかとソースを見つけること小一時間、
ネット中を探し回ること小一時間、
どこにもありません。・゚・(ノ∀`)・゚・。
もしかして自分のHDDは「試作品の次世代HDDがミスで製品に混入してしまった」とかで
読み込みがUSB2.0で200MB/sくらいでるのでは??っと思い、(USB2.0自体80MB/sなのにw)
試しに外付けHDDから手動でコピー速度を測るソフトで作られたファイルを
デスクトップにドラック&ドロップしてみると・・・
コピーにかかった時間→体感0.2秒 (゚∀。)
まさか本当に!?
・・・(頭を冷やして冷静に・・・
アレです、もしかしてHDDキャッシュが有効になってたりして・・・
キタ━━━━(゚∀゚)━━━━!!
無効化→再挑戦→ 「 11.6MB/s 」
なんかヤケに現実的な結果がでてきました、間違いなさそうです。
そこで本題なのですが、VC♯上からディスクのキャッシュを無効化&有効化などは行えるのでしょうか?
毎度毎度申し訳ありませんが宜しくお願い致します。
※それにしても毎秒200MBくらいのスピードがでるHDDは何年後の話だろうw
ウゼー
Environment.TickCount使っとけば良いと思うぞ、精度の要求にもよるが。
真面目に作るならTickCountのオーバーフロー時の対策もいるかな。
701 :
デフォルトの名無しさん:05/01/13 20:36:39
>>698 そこまで早さが出るようになる前に、HDD自体がなくなっていると思う、
なんか10年後には2*2cmのチップに「現在のハードディスクの数万倍の容量」が入る
とかいうの聞いたことあるしw
そうなるとあれだな、速度もメモリー並にあがってるか?
何度も実行してキャッシュされてるだけなんじゃないの?
埋め込まれたリソース
>>684 簡易インストーラのようなものつければいいんじゃないの?
ノータッチデプロイメントの話であるという流れぐらいは読もうよ。
>>703 パスをサーバーのものにしてないというオチじゃねえの?
709 :
デフォルトの名無しさん:05/01/14 21:09:08
フォームのデータバインドの効率的な行い方についてです。
フォームに、テキストボックスやチェックボックスが 40 程あり、今データバインドで別のクラスのプロパティに
バインドしています。これ自体は問題なく使用できてます。
で、お聞きしたいのは、バインドするときにフォームとプロパティを一つ一つ処理していくのは、コードが長く
なってしまい、かっこもわるいです。
そこでみなさんはどうしていますか?何か効率的なやり方はありますか?
710 :
デフォルトの名無しさん:05/01/15 00:52:02
ノータッチデプロイメントの話題が出てるので便乗質問なのです。
インターネットゾーンから起動したとき .NET Security Information
のバルーンが出るのですがイントラゾーンからはでない。コードに制限を
受けてるのはどちらも同じだと思うのですが、どのへんで差が出てるのでしょう?
また、このバルーンを出さなくする方法はありますか?
>>710 コードアクセスセキュリティ
管理ツールの.NETなんちゃらでセキュリティポリシーを変更する。
1つのアプリだけでよければウィザードのアセンブリの信頼で許可を緩くしてあげる。
>>710 LocalIntranetだとUIのWindowまわりに関しては制限はないようなので、
ポップアップが出ないんだろう。
UIPermissionWindow.AllWindowsとかになってるはず。
実際ポップアップの条件は調べてみないとわからないけど。
>>711,
>>712 おっしゃるとおりUIPermissionをいじるとバルーンが出なくなりました。
ただ不特定多数に管理ツールを操作させるわけにも行かないのでバルーンの
件はほっとく事にします。
調べてる途中で妙なことに気づいたのですが、xxxx.exe.configファイルが
ないとバルーンが英語表記になるようです。
中身はこれだけなんですけどね・・
<?xml version="1.0" encoding="utf-8"?>
<configuration>
</configuration>
何もしないウィザードで作っただけの16,384kしかないReleaseビルドしたアプリが実行時に58メガも食ってるのは既出ですか?
一度最小化すれば極端に減るのも既出だな。
おおちいさくなった。
>>715さんくす。
よくわからん挙動だ。
JITするのに何で最初からメモリ食ってるのか。
ちょっとプログラム自体から少し外れる話だけどいいでしょうか。
今、Bitmapクラスなどのリファレンスを探しているんですが、
おすすめなものが何かありますでしょうか。
>>718 やっぱりMSDNしかないんですか。
情報どうも。
ティルダはURIに使える文字だったっけ?
()辺りならまだしも~が使えなくなったら大混乱だと思うよ?
ウィンドウの透明化とアルファぶれんでぃんぐには関係があるのでしょうか?
FormのOpacity で透明化を行い、描画の重ねあわせにアルファブレンドがかかわってると思うのですが、ウィンドウの透明化にアルファブレンドはかかわることはないのでしょうか?
やりたいことはグラデーションのかかった形でのウィンドウの一部透明化です。
>>725 初めの部分のいいたことがよく分からんが、UpdateLayeredWindow()で出来るかもしれない。
>>726 改訂版とはいえ元記事が1997年のだからなぁ。
ざっと読んだけど説得力を感じなかった。
RFC2396ではっきりとURIで扱える記号として定義されてるわけだし、~も十分市民権を得たと思うし。
//しかもノータッチデプロイメントならIE5以上だか要求されるわけで古いRFCのしがらみとも関係ないしねー。
>>727 レスサンクスです。
UpdateLayerdWindow見てみます。
んーと、アルファぶれんでぃんぐで透明値の指定あるけれどそれがウィンドウの透明化に関係できないかということだったんです。
それできれば要らない背景アルファ値透明にしてほかの部分は普通に描画できないかと。
言ってること同じじゃん。
>>730 同じじゃねー世馬鹿。それが同じだと思うならおまいの日本語能力はざるだな
732 :
725:05/01/16 04:41:14
Brock
誤brock
正block
なあなあ、なんで「#」なん?
C「+++」じゃあかんの?
>>737 そこを参考に、
//現在のコードを実行しているAssemblyを取得
System.Reflection.Assembly myAssembly =
System.Reflection.Assembly.GetExecutingAssembly();
//指定されたマニフェストリソースを読み込む
Bitmap myBitmap =
new Bitmap(myAssembly.GetManifestResourceStream("Tetris.Block.bmp"));
//PictureBox1に表示
を「// ブロック用ビットマップ」のあとに挿入してみたのですが、結果は同じでした。
どこに入れればよいのでしょうか?
using ステートメントを使っていて思った事なのだけれど、なんで複数個指定できないんだろう?
いっそこんな感じの文法だったらネストも深くならなくて便利なんだけれど・・・
void func()
{
using MyClass a = new MyClass ;
using MyClass b = new MyClass ;
スコープから抜けるときに Dispose
}
何か理由があるんですかね?
宣言と同時にDisposeを保障するので、自前Dispose指示と違って忘れ物が無くてよいのですが・・・
ついでにこんなのがあるともっと便利。
void func()
{
using MyClass a = new MyClass finally { a.MyDispose() ; }
using MyClass b = new MyClass finally { dokokanoObject.kowasitaYO() ; }
スコープから抜けるときに finally 以下実行
}
とまあ、それはさておき現状でまとめて複数個のオブジェクトを Dispose する便利な方法があったら誰か教えてください。
いかん、C++やってたら勢いでコンストラクタにカッコを忘れている
using (Graphics g = Graphics.FromImage(m_bmp))
using(Brush bra=new SolidBrush(Color.Red))
{
}
こんな感じで
>>742 どうもです、
using(宣言) 文
だったんだ、初めて気付いた。
using( ... ) a = b ;
といった書き方もできるとは。
十分用は足しますがインデントをしない if 文の連続みたいでちょっと気持ち悪いですね。
using (Graphics g = Graphics.FromImage(m_bmp),
Brush bra=new SolidBrush(Color.Red))
{
}
こう書けなかったっけ?
>>744 それができるのは2つの変数の型が同じときだけ。
using(A a = new A(), b = new A())
はできるけど、
using(A a = new A(), B b = new B())
は無理。
自分の力で考えて解決しますた。あなた達は用済みです。
( ´,_ゝ`)プッ
仕方ないので
using (Graphics g = Graphics.FromImage(m_bmp))
using (Brush bra=new SolidBrush(Color.Red))
{
}
こう書く。
749 :
デフォルトの名無しさん:05/01/17 01:37:15
Linkリスト等のTree形式のコレクションクラスってC#にあるのですか?
C#全然まだ解ってないのですが、n分木などを試しに実装してC#の感覚を
つかんでみたいのですが。C++のようにSTLがあればそれを利用します。
LinkedListは.NET2.0でジェネリック型として追加される。
実装調べてないけど ArrayList って中は list じゃないのかなー。
>751の意味は微妙に分からないが、ArrayListは配列で実装されてる。
ArrayListとかListとか実態と名前があってない気がするのは自分だけですか?
C#プログラミングで一般保護例外が発生する状況ってどういう場合がある?
>>754 1. unsafeコード内でメモリ破壊した
2. 行儀の悪いライブラリを呼んだ
3. .NET Frameworkのバグ
DrawStringで書いた文字の終わりの座標はどうやったらわかるでしょうか?
SMTPメールサーバを取得するのに「nslookup -type=mx」
というのを見つけて、とりあえずと実装してみたのですが、
一瞬ウィンドウが開いただけで終わってしまいます。
SMTPサーバを取得する何か良い方法はないでしょうか?
toTextBoxに送り先のメアドが入っているもとします。
private string MailExchanger()
{
int start = toTextBox.Text.LastIndexOf("@") +1;
int end = toTextBox.Text.Length;
string s = toTextBox.Text.Substring(start, end-start);
return s;
}
private void button1_Click(object sender, System.EventArgs e)
{
System.Diagnostics.Process.Start("nslookup", @"-type=MX " + MailExchanger());
}
RadioButtonをGroupBox等に格納して使うとき、
どのRadioButtonがチェックされたRadioButtonがどのRadioButtonか判断するようなメソッドはどこかに実装されてないでしょうか?
パッと見、取りあえず見つからなかったので自前のコンテナを作って機能させたのですが……
>>757 スパム送信機作者乙。
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = "nslookup.exe";
p.StartInfo.Arguments = "-type=MX hoge.com";
p.Start();
p.WaitForExit();
string output = p.StandardOutput.ReadToEnd();
あと適当に処理して mail exchanger を得れ。
>>757さん
レスありがとうございます。
お陰様で、まだ途中だけど何とか実装出来そうです。
ちなみにスパム送信機ではありません。(笑)
んむ?スパーム送信機がなんだって?
762 :
デフォルトの名無しさん:05/01/18 02:32:49
XmlTextReaderでタグ内の空白も有効にするオプションはないでしょうか?
どんなに<a xmlns="a">なんてやっても<a xmlns="a">にしかならないっす
助けてほしいっす。
ん? 俺のスパームがそんなに欲しいか。そうか。
764 :
デフォルトの名無しさん:05/01/18 07:35:22
プラグイン形式のアプリ作りたいんですが
動的DLLロードみたいなことってできますか?
Assembly.LoadFrom
DllImportのことでちょっと聞きたい。
[DllImport("Imm32.dll")]
なんて書いたときに、"Imm32.dll"が見つからない場合もあり得ると思うんだが、
プログラムとしてはそういうときはどういう感じで書けばいい?
それとも、"Imm32.dll"が見つからないってことはまずない?
エロい人おしえて!
>>766 DLL名を適当な名前に変えて試してみれ
>>758 一発解決なのはないので、Controlsをforeachで回して取得、かな。as演算子小活躍。
>>762 xml的に<a xmlns="a">と<a xmlns="a">は等価なのでそんなオプション実装するわけ無い。
>>764 765が手軽な手法。
>>485-486にAppDomainを使った手法が出てる。
どう呼ぶにしろ、485みたいなのがプラグインの基本。
>>766 Imm32.dllが見つからないとIME全滅すると思うんだけど。
そんなのはサポート対象外にすればいいんでない?
>>768 Control は Tag っていうプロパティ持ってるから、それにあらかじめ何らかの識別情報を入れておく。
// CheckBox 作成側
for(int i=0; i<N; ++i){
RadioButton rb = new RadioButton();
// 中略
rb.Tag = i;
this.group.Add(rb);
}
// イベントハンドラ内
void OnClick(object sender, EventArgs e){
RadioButton rb = e as rb;
switch((int)rb.Tag) // 後略
}
Controlの派生とEventHandlerに関する質問です。
class SubControl:Control{
protected override void OnMouseUp(MouseEventArgs e){
………(1)………
}
}
class MainForm:Form{
MainForm(){
SubControl subcontrol=new SubControl();
subcontrol.MouseUp+=new MouseEventHandler(OnSubControlMouseUp);
}
void OnSubControlMouseUp(object o, MouseEventArgs e){
………(2)………
}
}
上記のようにSubControlのMouseUpに対して(1)(2)を共に実行させたいのですが、
(1)のみが実行されます。
解決方法を教えて下さい。
>>770 base.OnMouseUp() を呼ぶか(この場合 OnMouseDown も同様にすることが必須)、
自分で if (this.MouseUp != null) (this.MouseUp)(hoge) とかしてハンドラを呼び出す。
Visual Studio .Net だと、override タイプした辺りからインテリセンス任せに選んでいけば
そこらへんの説明まで付いたコードが挿入されます。
自己解決しました。
class SubControl:Control{
protected override void OnMouseUp(MouseEventArgs e){
………(1)………
}
}
上記のようなオーバーライドをやめて下記のように変更しました。
class SubControl:Control{
SubControl(){
this.MouseUp+=new MouseEventHandler(OnSubMouseUp);
}
void OnSubMouseUp(object o, MouseEventArgs e){
………(1)………
}
}
コーディングに今ひとつ美しさを欠くのですが、
問題ないので、これで行きます。
>>771 即レスに感謝しております。
773 :
デフォルトの名無しさん:05/01/18 19:09:14
あるファイルの中で、1回しか使わないメソッドがあったとして。
そのメソッド(の属するクラス)の属する名前空間はガンガンusingしますか?
それとも、その1回だけ使う場所で、名前空間を明示しますか?
流儀的にどちらがいいのか分かりません。1回でなく2回3回になった場合もまた困ります。
それこそ個人なりグループなりの流儀・コーディング規約の問題だと思うけど。
私は積極的にusingする派。
775 :
デフォルトの名無しさん:05/01/18 20:20:50
オブジェクトに対するアクセスをフックしたいのですが、どないしたら(・∀・)イイ!!でしょう?
public class Ptr<T>{
T m_t;
public Ptr(){ }
public Ptr(T t){ m_t = t; }
public T r() { return m_t; }
static public implicit operator T(Ptr<T> from){ return from.m_t; }
}
こんな感じにしたのですが、当然
Ptr<string> pts=new Ptr<string>(s);
int ind=pts.r().IndexOf('e'); か
int ind=((string)pts).IndexOf('e'); にしないとアクセスできません。
int ind=pts.IndexOf('e'); としたいのですが。知恵を貸してください・・・
Valueプロパティでインスタンスを返すのがNullable<T>もお薦する手法だ。
777 :
775:05/01/18 21:01:08
>>776 了解です。
けんど、透過的につかう方法なかとでしょうか。C++のときはoperator->があったので通常のポインターと同じように使えたので。
>>767 >>768 まぁ、サポート対象外にすれば楽なんだがな。
DllImportするときに、該当のdllが見つからなかったときの対処って
どうすればいいのかなって思ったのだよ。
779 :
デフォルトの名無しさん:05/01/18 21:12:46
C++で作成したEXEからC#のCOMコンポーネント化したオブジェクトを呼び出すようなプログラムをつくらなければならないんですが、C#でCOMを作成する方法が全くわかりません。
C#でCOMを作ることはできるのでしょうか?
781 :
デフォルトの名無しさん:05/01/18 21:29:13
>>780 ありがとうございます。
MSDNのそこらへんのページも見たんですが、イマイチ理解できなくて・・・。
もっとじっくり読んであとは自力でなんとかしようと思います。
ん、分からない事があったらまたドゾー。
>>780 それって、アプリが自分で起動時にDLLの存在をチェックしてるわけだよね。
DLLの検索順序調べたら↓のサイトがあった。
http://support.microsoft.com/default.aspx?scid=kb;ja;815065 1. 現在のプロセスに対応する実行可能プログラムが格納されているディレクトリ
2. 現在のディレクトリ
3. Windows システム ディレクトリ (Windows システム ディレクトリのパスは GetSystemDirectory 関数を使用して取得できます)
4. Windows ディレクトリ (Windows ディレクトリのパスは GetWindowsDirectory 関数で取得できます)
5. PATH 環境変数に設定されているディレクトリ
System.IO.File.Exists()で、↑のディレクトリを一つ一つ調べるしかないのかな。
>>783 JITコンパイラで使ってるときは、当該メソッドを呼び出したところで例外が発生するみたいです。
のでcatchすればいいかと。
ngex.exe とかでコンパイルしようとするとどうなるのかは良くわかない。
メッセージループがあるならApplication.ThreadExceptionで拾えるから、統一的に扱うなら。
例外が投げられるのは当然そのメソッドを初回呼び出した時。
メッセージループが無くてもAppDomain.CurrentDomain.UnhandledExceptionで拾えるんだけど……。
これって結局フレームワークが発生した例外を再スローするようだからちょっと違うかな。
なるほど。
皆さんどうもありがとん。
>>783 LoadLibrary()呼び出してDllが読み込まれるか確かめるだけでよくないか?
Dllの検索順序もOSとかサービスパックによって変わるし。
788 :
デフォルトの名無しさん:05/01/19 01:22:20
Visual C# 2005に関して質問させていただきます。
現在、DataGridViewを備えたソフトウェアを個人的に作成しています。
しかしながら、以下のような問題に突き当たり、皆様の助言を請いたく、
どうぞ宜しく。
[問題点]
private void myDataGridView_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
myDataGridView.Rows[e.RowIndex].Cells[0].Value = str[0];
myDataGridView.Rows[e.RowIndex].Cells[1].Value = str[1];
}
上記のように、二度押しされた行のセル内容をstrに変更したいのですが、
変更後のセル内の表示が正常にいきません。
具体的に症状を紹介します。
・セル内容は変更される。
・上記プログラム処理を行った後、変更のあったセルをSelectedにしたり
ほかのセルをSelectedにすると、「表示」が変更される。
・「表示」が変更されない、とは、2パターンある。
・一方は、見た目で全く内容の変化がない状態。
・他方は、変更前の文字と変更後の文字が重なって2重に見える。
・ただし、これらの2パターンの状態も、数度のSelected,Unselectedを
繰り返せば、正しく表示されるようになるようだ。
・Columnには、AutoSortされるようにあらかじめ設定されている。
以上です。
セル内容変更後、直ちに「表示の変更」が正常に行われる修正案を
教えていただけないでしょうか。
心より、エロい方、宜しくお長いします。
個人的にIRCのbotをC#で製作しています。
IRCの接続にはsf.netのthresher-1.2というライブラリを使っています。
IRCのメッセージを送るメソッドの引数はstringとなっていますが、
日本のWide系の鯖では文字コードにShift_JISを使っているようで、
stringだと普通うにこーどが使われるので文字化けしてしまいます。
この問題を解決するには、文字をエンコードすればよいと思いますが、
オーバーロードとかされてなくて引数はstringのみなので どうしたらよいかわかりません
ライブラリをなんとか書き換えるしかないのですか?
790 :
デフォルトの名無しさん:05/01/19 01:54:35
クリップボードにファイルのコピーってC#で出来ますか?
エクスプローラー上でのコピーと同じ処理を行いたいんですが、
ぐぐって見ても、テキストやらイメージデータしか見つかりませんでした。
知ってる人がいたら教えてタモーレ
出来ました。
某BBSよりこぴぺ
sting[] filenames = new string[1];
filenames[0] = "c:\test.txt";
Clipboard.SetDataObject(new DataObject(DataFormats.FileDrop, filename), true);
>>788 クイズか何かですか?
答える側が推測しないとならない部分が多い気がしますが。
とりあえずフォームにDataGridを貼り付けて2列追加した後、
DataGridのCellMouseDoubleClickイベントハンドラにて
private void myDataGridView_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
string[] str = {"v1", "v2"};
myDataGridView.Rows[e.RowIndex].Cells[0].Value = str[0];
myDataGridView.Rows[e.RowIndex].Cells[1].Value = str[1];
}
などとして1行1列をダブルクリックしてみると、
確かに1行1列は"v1"が表示されて欲しいのにCell真っ白。
1行2列は"v2"と入っているのですが。
更に1行目にデータを入れたのに、新規入力用の行が2列目に無いことも
気になるところ。
なので
if (e.RowIndex == dataGridView1.Rows.Count - 1)
dataGridView1.Rows.Add();
などと書き足してやるとなんとなくいい雰囲気。
文字が二重に見えるという現象は再現出来なかったのですけども、
果たしてどういった状況下でしょう?
>>789 Encoding絡みのパラメータがあるっしょ。それいじってみたら?
>>789 Shift_JISじゃなくてISO-2022-JP(いわゆるJIS)では
>>787 まさしくそんな感じのを探していました。
どもありがとう。
796 :
デフォルトの名無しさん:05/01/19 16:40:59
object objDate = @"2004/01/01";
DateTime date1 = Convert.ToDateTime(objDate);
DateTime date2 = (DateTime)objDate;
date2で、キャスト不正エラーが出ますが
どうしてでしょうか
stringからDateTimeにキャストできないから。
・DateTimeはstringから継承されてるわけではない
・stringにもDateTimeにも明示的/暗黙的な相互の型変換が定義されていない
798 :
796:05/01/19 16:56:18
ご丁寧にありがとうございます。
objDateはobject型ですが、"2004/01/01"を格納した地点で
string型に変換されてしまうってことでしょうか。
初心者ですいません。
んーとね、
objDateはobject型として宣言されてるね。
つまり何でも入る器だ。
そこに"2004/01/01"という、string型のモノを入れた。
さてこれを器から取り出したとき、
それは「何でも入る器に入ってた」からって、どんなモノにでもなるってわけはないだろう?
何でも入る器に入ってるだけでstring型はstring型なんだから。
800 :
796:05/01/19 17:22:15
そうだったのか・・。
とても分かりやすい説明、有り難うございました。
801 :
デフォルトの名無しさん:05/01/19 18:22:49
<a><b>ccc</b></a><a><b>ddd</b></a><a><b>eee</b></a>
こんなテキストがあったとして、ccc、ddd、eee を取り出す正規表現
を教えてください。まずは、<b>ccc</b>、<b>ddd</b>、<b>eee</b>
でも OK です。
<a>ccc</a><a>ddd</a><a>eee</a>
なら、"<a>(?<value>[^<])</a>" でいけるんですが、^ の後に複数文字
が指定できず、"<a>(?<value>[^<a])</a>"だとダメダメでした。
"<b>(?<value>.*?)</b>" で何か問題が?
取りあえずCはスレ違いだな。
文章の意味もよくわからんが。
805 :
デフォルトの名無しさん:05/01/19 18:52:15
>>802 す、すげー! ばっちりです。ありがとうございました。
頭の固いお方ですこと
>>803 System.Threading.Timer でも System.Windows.Forms.Timer でも
好きな物を使えばよろしいのでは。
すみません、スレ違いでした。
これから気をつけます
809 :
デフォルトの名無しさん:05/01/19 21:08:48
C#でWordみたいなワープロソフトを作っているサイト、又は本などを
誰か知りませんか?ご存知の方がいましたら教えてください。
810 :
デフォルトの名無しさん:05/01/19 21:35:40
>>809 俺が、前作ってたよ
ワードは、C#で操れるよ。
#region Variable
private Word.Application _wApp;
private Word._Document _wDoc;
private Word.Selection _wSel;
private object oMissing;
private Object oTrue = true;
private Object oFalse = false;
// Open the Dropped document.
try
{
object __temp_filename = (string)fileinfo.FullName.Clone();
_wDoc = _wApp.Documents.Open(ref __temp_filename, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing);
_wSel = _wApp.Selection;
}
catch
{
MessageBox.Show("DragDrop_CantOpenWordFile_Error");
WordRelease();
fileinfo = null;
return;
}
とっかかりに、ほれ。
811 :
デフォルトの名無しさん:05/01/19 21:36:23
あ、操作するんじゃなくて、作るのね・・・丸rz...
ボタンをマウスでクリックした時のイベントつかまえて処理をしています。
この時マウスを連打するとクリック回数分連続でイベントが走ってしまいます。
最初の一回のイベントのみ実施してその後のイベントをキャンセルしたいのですが、
いい方法ありませんか?
マウスポインタを砂時計にしてもだめでした。
それなりに重たい処理を行うので連打を許したくないのです。
>>812 処理中ははbutton.Enable=falseとすればいいじゃない。
サーバー上にexeをおいて
ノータッチデプロイメントが使用されない方法ってありますか?
そのままダウンロードもしくは警告は出るが実行できるなにか。
815 :
788:05/01/19 22:15:18
ちょっとしたアプリを作っています。
Form1がメインフォームで、textBox1があります。
Class1に処理があって、Form1のbutton1をクリックするとnew Class1().Start();と呼び出されます。
このとき、Class1からメッセージstringをForm1(呼び出し元)のtextBoxに表示したいのですが、
Class1から呼び出し元にstringを渡すにはどうすれば良いのでしょうか?
デリゲートとかいうのを使うんですか?
817 :
788:05/01/19 22:20:19
class Class1{
____public Start(){
________messgebox.show("Class1のメソド");
________Form1.input("任意の文字");
____}
}
class Form1{
____public input(string str){
________this.textBox1.Text = str;
____}
}
>>816 設計上支障がなければ Class1 に textBox1 への参照を持たせてやればいいのでは。
819 :
788:05/01/19 22:22:02
pubic void Start()
public void input(
丸rz..
>>815 グラフィックカードが原因でそういうような画面になったことはある
821 :
788:05/01/19 22:24:13
>>820 最初は、フォームをロードしたときにコラムをアセンディングでソートしてるのが
プロブレムかと考えていたんですけど・・・ソーでもないみたい。
822 :
788:05/01/19 22:27:06
原因の一つとして、フォームをロード時に列をSort(Column[0],List....Ascending);
とかしてるのがあげられると推測していたのですが、ロード時の前記処理を
//しても変化なしでした。
くどい文章かいてごめん。
DataGridViewのInvalidateでも呼んでやれば?
824 :
788:05/01/19 22:37:35
>>823 RefreshとかInvalidateやたーよ 〇rz...
やったのにまったく改善されはらへんて。
>>824 ダブルクリック以外のイベントでは正しく変更される?
826 :
788:05/01/19 22:52:46
今、プログラム変更注。
827 :
788:05/01/19 22:53:23
2005重すぎるよ。
それともPen600じゃだめって?(>_<)
828 :
788:05/01/19 22:54:45
前から思ってるんですけど、
起動直後に
'System.NullReferenceException' の初回例外が Saisoku2.exe で発生しました。
っていわれるんですよ。
これ、なんなんですか?起動には支障ないみたいですが・・・
829 :
788:05/01/19 22:57:56
前から思ってたんですけど、
どうしてMicrosoft VisualC# 2005 Express Edition Beta
のアプリケーションでいくらフォームを変更しても
(しかも前回のフォームは跡形もないくらい)
いざ、デバッグすると、すでに消えているはずの
前のフォームが出てくるわけ!!
あぁ〜いらいらする。
いったい、どこに眠ってるんだ、この消したはずの
テスト用DataGridView!! あうあうあー
830 :
788:05/01/19 22:59:43
もう怒ったからこのスレ荒らしてやるー
>>828 そういう例外が発生しているってこと。catchされているので落ちない。
どこで発生しているか見たいときには、VS .net のメニューの「デバッグ⇒例外処理」だかなんだかで
当該の例外を「常に停止」にしてデバッグ実行すると、例外の発生時点で停止してくれる。
832 :
788:05/01/19 23:05:37
833 :
788:05/01/19 23:09:44
831さん
オプション→デバッグ→全般ですか?
ファイルに関連したアイコンが取得したいんですが、
ExtractAssociatedIconとSHGetFileInfoを使用しても、なぜか小さいアイコンしか
取得出来ません。
大きいアイコンの取得に関して何か特別な呼び出し方でもあるんでしょうか?
IntPtr hImageLarge = SHGetFileInfo(filename,0,ref shfi,
(uint)Marshal.SizeOf(shfi),
ICON_SHGFI_ICON | ICON_SHGFI_LARGEICON )
iList.Images.Add(Icon.FromHandle(shfi.hIcon));//イメージ追加
835 :
デフォルトの名無しさん:05/01/20 00:14:18
DataGridViewで、
DefaultCellStyleのSelectedBackColorを空欄、すなわち指定なし
すなわち選択時もバックカラーは選択前のバックカラーから変化しないように
できないでしょうか。
836 :
788:05/01/20 00:23:00
原因がわかりました。
private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0) { return; }
_dgv.Rows[e.RowIndex].Cells[0].Value = (int)(new Random().NextDouble() * 100);
_dgv.Rows[e.RowIndex].Cells[1].Value = "ここ変えた";
this._dgv.Sort(_dgv.Columns[0], ListSortDirection.Ascending);
for (int i = 0; i < _dgv.Rows.Count; i++)
{
this._dgv.Rows[i].Selected = true;
}
}
これをブレークポイントを利用して順に動作させると
あることに気づきます。それは、このダブルクリックメソッド内では
なんら_dvgを変更しない、ということです。
つまり、この中でいかにRows[i].Selected=trueとかしても
まったく意味ないのです。ループまわしたところで、
何も変化ありません!!
なぜですか!!むきょー
事故解決
ICON.fileBig.ImageSize = new Size(32,32)
Orz.....
317==363==788
839 :
788:05/01/20 00:39:19
>>836 ん?
_dgv.Rows[e.RowIndex].Cells[0].Value とかが変更されているでしょうに。
DataGridViewそのものをダイレクトに変更する必要ってあるのかな。
841 :
788:05/01/20 01:02:40
>>840 メソッドを抜ければ、セルの内容の変更が適用されますが、
セルを抜けるまでは表示上は適用されていないみたいです。
private void _dgv_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0) { return; }
_dgv.Rows[e.RowIndex].Cells[0].Value = (int)(new Random().NextDouble() * 100);
_dgv.Rows[e.RowIndex].Cells[1].Value = "ここ変えた";
CurrencyManager cm =
(CurrencyManager)this.BindingContext[_dgv.DataSource, _dgv.DataMember];
cm.Refresh();
}
こんなこともしてみましたが、無駄でした。
とにかく、Loadメソッドで作動させた
this._dgv.Sort(_dgv.Columns[0], ListSortDirection.Ascending);
が、セル内容変更後、すみやかに適用されません。
「すみやか」でない、とは、表現するのが難しいですが、
前の私の投稿時に紹介した画像をご覧ください。
842 :
788:05/01/20 01:27:01
気合で解決しました。
private void _dgv_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex < 0 || e.RowIndex < 0) { return; }
int num = (int)(new Random().NextDouble() * 100);
((DataRowView)_dgv.BindingContext[_dgv.DataSource, _dgv.DataMember].Current).Row[0] = num;
((DataRowView)_dgv.BindingContext[_dgv.DataSource, _dgv.DataMember].Current).Row[1] = "ここ変えた";
// _dgv.Rows[e.RowIndex].Cells[0].Value = (int)(new Random().NextDouble() * 100);
// _dgv.Rows[e.RowIndex].Cells[1].Value = "ここ変えた";
// CurrencyManager cm =
// (CurrencyManager)this.BindingContext[_dgv.DataSource, _dgv.DataMember];
// cm.Refresh();
}
お騒がせしました〇r4z...
843 :
788:05/01/20 01:32:06
なんか、2005になっても、あまり2003とかと
変わらないんですね。
もっと簡単にいくと思ってました。期待しすぎました。
というか、僕が理解してなさすぎかもしれへんけど。
そんなややこしいことしなくても _dgv.Rows[e.RowIndex].Cells[0].Value で
普通にデータ更新されてるけどねうちは…。
845 :
796:05/01/20 09:44:46
ファイルを一行ずつ読み込んで、DBを一件ずつ更新する処理をするプログラムを書いています。
特定のデータであった場合、従来行う処理とは別の処理を行ってから、従来の処理を行います。
ちなみに、特定のデータであるかどうかの判定は、従来の処理を行わないと分りません。
どのようなコーディングすれば、綺麗?なのか教えて下さい。
今は、下記のような感じで書いてます。
while ((line = stream.ReadLine()) != null)
{
bool ret = 従来処理();
// 特定データの場合
if (ret == false)
{
特別処理()
従来処理()
}
}
従来処理による副作用は?
従来処理を複数回やっても大丈夫なの?
従来処理をやらずに判定することは本当に不可能なの?
847 :
デフォルトの名無しさん:05/01/20 10:08:44
>>846 従来処理は1件のデータにつき一回だけ発行します。
特定のデータはどうかの判定は、従来処理の戻り値で
判断する以外、方法がありません。
>>847 それ以外に無理でしょう
あとはDBのトリガーなどでDB上で処理するとかあるかもしれませんが
RSSを取得したいんですが、例えば以下のようにローカルのファイルから読み込んでタイトルを取得しようとしても
ぬるりが出てうまくいきません。
どうすれば出来るか教えてください。
ちなみにローカルに保存してるファイルは、
http://blog.livedoor.com/xml/recent_articles_cat1.rdfここからダウンロードしたものです。
よろしくお願いします。
string strRssTitle;
XmlDocument xml = new XmlDocument();
System.IO.StreamReader str = new System.IO.StreamReader(@"E:\recent_articles_cat1.rdf");
System.Xml.XmlReader reader = new System.Xml.XmlTextReader(str);
xml.Load(reader);
XmlNode root = xml.DocumentElement;
strRssTitle = root.SelectSingleNode("/rdf/channel/title/text()").Value ; //ここでぬるり発生
dotGNUのスレがないのでここでききます。
System.Windows.Formsで日本語を表示する方法を解説きぼんぬです。
851 :
デフォルトの名無しさん:05/01/20 18:56:02
StripStatusBar? 2005の強化されたステータスバーありますよね。
そこにProgressBarを追加したのですが、
ForeColorの変更が適用されません。
BackGroundColorは変更できました。
教えて、ェ□ヰ人。
コンポーネント(windows)を作っているのですが
デザイン時だけプロパティを追加できないでしょうか?
追加したいプロパティはデザイナ側に実装して
そのデザイナのプロパティの値によってコンポーネント側の
プロパティを設定したいのですが
コンポーネント側には追加したくないので
どなたかお願いします
854 :
デフォルトの名無しさん:05/01/20 20:27:10
すいません、c#が死滅の一途をたどっているといううわさは本当なのでしょうか?
・ω・`) 藻舞だけちゃう
言語仕様としては Java よりは優れていると思うよ
でもその点以外ではもうだめぽ
彡∩)) _, ,_ _, ,_
((⊂((⌒⌒((Д´≡`Д)) そんなこといっちゃやだやだぁぁぁ ――――― !!!
`ヽ_つ ⊂ノ
>>853 IExtenderProviderではなくComponent継承です
単純にVSのデザイナ上に
デザインモード時だけプロパティを追加したいのです。
859 :
デフォルトの名無しさん:05/01/20 21:18:19
誤爆です、すまんこ。
861 :
デフォルトの名無しさん:05/01/20 21:22:42
ntpサービスを利用するためのサンプルコード、
どなたかご存知ないですか?
>>858 DesignOnlyAttributeだ!
実際にどうなるのかは知らない。
863 :
デフォルトの名無しさん:05/01/21 00:53:03
ちょいと教えてくださいまし
OpenFileDialogで開くコモンダイアログをカスタマイズして
チェックボックスとか付けたいんですがC#で実装する
方法がわからないのです
ヒントとかないですかね?
864 :
デフォルトの名無しさん:05/01/21 01:31:24
>>852 案:
・PropertyDescriptorを継承するクラスを作り、「見せ側」プロパティと「実体」プロパティのプロクシとする。
・「見せ側」の方を基底コンストラクタの引数として渡し、GetValue/SetValueなどの操作は「実体」プロパティを対象にする。
・PreFilterPropertyメソッドのオーバーライドで、引数のIDictionaryに上記のクラスのインスタンスを適当なキーで追加する。
866 :
デフォルトの名無しさん:05/01/21 02:59:36
RichTextBox.AppendTextでたまにアプリがフリーズするんだが、何が原因として考えられるだろうか。
メモリ不足とか?
経験無いから何とも言えないけど。
WEB上にも少なくとも日本語の範囲ではRichTextBoxにせよRich Editにせよそれらしい情報がないし。
868 :
デフォルトの名無しさん:05/01/21 16:18:14
テキストが長すぎるとか?
869 :
デフォルトの名無しさん:05/01/21 17:40:31
フォームに、画像を読込むたび新しいPictureBoxを生成し
複数の画像をフォーム内に読込めれるようにしたいのですが、
OpenFileDialog openFileDialog = new OpenFileDialog();
if(openFileDialog.ShowDialog() == DialogResult.OK)
{
PictureBox picturebox1 = new PictureBox();
Bitmap bmap = new Bitmap(openFileDialog.FileName);
picturebox1.Image = bmap;
}
では画像が表示されませんでした。足りない部分、間違っている部分を
教えてください。よろしくお願いします。
作成したPictureBoxの、フォームのControlsへの追加を忘れてる。
サムネイルか?
>>866 コントロールのスレッドでちゃんとアクセスしてる?
別のスレッドからアクセスしている場合は同期とらないとダメだよ。
Form.Invoke()とかで。
872 :
デフォルトの名無しさん:05/01/22 00:35:40
初歩的な質問で誠に申し訳ない、本当に申し訳ない、兎に角申し訳ない・・・
プログラムを起動したら自分自身を
C:\ProgramFiles\●●\abc.exe
とかにコピーする方法ってないでしょうか?
当然というかなんというか自分自身をコピーしようとするとエラーがでるので・・・
宜しくお願い致します。
コピーならできるはずだが?
>>872 using System;
using System.IO;
using System.Reflection;
namespace Test
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
string aname = Assembly.GetExecutingAssembly().Location;
File.Copy(aname, @"D:\copy.exe", true);
}
}
}
普通にコピーできますが。
@ありましたね、これは早とちりを失礼しました。
877 :
869:05/01/22 10:51:50
>>870 なるほど。フォームに追加の記述を足してみました。
OpenFileDialog openFileDialog = new OpenFileDialog();
if(openFileDialog.ShowDialog() == DialogResult.OK)
{
PictureBox picturebox = new PictureBox();
bmap = new Bitmap(openFileDialog.FileName);
picturebox.Image = bmap;
this.Controls.Add(new Button());
}
サムネイルという言葉をよく知らないので何とも言えないのですが、
実現したいことは、ページに何枚も画像を読込むことが出来る。
と、いった風なことです。例えばワードの図の挿入みたいに。
現在の記述では1回目は画像を読込んでくれるのですが、2回目以降
のから画像を読込みません。PixtureBoxの生成の仕方が悪いのでしょうか?
>>877 生成の仕方が悪いです。
OpenFileDialogのNamesプロパティをforeachでぐるぐる回すとかしてあげないと
希望の動作にはならないんじゃないかなあ。
ってそのあたり省略してたものと思ってましたが…。
そうじゃなくて2回目のダイアログで選択した画像が表示されないということ?
PictureBoxのLocationが全部同じで同じところに配置されてるとかいうオチ?
879 :
869:05/01/22 11:36:55
>>878 ご指摘通り、2回目のダイアログで選択した画像が表示されない
という点で悩んでます。PictureBoxが同じ位置に配置される点は
今は問題視していません。具体的な実現方法が分からないので、
良い手段があれば教えて下さい。_| ̄|○ペコッ
>>879 > bmap = new Bitmap(openFileDialog.FileName);
同じbmap使い回したら駄目でしょう。
881 :
869:05/01/22 11:52:00
Σ(゚Д゚;)そうなんですか。では事ある度に新しいBitmapを生成
しなきゃいけないんですね。そうなると、
Bitmap ○○○ = new Bitmap(openFileDialogFlieName);
の○の部分をどうすればいいのでしょう?
お手数かけてホントにすみません。
>>880 > 同じbmap使い回したら駄目でしょう。
まあそれはそうだけど本質ではないな。
//PictureBox.Imageとして元絵の参照は残るわけだから、問題ないと言えば無い。
Controls.AddしたものはZオーダー(コントロールの手前・奥)が一番後ろになる。
つまり先に置いたのに邪魔されて見えないだけ。
手前に持ってくるのがBringToFrontメソッド。
ところで、PictureBoxコントロールのサイズは、別にImageプロパティを設定したところで
勝手にImageプロパティのイメージサイズに変わるわけではないってのは分かってる?
>>882 あーすみませんその通り。問題ないといえばなかったです。
picturebox.SizeMode = PictureBoxSizeMode.StretchImage
とかやると原因究明の手がかりになるかもしれないしならないかもしれない。
picturebox.SizeMode = PictureBoxSizeMode.AutoSize
だったorz
それも初耳でした…PictureBoxのサイズが自動的にイメージと同じ
サイズになると思ってました。基礎知識の方で問題点が多いですね…。
勉強になります。
886 :
デフォルトの名無しさん:05/01/22 13:32:35
ntpシステムにC#でアクセスする方法を教えていただけないでしょうか。
889 :
886:05/01/22 19:57:00
890 :
デフォルトの名無しさん:05/01/22 22:12:32
class Hogeで
public string this[int index] { get〜set〜} を定義すれば、
Hoge hoge = new Hoge();
hoge[5] のようなアクセスができますよね。
これをhoge.Fuga[5]のようにしたくて
public string Fuga[int index] のようにしてみたけどダメでした
こういうことをするためにはどうしたらいい?
C#では名前付きインデクサは無理。
>>890 class HogeProxy
{
Hoge hoge;
public string this[int i]
/* 中略 */
}
class Hoge
{
public HogeProxy Fuga
/* 中略 */
}
Hoge hoge = new Hoge();
hoge.Fuga[i];
893 :
デフォルトの名無しさん:05/01/22 23:21:17
class Cmyclass{
___private int data;
___static Cmyclass[] myclasses;
___static Cmyclass(){
______myclasses = new Cmyclass[10];
______foreach(Cmyclass myclass in myclasses){
_________myclass = new Cmyclass();
______}
___}
___public Cmyclass(){
______data = 0;
___}
___public void display(){
______Console.WriteLine(data.ToString());
___}
}
class _formMain(){
___for(int i=0;i<Cmyclass.myclasses.Count;i++)
______Cmyclass.myclasses[i].display();
}
ところでアンダースコアでインデントというのはコピペもできんわ読みづらいわで最悪だと思うんだがどうか。
素直に「 」をコピペすれば良いのに
896 :
893:05/01/22 23:39:20
VSで混合モードのパネルがどんどん増えていく上に消せないんですが・・・
これは一体なんですか。
898 :
893:05/01/23 00:03:43
>>897 合混モードパネルなら、どんどん増やしたいんだがな。
899 :
デフォルトの名無しさん:05/01/23 00:05:33
プログラムが自分自身を削除することってできる??
900 :
893:05/01/23 00:12:22
動作中に自分自身の実行ファイル名をリネームすることはできるが
上書きしたり削除は無理、だと思う。
>>899 アンインストーラみたいなことやるなら
セットアッププロジェクトにやらせればいいんじゃないかな。
それともウィルスとかみたいに居なくなるのを希望しているんだろうか…。
C#で作ったアプリメモリ異常に食ってる(ウィザードアプリでも)んですが。
小さくして目盛り減るけれど、これは何?残ったのが実質のコードだということ?
904 :
デフォルトの名無しさん:05/01/23 01:24:34
現在のPCのSYSTEMTIMEと、
ある特定のSYSTEMTIMEとを比較し、
その差を表示することはできるのでしょうか。
できるとしたら、どのようにすればよろしいのでしょうか。
905 :
デフォルトの名無しさん:05/01/23 01:26:28
>>891のようなデザインパターンって何て言うんだっけ?
DateTime
907 :
デフォルトの名無しさん:05/01/23 02:30:19
よく右クリックすると選択肢のウィンドウが
出るじゃないですか?
アレって一般的にはどのコントロール使ってるんで
しょうか?それとも別な方法がありますか?
ContextMenuのことか?
910 :
デフォルトの名無しさん:05/01/23 14:03:43
ラベル1にマウスが乗るとカーソル非表示。ラベル1から離れるとカーソル表示としたいのですが、
'Cursor'はあいないな参照です。とエラーが出ます。何が原因か分かる人いますか?よろしくお願いします。
private void Label1_MouseEnter(object sender, System.EventArgs e)
{
Cursor.Hide ();
}
private void Label1_MouseLeave(object sender, System.EventArgs e)
{
Cursor.Show ();
}
現在こんな感じです。
911 :
デフォルトの名無しさん:05/01/23 14:22:14
>>910 隠すのではなく、見えないカーソルに変更しる
912 :
デフォルトの名無しさん:05/01/23 14:23:04
無料で使えるIDEを教えてください
>>910 Cursorが何かとバッティングしてるだろうから
System.Windows.Forms.Cursor.Hide (); にすればいいような。
916 :
デフォルトの名無しさん:05/01/23 15:33:17
string hoge = "ほげほげ\r\nふがふが\r\nまげまげ";
ってのを"\r\n"で区切ってstring[] にしたいんだけど、
string.replaceだとcharかchar[]しか区切り文字に指定できなくて、
new char{'\r','\n'}で区切ると当然、
"ほげほげ" "" "ふがふが" ...
のようになってしまうわけ。
文字列で区切るにはどうしたらいいの?
dクス!そんなところにかくれてたんですか・・・・
920 :
デフォルトの名無しさん:05/01/23 18:11:23
3つの事象は等しく発生するという仮定で、3つの場合分けを行う場合、
if else文を使うのと、switch文を使うのとでどっちが速いですかね?
誰か分かりませんか?
コンパイルしてReflector for .NETで調べてみたらわかりそうな気がする
switch を使ってもコンパイルしたら if else になっちゃうよ
ILDASMのほうがいいんじゃないかな。
opcodeにはswitchもあるよ。
ただそんな事を考える意味があるとは思えないけど。
そこまでスピードにシビアな開発を.NETでやることの妥当性をまず考えるべきだ。
926 :
デフォルトの名無しさん:05/01/23 18:26:45
Javaのsuper()はC#ではどのように書くのでしょうか。
public Hoge() : base() {...}
基底クラスのコンストラクタだよね?
//指定しない場合は基底クラスのデフォルトコンストラクタが自動的に呼ばれるから上記コードは意味がないが。
928 :
デフォルトの名無しさん:05/01/23 18:51:18
929 :
デフォルトの名無しさん:05/01/23 18:54:29
NTPData = TimeSocket.Receive(ref EPhost);
私のPC環境では、NTPサーバーから時刻情報を得ようとしても、
この行でとまってしまいます。
なぜでしょうか。
887 :デフォルトの名無しさん :05/01/22 14:01:48
>>886 http://www.codeproject.com/csharp/ntpclient.asp byte[48]をRFC2030に従って整形してUDPで送受信するというのが大まかな流れみたい。
なお、XPsp2インスト済み
ノートンインターネットセキュリチなし
お願いいたします。
930 :
デフォルトの名無しさん:05/01/23 19:07:17
プロセスの起動と終了を感知することってできますか?
ご指導お願いしますm(_ _)m
931 :
929:05/01/23 20:16:54
>>930 できます。以前、そのようなプログラムを作成しました。
プロセスが実行中(数値計算でした)も、フォームが凍らないタイプです。
家に帰ったら、サンプルを貼ります。がんばってください。
>>929 リクエストが返ってこないからだろう。
他のホストで試してみたらどうなる?
933 :
930:05/01/23 20:47:13
プロセスとスレッドを混同している予感
軽量プロセスだからいいんじゃね?
936 :
デフォルトの名無しさん:05/01/23 22:13:37
C#でWordを操作するソフトを趣味で開発しています。
このサイトを参考にしています。
http://www.ne.jp/asahi/office/okada/macro/ しかしながら、
With .Parent
End With
というのがよくわかりません。
確かに、FindクラスにParentというものがありますが、
Parent.Deleteのような使い方ができません。
やりたいことは、このサイトと同じことなのですが・・・・。
ちなみに、wdReplaceALLとかwdReplaceOneとかで同じことが
できるか試してみましたが、うまくいきませんでした。;
wdReplaceOneを設定すると、Find.Executeの返り値が検索終了後falseに
ならないからうまくいきませんでした。
937 :
936:05/01/23 22:19:02
WithはVBのキーワード。詳しくはヘルプ。
で、Parentが返すのはobject型なわけで、objectにDeleteとかがないのは分かるよね?
object a = "hoge";
a.IndexOf("o");
とかできないのと同じ。
適切な型にキャストしてやりましょう。
//ブレークポイントで何型か調べるとか。
やっぱり混同してる予感
940 :
931:05/01/23 22:58:55
>>930 お待たせしました。
参考になれば幸いです。
private void ProcessRun(string filename)//プロセス制御
{
process=Process.Start(filename);
process.EnableRaisingEvents=true;
process.Exited+=new EventHandler(Process_Exited);
//プロセス終了時を取得状態にする
MainText.Text=String.Format(" {0} / {1}",listcount,filelist.Items.Count);
}
private void Process_Exited(object sender, EventArgs e)
{
if(listcount>=filelist.Items.Count)//実行していないプロセスがないなら
{
MainText.Text="Process Done";//処理終了
return;
}
else
{
ProcessRun(filelist.Items[listcount++].ToString());
//次のプロセス開始
}
}
941 :
931==936:05/01/23 23:04:33
>>938 レス39です。
当方、withがVBだ、等はばっちりです。
質問時には、すでにキャストも試みました。
object型がDeleteないのとかもばっちり把握しています。
object型は使用時、キャストを利用するのが一般的だと、存じています。
デバッグでどの型にParentをキャストしてあげれば、
Deleteメソッドを使えるのかがわかりません。
表現がおかしいですね。
Deleteメソッドを搭載したどのクラスにキャストすればよいのか
わかりません・・。調べられるものなのですか?
調べるコツとか教えていただけると助かります。
Goto End;
942 :
931==936:05/01/23 23:07:22
>>940 念のため追記。
int listcount;
private void PlayButton_Click(object sender, System.EventArgs e)
{//プロセス開始
listcount=0;
if(filelist.Items.Count==0)
{
MainText.Text="No Process";
return;
}
ProcessRun(filelist.Items[listcount++].ToString());
}
943 :
デフォルトの名無しさん:05/01/23 23:14:22
基本的なことを教えてください。
クラスのフィールドとして定義され、かつ同時にnewされた
フィールドは、実際にはいつnewされるのでしょうか。
コンストラクタでしょうか?
public class Test
{
private ArrayList al = new ArrayList();
}
>>941 一旦.Parentをobjectにでも突っ込んで、その次の行でブレークしてみる。
自動変数の項目にそのオブジェクトが何型かも書かれてる。
>>940 >930が求めてるのは自分で起動するわけではないプロセスについての監視じゃないのか?
そうならWMI、ManagementEventWatcherと言うキーワードを出しておこう。
945 :
931==936:05/01/23 23:21:20
946 :
931==936:05/01/23 23:23:30
>>943 僕は、コンストラクタでnewしてるよ。
いつされるか、わからないから、とりあえず一般的な手法として。
948 :
931==936:05/01/23 23:25:02
public class Test
{
private CmyClass mc = new CmyClass();
}
public class CmyClass{
public CmyClass(){
Messagebox...
}
}
とかすれば、わかる希ガスるん。
乙と言えば乙だが、このスレは950よりも前に次スレ立てる縛りでもあるのか?
>>949 乙。
教えて君で申し訳ない。
最小化でタスクトレイ?(時計の脇のノートンとかがあるところ)に入れたいんだが
どうしたらいいんだろう。
952 :
930:05/01/23 23:34:29
みなさんいろいろありがとうございます。
説明不足ですいません(汗)
プロセスの監視をしたいので
>>944さんのを参考にさせていただきます。
953 :
931==936:05/01/23 23:38:09
>>951
ShowinTaskbar = false;
で、
ツールからNotifyIconをD&D。
アイコン作って、・・・。
宇宙仮面に載ってるよ。
>>953 ありがとう、とりあえず宇宙仮面に逝ってくる
>>950 まあ本当は950過ぎてからなんでしょうけど、つーか縛りはないですよ。
>>951 漏れはWindowsFormsは忘れ去ってるので、他を当たってくだされ。
24時間前は900あたり。スレ消費が早いな。
958 :
デフォルトの名無しさん:05/01/24 01:01:40
RTFの仕様詳しく説明してるとこ教えてください。
C#が生成せるRTFはワードパッドが生成するRTFと全然違って困ってます。
誰かPowerToolsのTrue WebGridとか使ってる香具師いる?
使い勝手はどう? とか、ちょっと上手く動かないんだけど。とかなら分かるが、
使ってるかどうかのアンケートに意味があるのか?
962 :
デフォルトの名無しさん:05/01/24 13:23:22
ArrayListで作ったコレクションって、どんなオブジェクトもAdd()出来てしまいますよね。
前もって指定された形式以外のオブジェクトが入らないようにできるコレクションクラスって
何かあるんでしょうか?
それとも、MSDNにインタフェースについての記述があるように、
どんな時も自作コレクションクラスを作って、自分でその辺の管理をするべきなんでしょうか?
.NET1.1までならフレームワークに用意されてるのはstringに対するStringCollectionくらいかね。
.NET2.0でジェネリクスが追加される事で汎用的な型指定コレクション・List<T>クラスが使えるようになる。
964 :
962:05/01/24 13:35:43
有難うございます。やっぱり2.0出てくるまで簡単には出来ないんですよねぇ。
いいです。今回は、何も気付かない振りして、実装しちゃいます。
まぁ、2.0も今年中には出ますよね。
どうも有り難うございました。
>>962 自前のコレクションクラスを作って、
Addするときに期待しないものが来たら例外を投げるようにするとか。
>>965 まさしく、そんな予感がしていたんですが、面倒そうだったので・・・
そうなんですよね、正しくはそうあるべきだと思います。
でも〜。・゚・(つД`)・゚・
>>962 CollectionBaseクラスを継承しる
>>966 どっかに専用コレクションクラスを生成するツールがあったぞ
969 :
デフォルトの名無しさん:05/01/25 11:47:39
PictureBoxをマウスのドラッグで縮小、拡大させたいのですが、
参考になるHPとか本を誰か知っていませんか?
読み込んだ画像の上でクリックすると、画像の四隅にポイントが出て、
そのポイントをドラッグすることで画像が縮小、拡大する。みたいな。
情報があれば、よろしくお願いします。
>>969 ウィンドウそのものを縮小拡大ではなくて、PictureBoxコントロールを縮小拡大ですか?
そうであればControlとかPictureBoxを継承して自前で作るしかないような気がします。
MouseMoveあたりでマウスの位置を検出して端に近ければ四隅にポイント表示。
四隅に近くてクリックされている間はコントロールをマウスの位置に合わせてリサイズ。
もっと簡単な方法もあるかもしれませんが一応。
>>969 そういうコンテナを作ってドッキングさせるとか
MainMenu のアイテムがクリックされた場合の処理は、
アイテム毎にイベントハンドラを増やさないといけないのでしょうか?
例えば、次のような事をやりたいのですが、なにかいい方法は
ありませんか?
メニュー1_________メニュー2_______メニュー3
__アイテム1-1______アイテム2-1______アイテム3-1
__アイテム1-2______アイテム2-2______アイテム3-2
__アイテム1-3______アイテム2-3______アイテム3-3
のようなメニュー構成になっている時に、
アイテム1-x がクリックされた場合の処理は、メニュー1 の Click で
拾ってメニュー1の中で処理させたいのですが…。
今は、アイテム1-1, アイテム1-2, アイテム1-3 など全ての項目の
Click イベントに1つずつちまちまと処理を追加していっています。
何かいい方法はないでしょうか?
イベントハンドラ共有して、senderを見て発生元調べてswitchで分岐したら。
そういうの登録する仕組み作っとけ
ArrayListを配列にして使用できるんでしょうか。こんな感じで。
ArrayList[] testList = new ArrayList[10];
testList[0].Add( "abc" );
コンパイルは出来ても2行目でエラーになります。
出来れば楽なんですが・・・。
配列もただのオブジェクトなわけで、newしても入れ物を作るだけ。
入れ物の中身は自分で作って下さい。
ArrayList[] testList = new ArrayList[10];
testList[0] = new ArrayList();
testList[0].Add( "abc" );
979 :
デフォルトの名無しさん:05/01/26 11:53:42
ほかの人のソース見ていてinternalが多用されているのですが、
本を読んでもprivateとinternalの違いがよく分からないのです。
教えてください。