ふらっとVisual C#,C♯,C#(初心者用)
このスレッドは
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
関連スレ
ふらっとC#,C♯,C#(初心者用) Part91
http://toro.2ch.net/test/read.cgi/tech/1335089085/
C#, C♯, C#相談室 Part71
http://toro.2ch.net/test/read.cgi/tech/1332575004/
こんな感じでソフトウェア板に立てたらどうかな
ふらっとC#,C♯,C#(初心者用) Part92
■ このスレッドは過去ログ倉庫に格納されています
2012/04/26(木) 21:32:32.95ID:RzRn9VkL0
1524/4
2012/05/05(土) 22:50:31.20ID:iim98xC70 上のコードを実行すると、変数 row の値は「1」ですが、
「SELECT * FROM test」すると、何も格納されていません。
しかし、Visual C# 2010 Express を使用して、
直接テーブルにクエリを発行して入力したデータをSELECTすること
(ExecuteReader()の返り値を参照)はできます。
どのようにすれば、C#のコードでINSERTやUPDATEができるのでしょうか?
(以上です)
「SELECT * FROM test」すると、何も格納されていません。
しかし、Visual C# 2010 Express を使用して、
直接テーブルにクエリを発行して入力したデータをSELECTすること
(ExecuteReader()の返り値を参照)はできます。
どのようにすれば、C#のコードでINSERTやUPDATEができるのでしょうか?
(以上です)
2012/05/05(土) 22:54:23.40ID:Nyop5iOH0
2012/05/05(土) 23:10:18.98ID:jOpn+oX90
INSERTしたのとSELECTしたのでデータベースファイルが違うんじゃね?
156152
2012/05/05(土) 23:27:51.26ID:s0fFTjR502012/05/05(土) 23:32:45.30ID:jOpn+oX90
ttp://social.msdn.microsoft.com/Forums/ja-JP/vbgeneralja/thread/934bdbe3-2217-4cd7-bfc9-ae2ef5b731ac
具体的にはこれなんだけど
具体的にはこれなんだけど
158152
2012/05/06(日) 00:04:16.04ID:M3IW9sbJ0 >>157
重ねてありがとうございます。
プロパティの「出力ディレクトリにコピー」を確認しましたが、
既に「新しい場合はコピーする」になっていました
ちなみに「常にコピーする」に変えてもみましたが、変わりませんでした。
重ねてありがとうございます。
プロパティの「出力ディレクトリにコピー」を確認しましたが、
既に「新しい場合はコピーする」になっていました
ちなみに「常にコピーする」に変えてもみましたが、変わりませんでした。
2012/05/06(日) 00:06:23.44ID:oKHRofvw0
書籍も@ITもざっくり説明しているだけだからな
コピペはできても応用が効かない感じになる
ある程度わかった上で復讐がメモ代わりに見るのはいいけど
やっぱりmsdnが出発点には一番いい
コピペはできても応用が効かない感じになる
ある程度わかった上で復讐がメモ代わりに見るのはいいけど
やっぱりmsdnが出発点には一番いい
2012/05/06(日) 00:14:10.21ID:xh4KhmH40
MSDNは、リファレンスとしては、使うこともあるが、
学習用としては、あまり使わないな。そこらへんは、人それぞれか。
MSDN Blogsの記事(http://blogs.msdn.com/b/nakama/)は、読んでおいて損は、無いと思う。
学習用としては、あまり使わないな。そこらへんは、人それぞれか。
MSDN Blogsの記事(http://blogs.msdn.com/b/nakama/)は、読んでおいて損は、無いと思う。
2012/05/06(日) 01:30:26.83ID:oKHRofvw0
>>160
ここいいな、参考になる
ここいいな、参考になる
2012/05/06(日) 12:14:46.69ID:Dyi3DW+v0
なんか例外出てんじゃないの? catchするの止めてみたら?
2012/05/06(日) 14:01:23.28ID:Q5pbWLBW0
そこは出力すべきだろう
164152
2012/05/07(月) 00:25:37.29ID:m037gZdq02012/05/07(月) 15:25:42.69ID:8qFi5QC30
正規表現についてなんですが、たとえば
001 001 002 002 003 004 004 005 005
とある時、自分の場合00[0-9]でマッチさせるんですが、最初の001にマッチさせたあと次にいきなり002にマッチさせる方法ってないでしょうか?
やはりNextMatchを2回呼ぶしかないのでしょうか?なにかいい方法を教えてください
001 001 002 002 003 004 004 005 005
とある時、自分の場合00[0-9]でマッチさせるんですが、最初の001にマッチさせたあと次にいきなり002にマッチさせる方法ってないでしょうか?
やはりNextMatchを2回呼ぶしかないのでしょうか?なにかいい方法を教えてください
2012/05/07(月) 15:34:29.42ID:UBnHdgfn0
Matchesはだめなん?
2012/05/07(月) 17:15:01.04ID:EsKENrdI0
2012/05/07(月) 17:21:17.61ID:EsKENrdI0
var eroGazou=Enumerable.Range(1,5).Where(i=>{Regex.IsMatch("?(0\d{1}"+i.ToString()+")*");};
2012/05/07(月) 17:23:08.80ID:UBnHdgfn0
170165
2012/05/07(月) 18:37:15.95ID:8qFi5QC302012/05/07(月) 18:57:17.03ID:EsKENrdI0
2012/05/07(月) 22:05:04.46ID:SmzASuRUi
2012/05/07(月) 22:05:57.36ID:/M0Q9y5v0
意味がわかりませんw
174165
2012/05/08(火) 00:16:50.44ID:mTraP+Vz0 この前置きの?ってどういう意味があるんでしょうか?
代替構成体ってやつですか?
代替構成体ってやつですか?
2012/05/08(火) 01:41:39.89ID:7KboTL1k0
ちゃんと読んでないけど
?って0-1文字の何か,だよね
区切りのスペースを吸収してんじゃないのかな
?って0-1文字の何か,だよね
区切りのスペースを吸収してんじゃないのかな
2012/05/08(火) 02:46:45.94ID:gH9z368B0
最初のはてなは何なんだろうな
MSDN見ても書いてなかったわ
MSDN見ても書いてなかったわ
2012/05/08(火) 03:25:06.62ID:hKk999Ma0
perl5準拠の正規表現なので専門スレで聞け
2012/05/08(火) 12:29:27.96ID:gH9z368B0
いや答えをくれよ
2012/05/08(火) 12:31:14.57ID:X0Onj/iH0
C#で正規表現は使えるけど正規表現の記述ルールは
perl5準拠だから分けて考えろよw
perl5準拠だから分けて考えろよw
180名無しさん@お腹いっぱい。
2012/05/08(火) 12:45:19.29ID:du0kGEvB0 001 002 とかの文字列作ってから比較するなら、正規表現じゃなくてstringのcontainで充分だよな
具体的に>>170を書き換えると
if(src.Contains(i.ToString("000")))
{
具体的に>>170を書き換えると
if(src.Contains(i.ToString("000")))
{
2012/05/08(火) 12:56:11.63ID:gH9z368B0
http://msdn.microsoft.com/ja-jp/library/az24scfc.aspx
だからMSDNの正規表現に書いてないんだから最初に?つけるなんてのはないんだよ
必要なのは専門スレにいくことじゃなくてここで?つけてた奴が誤りを認めることだろ
だからMSDNの正規表現に書いてないんだから最初に?つけるなんてのはないんだよ
必要なのは専門スレにいくことじゃなくてここで?つけてた奴が誤りを認めることだろ
2012/05/08(火) 12:59:42.62ID:X0Onj/iH0
MSDNに書いてなくてもperl5準拠で動いてるんだから
正規表現のプロに聞けって
正規表現 Part9
http://toro.2ch.net/test/read.cgi/tech/1323566370/
正規表現のプロに聞けって
正規表現 Part9
http://toro.2ch.net/test/read.cgi/tech/1323566370/
2012/05/08(火) 13:11:39.99ID:gH9z368B0
俺はそんな馬鹿みたいな質問をして恥をかくのは嫌だよ
最初に?つけてた奴が出てきてどういう意図で書いたのか言えばいいだけ
間違った解答をしたんだからその責任がある
くだらない言い争いでスレを汚すのはやめてくれ
最初に?つけてた奴が出てきてどういう意図で書いたのか言えばいいだけ
間違った解答をしたんだからその責任がある
くだらない言い争いでスレを汚すのはやめてくれ
184名無しさん@お腹いっぱい。
2012/05/08(火) 13:13:42.55ID:X0Onj/iH0 恥ってw
匿名掲示板なんてかき捨てだろうにw
下手なプライドでごちゃごちゃ騒いでるほうがみっともないわ
専門スレで聞けば教えてもらえるのに
匿名掲示板なんてかき捨てだろうにw
下手なプライドでごちゃごちゃ騒いでるほうがみっともないわ
専門スレで聞けば教えてもらえるのに
2012/05/08(火) 13:15:50.91ID:gH9z368B0
答えはもうわかってるから
186名無しさん@お腹いっぱい。
2012/05/08(火) 13:23:06.64ID:du0kGEvB0 170のロジックで、何故正規表現が要るのかさっぱり判らん
2012/05/08(火) 13:27:38.59ID:gx7ZjZDr0
最初に?をつけるのは最短一致だよ
つまり最初にマッチしたものだけが有効
何が不満なんだ?
つまり最初にマッチしたものだけが有効
何が不満なんだ?
2012/05/08(火) 13:30:41.33ID:gH9z368B0
var eroGazou=Enumerable.Range(1,5).Where(i=>{Regex.IsMatch("?(0\d{1}"+i.ToString()+")*");};
この正規表現なんかメチャクチャじゃん
なにとマッチさせようとしてるわけ?
なんでiは1から5で決め打ちなのに2つ目は\dなの?
そのあとの+は何?11とか111とかにマッチさせたいの?
それに対してなるほどとか言ってるのは何? 自演?
この正規表現なんかメチャクチャじゃん
なにとマッチさせようとしてるわけ?
なんでiは1から5で決め打ちなのに2つ目は\dなの?
そのあとの+は何?11とか111とかにマッチさせたいの?
それに対してなるほどとか言ってるのは何? 自演?
2012/05/08(火) 13:32:31.85ID:gH9z368B0
最短一致は+とか*の後につけるんだよ
わけの分からんことをいわんでくれ
わけの分からんことをいわんでくれ
2012/05/08(火) 13:33:40.30ID:gH9z368B0
ああ+は違ったわ
2012/05/08(火) 13:36:09.26ID:GymhAQMh0
なるほどって言ってるのは、エロ画像の部分に対してじゃないの?頭冷やせよ。
2012/05/08(火) 13:43:15.63ID:gH9z368B0
試したけど最初に?が付いてると正規表現の解析時点で例外が飛ぶ
最後についてる*のおかげで何もない文字列にもマッチする
知ったかぶって初心者に間違った知識をひけらかして開き直ってるんじゃないよ
なにが専門スレで聞けだこんな初歩の初歩の内容で
最後についてる*のおかげで何もない文字列にもマッチする
知ったかぶって初心者に間違った知識をひけらかして開き直ってるんじゃないよ
なにが専門スレで聞けだこんな初歩の初歩の内容で
2012/05/08(火) 14:02:59.85ID:5IWNInEq0
その煽って答えを引き出そうってのは
プログラム板でやれよキチガイ
正解をいまコピペしようと思ったがやめたわ
プログラム板でやれよキチガイ
正解をいまコピペしようと思ったがやめたわ
2012/05/08(火) 14:05:07.75ID:gH9z368B0
IDかえんな鬱陶しい
2012/05/08(火) 15:37:55.87ID:llgrnxWzi
結局IDあったって最終的にはモラルの問題よね
2012/05/08(火) 18:25:59.23ID:gx7ZjZDr0
>>188
1から5ってお前が001から005までしか出してないじゃんw
1から5ってお前が001から005までしか出してないじゃんw
197名無しさん@お腹いっぱい。
2012/05/08(火) 19:00:12.49ID:du0kGEvB0 >>196
その言い訳はあり得ないw
その言い訳はあり得ないw
198165
2012/05/08(火) 23:08:30.90ID:mTraP+Vz02012/05/09(水) 00:59:16.34ID:kxP9CGP20
×吸いませんでした。
○素マンコ
○素マンコ
2012/05/09(水) 04:17:07.53ID:LNIbcQkU0
こんにちは。
xmlとかの使いかたがわからないので力技でその環境に合わせたexeをビルドする、ってプログラムを組もうとしています。
で、最後の最後で引っかかってしまいました。
csc.exeを叩いてビルドさせようと思ったもののcsc.exeだけでは動作しません。(当たり前なのはわかっています)
.netのフォルダごとまとめて配布しちゃうとかすればビルドの面では問題ない(ファイルサイズとか他にもいろいろマズそう)ですが、それは避けたいところです。
それ以外の方法でC#をビルドする、ってのはどうすればいいんでしょうか。
xmlとかの使いかたがわからないので力技でその環境に合わせたexeをビルドする、ってプログラムを組もうとしています。
で、最後の最後で引っかかってしまいました。
csc.exeを叩いてビルドさせようと思ったもののcsc.exeだけでは動作しません。(当たり前なのはわかっています)
.netのフォルダごとまとめて配布しちゃうとかすればビルドの面では問題ない(ファイルサイズとか他にもいろいろマズそう)ですが、それは避けたいところです。
それ以外の方法でC#をビルドする、ってのはどうすればいいんでしょうか。
201名無しさん@お腹いっぱい。
2012/05/09(水) 04:28:12.63ID:ykLw+OKj0 XmlReaderとかXmlWriterとか・・・
202名無しさん@お腹いっぱい。
2012/05/09(水) 04:28:52.13ID:KxtYeqV+0 ・素直にXMLを使う
・プログラムからビルド
(http://www.atmarkit.co.jp/fdotnet/dotnettips/101compileinvoke/compileinvoke.html)
・プログラムからビルド
(http://www.atmarkit.co.jp/fdotnet/dotnettips/101compileinvoke/compileinvoke.html)
2012/05/09(水) 04:44:56.24ID:LNIbcQkU0
プログラムからビルド、ってのもできるんですね。個人的にそれはちょっと避けたいのでごめんなさい。
XMLとかは一切勉強してないのでそこからですかね。
build.batとかを作ってuserにcsc.exeのpathをいじらせる、それをプログラムに叩かせる ってのを想定して試しに組んでみたもののいろいろやる必要があるっぽいですね。
batはユーザに叩かせるものにしようと思います。それぐらいやってほしいところですし…。
ありがとうございました。
XMLとかは一切勉強してないのでそこからですかね。
build.batとかを作ってuserにcsc.exeのpathをいじらせる、それをプログラムに叩かせる ってのを想定して試しに組んでみたもののいろいろやる必要があるっぽいですね。
batはユーザに叩かせるものにしようと思います。それぐらいやってほしいところですし…。
ありがとうございました。
2012/05/09(水) 05:30:58.28ID:tCunqWXC0
せめてMsbuild
2012/05/09(水) 05:33:04.68ID:LNIbcQkU0
206名無しさん@お腹いっぱい。
2012/05/09(水) 05:47:55.49ID:KxtYeqV+02012/05/09(水) 07:28:32.03ID:LNIbcQkU0
2012/05/11(金) 17:58:11.91ID:KWXw6kgy0
過疎り果ててるな・・・・
2012/05/11(金) 21:29:13.65ID:f0A2C8JG0
位置づけ的にこっちは避難所みたいなもんだから別にそれはそれで良いんじゃね
この板は確かなかなか落ちなかったはずだし
この板は確かなかなか落ちなかったはずだし
2012/05/12(土) 19:51:10.89ID:UIeofCgi0
久しぶりにここに来たのだが
前からIDの表示ってあったっけ?
前からIDの表示ってあったっけ?
2012/05/12(土) 20:09:30.99ID:6NFukbEw0
よく板の名前を見てみろw
2012/05/12(土) 20:21:56.03ID:Ouq+wRbz0
息をするように自演してるからこっちでやらかしそうで怖い
2012/05/12(土) 20:22:28.28ID:EnOaymSY0
死ねよ
2012/05/13(日) 17:40:40.30ID:/aU9UOq3i
まかせとけ
2012/05/13(日) 17:45:37.48ID:hQ2ica5m0
いや俺が
2012/05/13(日) 21:25:25.49ID:xD8ADFqi0
public Form1()
{
InitializeComponent();
var MonthCtrl = new MonthCalendar();
MonthCtrl.ContextMenuStrip = this.contextMenuStrip1;
var CtrlHost = new ToolStripControlHost(MonthCtrl);
this.testAToolStripMenuItem.DropDownItems.Add(CtrlHost);
}
http://www1.axfc.net/uploader/Img/so/142186.jpg
メニューを開いたまま右クリックでコンテキストメニューを開くにはどのようにすればいいでしょうか
{
InitializeComponent();
var MonthCtrl = new MonthCalendar();
MonthCtrl.ContextMenuStrip = this.contextMenuStrip1;
var CtrlHost = new ToolStripControlHost(MonthCtrl);
this.testAToolStripMenuItem.DropDownItems.Add(CtrlHost);
}
http://www1.axfc.net/uploader/Img/so/142186.jpg
メニューを開いたまま右クリックでコンテキストメニューを開くにはどのようにすればいいでしょうか
2012/05/13(日) 21:32:34.94ID:Axjqo1yk0
ToolStripDropDownMenuを継承して
OnClosingをオーバーライドしてコンテキストメニュー表示時はe.Cancel = trueにする
その後閉じる処理をどこかでしないと表示しっぱなしになるからそこんとこうまく処理する
OnClosingをオーバーライドしてコンテキストメニュー表示時はe.Cancel = trueにする
その後閉じる処理をどこかでしないと表示しっぱなしになるからそこんとこうまく処理する
2012/05/13(日) 22:45:07.31ID:xD8ADFqi0
2012/05/17(木) 20:47:43.98ID:/wFJphTP0
Form1.csに色々と機能を詰め込んでツールを作っています
ツールの機能が増えてきたので、classを分けようと考えているのですが、どのように分けるか迷っています
・メインのテキストボックス(仮にtextbox1とする)があり、各機能からtextbox1のプロパティにアクセスする
・機能ごとに使用するボタンやコンボボックスが複数ある
思いつく方法としては
1.textbox1のプロパティをgetsetでForm1.csのプロパティとした上で、機能ごとにカスタムコントロール化する
→各ボタンのclickedが各カスタムコントロールのソースで書ける点がメリットだが、カスタムコントロール内のプロパティをForm1.csのデザイナーでいじることが面倒になる
2.各ボタンはForm1.cs上で設置したままで、各機能ごとにclassを作成し、Form1.cs上のソースでclickedが呼ばれたら各機能のclass内のメソッドを呼ぶようにする
→各ボタンのプロパティをForm1.csのデザイナーで設定できる点がメリットだが、Form1.cs上にclickedが残ることで綺麗に整理できた気がしない
今のところ1でやろうかと思っているのですが、アドバイスやこうするといいぜって方法があれば教えて下さい
ツールの機能が増えてきたので、classを分けようと考えているのですが、どのように分けるか迷っています
・メインのテキストボックス(仮にtextbox1とする)があり、各機能からtextbox1のプロパティにアクセスする
・機能ごとに使用するボタンやコンボボックスが複数ある
思いつく方法としては
1.textbox1のプロパティをgetsetでForm1.csのプロパティとした上で、機能ごとにカスタムコントロール化する
→各ボタンのclickedが各カスタムコントロールのソースで書ける点がメリットだが、カスタムコントロール内のプロパティをForm1.csのデザイナーでいじることが面倒になる
2.各ボタンはForm1.cs上で設置したままで、各機能ごとにclassを作成し、Form1.cs上のソースでclickedが呼ばれたら各機能のclass内のメソッドを呼ぶようにする
→各ボタンのプロパティをForm1.csのデザイナーで設定できる点がメリットだが、Form1.cs上にclickedが残ることで綺麗に整理できた気がしない
今のところ1でやろうかと思っているのですが、アドバイスやこうするといいぜって方法があれば教えて下さい
220名無しさん@お腹いっぱい。
2012/05/17(木) 20:56:58.37ID:BRanfvHF0 抽象的なアドバイスで申し訳ないけれど、
コントロールを起点に思考するのではなく、データを起点に思考すると良いかと思う。
A, B, Cというコントロールをこういう風に操作するから・・・ではなく、
α, β, γというデータをこういう風に編集するから・・・で考える。
コントロールは、それぞれの編集において
・編集処理の起点(ボタン操作などのイベント)
・編集結果の表示
である、と捉えておいた方が、良いと思う。
コントロールを起点に思考するのではなく、データを起点に思考すると良いかと思う。
A, B, Cというコントロールをこういう風に操作するから・・・ではなく、
α, β, γというデータをこういう風に編集するから・・・で考える。
コントロールは、それぞれの編集において
・編集処理の起点(ボタン操作などのイベント)
・編集結果の表示
である、と捉えておいた方が、良いと思う。
2012/05/17(木) 20:58:44.82ID:UP2D4Go60
MVCでぐぐれ
2012/05/17(木) 21:13:50.69ID:aER5I2nt0
たぶんMVCだがMVVMについては、考え方がいろいろあるので間違ってるかもしれないが…
UIであるフォームやコントロールは、ユーザーとの対話であることが前提だと思う。
具体的な処理とは、データベースに接続したり、データを取得するとか、ネットワークに接続する等。
この具体的な処理をモデル。
Form1.csなりUIを取り扱うコードで必要なのは、ユーザーからの要求・結果の表示に留めておく。
それらのUIに関する処理をビュー。
それらの間に位置するのがビューモデル。
ビューモデルの役割は、モデルのデータを取ってきてビューに表示できる結果を作ったりする。
ListBoxコントロールとかDataGridViewコントロールのDataSourceに関連付ける為のリストなどをビューモデルに持たせておく。
ビューであるフォームやコントロールは、ビューモデルが公開するイベントなどを使って
結果の表示やビューが公開するメソッドを呼んで何かしら操作の要求を行うようにする。
つまり、機能そのものとユーザーとの対話部分は、きっちりと分けて作っておいて
UIが無くても機能自体は、使えるようにする感じに。
※そこまでやるなら、WPF使えよ…という突っ込みは、受け付けていません。
UIであるフォームやコントロールは、ユーザーとの対話であることが前提だと思う。
具体的な処理とは、データベースに接続したり、データを取得するとか、ネットワークに接続する等。
この具体的な処理をモデル。
Form1.csなりUIを取り扱うコードで必要なのは、ユーザーからの要求・結果の表示に留めておく。
それらのUIに関する処理をビュー。
それらの間に位置するのがビューモデル。
ビューモデルの役割は、モデルのデータを取ってきてビューに表示できる結果を作ったりする。
ListBoxコントロールとかDataGridViewコントロールのDataSourceに関連付ける為のリストなどをビューモデルに持たせておく。
ビューであるフォームやコントロールは、ビューモデルが公開するイベントなどを使って
結果の表示やビューが公開するメソッドを呼んで何かしら操作の要求を行うようにする。
つまり、機能そのものとユーザーとの対話部分は、きっちりと分けて作っておいて
UIが無くても機能自体は、使えるようにする感じに。
※そこまでやるなら、WPF使えよ…という突っ込みは、受け付けていません。
2012/05/17(木) 21:37:52.78ID:t3KcC4L10
>>219
Form1.csとかにロジックを書くのは常に悪手だよ
class Kinou
{
public Kinou(CustomControl cc)
{
cc.Event += (sender, e) => EventAction();
...
}
void EventAction(){ ... }
}
機能ごとに自作クラスに必要なコントロールを入れて何をするか一個一個書くべき
Formとかはレイアウトの都合でデザイナで自動生成されるだけだから
機能ごとにクラス分けしたりするには不向き
Formのメンバなんか多すぎてインテリセンスが使い物にならなくなるしね
だから2を一歩先に進めて全部自作クラスでやればいい
Form1.csとかにロジックを書くのは常に悪手だよ
class Kinou
{
public Kinou(CustomControl cc)
{
cc.Event += (sender, e) => EventAction();
...
}
void EventAction(){ ... }
}
機能ごとに自作クラスに必要なコントロールを入れて何をするか一個一個書くべき
Formとかはレイアウトの都合でデザイナで自動生成されるだけだから
機能ごとにクラス分けしたりするには不向き
Formのメンバなんか多すぎてインテリセンスが使い物にならなくなるしね
だから2を一歩先に進めて全部自作クラスでやればいい
2012/05/17(木) 21:40:42.89ID:/wFJphTP0
>>220-222
レスありがとうございます
MVCについて調べてきました
「コントロール→モデルのアクセスはあるが、モデル→コントロールやモデル→ヴューのアクセスはない」という考え方は意識していませんでした
すると、機能ごとにカスタムコントロール化するというよりも、各機能のメソッドをモデルとして抜き出して、
textbox1のプロパティは引数として与えて、モデル処理後に返させる or 別にデータを用意してモデルに管理させて結果として返させる という形にした方が良いのかと思いました
モデル→コントロールというアクセスがない方向でクラス分けを考えてみます
レスありがとうございます
MVCについて調べてきました
「コントロール→モデルのアクセスはあるが、モデル→コントロールやモデル→ヴューのアクセスはない」という考え方は意識していませんでした
すると、機能ごとにカスタムコントロール化するというよりも、各機能のメソッドをモデルとして抜き出して、
textbox1のプロパティは引数として与えて、モデル処理後に返させる or 別にデータを用意してモデルに管理させて結果として返させる という形にした方が良いのかと思いました
モデル→コントロールというアクセスがない方向でクラス分けを考えてみます
2012/05/17(木) 21:46:23.75ID:t3KcC4L10
モデルからコントロールはもちろんいじっちゃだめだよね
でもモデルで処理するだけなら通常のプログラミングの範囲で
GUIの困難はそこを分離しただけじゃ解決しないからね
でもモデルで処理するだけなら通常のプログラミングの範囲で
GUIの困難はそこを分離しただけじゃ解決しないからね
2012/05/17(木) 21:49:27.21ID:aER5I2nt0
モデル:元請け業者
ビューモデル:仲介業者
ビュー:下請け業者
下請け業者から元請け業者に直接要求することは、できないし、
元請けも下請けに直接、何かすることは、できない。必ず仲介業者を通さないといけない。
ビューモデル:仲介業者
ビュー:下請け業者
下請け業者から元請け業者に直接要求することは、できないし、
元請けも下請けに直接、何かすることは、できない。必ず仲介業者を通さないといけない。
2012/05/17(木) 21:51:15.23ID:/wFJphTP0
2012/05/17(木) 22:08:47.35ID:t3KcC4L10
>>227
>>219の1はよくわかんないけど
Form1.csのプロパティにしたりするような、Form1.csを肥大化させるようなことはやめて
各機能ごとに自作クラスを作る
ボタンを押したらテキストを改変してテキストボックスに入れる、って言う処理だったら
class Hoge
{
public Hoge(Button btn, TextBox tb)
{
btn.Click += (sender,e) => tb.Text = Model.Hoge(tb.Text);
}
}
まあこんな感じで、その機能に必要な物があったらこのクラスにどんどん入れていく
機能ごとに必要なコントロールをまとめたクラスを作ってGUIの複雑さを軽減する
ロジックはModelのクラスに分離する
>>219の1はよくわかんないけど
Form1.csのプロパティにしたりするような、Form1.csを肥大化させるようなことはやめて
各機能ごとに自作クラスを作る
ボタンを押したらテキストを改変してテキストボックスに入れる、って言う処理だったら
class Hoge
{
public Hoge(Button btn, TextBox tb)
{
btn.Click += (sender,e) => tb.Text = Model.Hoge(tb.Text);
}
}
まあこんな感じで、その機能に必要な物があったらこのクラスにどんどん入れていく
機能ごとに必要なコントロールをまとめたクラスを作ってGUIの複雑さを軽減する
ロジックはModelのクラスに分離する
2012/05/17(木) 22:21:48.71ID:/wFJphTP0
なるほど、わかりました
自分が現在記載している処理だとtextbox1のプロパティを直接いじっているので、自作した他クラスからForm1.cs内のtextbox1のプロパティをいじるには、
Form1.csのプロパティにしてしまうのが簡単かなと思ったので、「textbox1のプロパティをgetsetでForm1.csのプロパティとした上で」という書き方になっていました
自作クラスの引数にした方がよいということですね
自分が現在記載している処理だとtextbox1のプロパティを直接いじっているので、自作した他クラスからForm1.cs内のtextbox1のプロパティをいじるには、
Form1.csのプロパティにしてしまうのが簡単かなと思ったので、「textbox1のプロパティをgetsetでForm1.csのプロパティとした上で」という書き方になっていました
自作クラスの引数にした方がよいということですね
2012/05/17(木) 22:22:25.54ID:/wFJphTP0
ありがとうございました
2012/05/20(日) 00:02:48.81ID:do1RvL6p0
FlowLayoutPanelの様にAddで加えたコントロールを自動に並べるコントロールで、
並べるコントロールの位置を次は下、次は右、次は下といったように選べるコントロールはないでしょうか?
□
□□□
□□
みたいな感じで並べたいです
コントロールのLocationを直接指定していくしかないでしょうか
並べるコントロールの位置を次は下、次は右、次は下といったように選べるコントロールはないでしょうか?
□
□□□
□□
みたいな感じで並べたいです
コントロールのLocationを直接指定していくしかないでしょうか
2012/05/20(日) 00:24:59.24ID:DcSMnQWK0
そのぐらい自分で計算していれりゃええが
2012/05/20(日) 00:26:57.61ID:do1RvL6p0
今、調べてるとTableLayoutPanelとかもあったのですが、普通に計算した方がよさそう・・・
素直に計算して入れます
素直に計算して入れます
2012/05/20(日) 04:48:51.35ID:TJmnCt7r0
2012/05/20(日) 18:34:02.07ID:DcSMnQWK0
var url = "http://www.hoge.com/";
var elem = new XElement(XmlConvert.EncodeName(url), "a");
これで落ちるんだけどなんでだろう
urlを変換してXNameに使うのは無理なんだろうか
var elem = new XElement(XmlConvert.EncodeName(url), "a");
これで落ちるんだけどなんでだろう
urlを変換してXNameに使うのは無理なんだろうか
2012/05/20(日) 18:40:59.47ID:DcSMnQWK0
ああ普通に出来たわ
EncodeLocalNameでいいのか
EncodeLocalNameでいいのか
238名無しさん@お腹いっぱい。
2012/05/20(日) 19:07:20.83ID:vz/Du8h202012/05/20(日) 21:09:09.28ID:CjyZExuu0
2012/05/22(火) 22:15:56.28ID:Zemo3eRi0
Windowsフォームのデータバインディングについてだが、
例えば、こんな感じにtargetControlのValueプロパティにViewModelのDataプロパティをバインドさせるとして、
targetControl.DataBindings.Add( "Value" , ViewModel , "Data" );
ViewModel 側でINotifyPropertyChangedを実装して、
OnPropertyChanged("Data");のようにして呼び出したときにUIとスレッドが異なっていると、
例外(InvalidOperationException)が発生する。まあ、これは、当然といえば当然なのだが、
ViewModelでは、UIスレッドを意識しないようにしたいし、コントロールのValueプロパティなんかでも
スレッドの違いを意識しないようにしたい。
今のところ思いついた方法が、コントロールが生成された直後にコントロールのSynchronizationContextを
取得してViewModelに関連付けてOnPropertyChangedでSynchronizationContextを通して
PropertyChangedイベントを呼び出すという方法だが、どうにも良い方法とは思えない気がする。
これ以外に何か良い解決方法は、ありますか?
例えば、こんな感じにtargetControlのValueプロパティにViewModelのDataプロパティをバインドさせるとして、
targetControl.DataBindings.Add( "Value" , ViewModel , "Data" );
ViewModel 側でINotifyPropertyChangedを実装して、
OnPropertyChanged("Data");のようにして呼び出したときにUIとスレッドが異なっていると、
例外(InvalidOperationException)が発生する。まあ、これは、当然といえば当然なのだが、
ViewModelでは、UIスレッドを意識しないようにしたいし、コントロールのValueプロパティなんかでも
スレッドの違いを意識しないようにしたい。
今のところ思いついた方法が、コントロールが生成された直後にコントロールのSynchronizationContextを
取得してViewModelに関連付けてOnPropertyChangedでSynchronizationContextを通して
PropertyChangedイベントを呼び出すという方法だが、どうにも良い方法とは思えない気がする。
これ以外に何か良い解決方法は、ありますか?
2012/05/23(水) 02:42:36.72ID:qa6OyKBe0
NotifyPropertyChangedみたいなのはうまい解決をしようとして
逆に問題を複雑にしてるだけなような気がする
逆に問題を複雑にしてるだけなような気がする
2012/05/25(金) 10:35:25.98ID:aQ/syKw30
オブジェクトを保存するときXElementに変換してXMLで書き出しているのですが、
XElementに変換する一般的な書き方というのはありますか?
IXmlSerializableのようなものがあれば知りたいです。よろしくお願いします
XElementに変換する一般的な書き方というのはありますか?
IXmlSerializableのようなものがあれば知りたいです。よろしくお願いします
2012/05/25(金) 10:42:07.95ID:0UAn5u+k0
2012/05/25(金) 12:31:54.65ID:aQ/syKw30
>>243
XmlSerializerは手間の割りに融通が利かないのでちょっと・・・
IXmlSerializable.WriteXml()のように再帰的にXElementを回収してくれるような仕組みがすでにあるかどうか知りたかった感じです
XmlSerializerは手間の割りに融通が利かないのでちょっと・・・
IXmlSerializable.WriteXml()のように再帰的にXElementを回収してくれるような仕組みがすでにあるかどうか知りたかった感じです
2012/05/25(金) 12:53:36.41ID:Hmr1Uhd40
2012/05/25(金) 14:45:18.12ID:T48ZmvCh0
ContextMenuStrip に縦方向のスクロールバーを付けたいのですが、なんとかならないでしょうか。
アイテムが多くて画面に収まらないときはメニューの上下端に▲、▼が現れてそれを押すと
スクロールしますが、それではなくスクロールバーを付けたいのです。
ComboBoxのメニューのようなスクロールバーです。
VisualStudioでコードを入力しているときにメソッドがポッと出てくるメニューのようなスクロールバーです。
public partial class UserControl1 : ContextMenuStrip
{
public UserControl1() {
InitializeComponent();
this.VScroll = true;
}
}
こんなこともやってみましたがダメでした。
アイテムが多くて画面に収まらないときはメニューの上下端に▲、▼が現れてそれを押すと
スクロールしますが、それではなくスクロールバーを付けたいのです。
ComboBoxのメニューのようなスクロールバーです。
VisualStudioでコードを入力しているときにメソッドがポッと出てくるメニューのようなスクロールバーです。
public partial class UserControl1 : ContextMenuStrip
{
public UserControl1() {
InitializeComponent();
this.VScroll = true;
}
}
こんなこともやってみましたがダメでした。
2012/05/25(金) 17:19:46.33ID:54oiiha70
なんとかならなくもないだろうけど。
プロパティひとつ設定すればというお手軽な方法はないな
ToolStripDropDownから派生して、スクロールバー表示時のアイテムの幅自前計算するとか
もしかしたらToolStripから派生して自前でToolStripItemの管理するはめになりそう
むしろFormから作ったほうが簡単な予感がする
BorderなくしてListBoxでも全体に貼り付けてとか
プロパティひとつ設定すればというお手軽な方法はないな
ToolStripDropDownから派生して、スクロールバー表示時のアイテムの幅自前計算するとか
もしかしたらToolStripから派生して自前でToolStripItemの管理するはめになりそう
むしろFormから作ったほうが簡単な予感がする
BorderなくしてListBoxでも全体に貼り付けてとか
2012/05/26(土) 10:47:45.49ID:/w9VkIqN0
>>247
やはりお手軽にはできなそうですか。
ListViewを張り付けたFormを試してみようと思います。
フォーカスが外れたら、消える。
ListViewのSelectedIndexChangedで何かがクリックされたとみなして
メニューが選択されたときの動作を行う。
こんな感じでしょうか。
やはりお手軽にはできなそうですか。
ListViewを張り付けたFormを試してみようと思います。
フォーカスが外れたら、消える。
ListViewのSelectedIndexChangedで何かがクリックされたとみなして
メニューが選択されたときの動作を行う。
こんな感じでしょうか。
2012/05/26(土) 16:44:22.18ID:Oznxncr00
画像のバイト列をImageに表示したいのですが真っ白なままでどうもうまくいきません。
ローカルファイルをSourceにUriで指定すると表示されるのでXAML側の記述は問題ないと思うのですが・・・
↓こんなコードですがどこに問題があるのでしょうか?
http://ideone.com/7puAt
何かアドヴァイスいただけると助かります。
ローカルファイルをSourceにUriで指定すると表示されるのでXAML側の記述は問題ないと思うのですが・・・
↓こんなコードですがどこに問題があるのでしょうか?
http://ideone.com/7puAt
何かアドヴァイスいただけると助かります。
2012/05/26(土) 21:50:26.72ID:qEPXpQfe0
速度に関する質問です
下記の同じ結果を出す、ちょっと複雑な処理があったとします
(内容はfor文中にrを元にして、下記の通り、int型変数R、G、Bを作成します
r→R、G、B 0→0,0,0 1→1,0,0 2→0,1,0 3→0,0,1 4→1,1,1 5→2,1,1 〜)
for (int r = 0; r < 100000; r++)
{
int R = r / 4; if (r % 4 == 1) R++;
int G = r / 4; if (r % 4 == 2) G++;
int B = r / 4; if (r % 4 == 3) B++;
}
for (int r = 0; r < 100000; r++)
{
int R = r / 4 + (r + 3) % 4 / 3;
int G = r / 4 + (r + 2) % 4 / 3;
int B = r / 4 + (r + 1) % 4 / 3;
}
この処理を10回処理させたところ、処理速度は10回とも0.0016代と0.0024代になりました
一例
if文タイプ
00:00:00.0016217
複雑計算タイプ
00:00:00.0024181
if文を挟む方が遅いイメージだったのですが、複雑な計算をさせた方が遅いものなのでしょうか?
下記の同じ結果を出す、ちょっと複雑な処理があったとします
(内容はfor文中にrを元にして、下記の通り、int型変数R、G、Bを作成します
r→R、G、B 0→0,0,0 1→1,0,0 2→0,1,0 3→0,0,1 4→1,1,1 5→2,1,1 〜)
for (int r = 0; r < 100000; r++)
{
int R = r / 4; if (r % 4 == 1) R++;
int G = r / 4; if (r % 4 == 2) G++;
int B = r / 4; if (r % 4 == 3) B++;
}
for (int r = 0; r < 100000; r++)
{
int R = r / 4 + (r + 3) % 4 / 3;
int G = r / 4 + (r + 2) % 4 / 3;
int B = r / 4 + (r + 1) % 4 / 3;
}
この処理を10回処理させたところ、処理速度は10回とも0.0016代と0.0024代になりました
一例
if文タイプ
00:00:00.0016217
複雑計算タイプ
00:00:00.0024181
if文を挟む方が遅いイメージだったのですが、複雑な計算をさせた方が遅いものなのでしょうか?
2012/05/26(土) 22:03:04.02ID:DTKuZabL0
もっと繰り返し回数多くしたほうがいいんじゃないの
差が微妙すぎてよくわからない
あとr+2 r+1 rじゃないの同じ結果にしたいんだったら
あと計算結果とっといてどこかで使わないと最適化で捨てられちゃうんじゃない
複雑な計算させたほうが早かったりif文のほうが早かったりいろいろあると思うけどね
最適化の具合とかで
差が微妙すぎてよくわからない
あとr+2 r+1 rじゃないの同じ結果にしたいんだったら
あと計算結果とっといてどこかで使わないと最適化で捨てられちゃうんじゃない
複雑な計算させたほうが早かったりif文のほうが早かったりいろいろあると思うけどね
最適化の具合とかで
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【東京】乗用車が歩行者をはね11人ケガ、うち2人重体 現場に残されたセダンの運転手が衝突後に逃走…ひき逃げ事件として捜査 足立 [ぐれ★]
- 【速報】東京・足立区のひき逃げ事故 警視庁が運転手とみられる人物確保 [Ailuropoda melanoleuca★]
- スペイン、移民受け入れで成長 1人当たりGDP日本超え ★2 [蚤の市★]
- 尖閣周辺に中国船、10日連続 いずれも機関砲搭載 ★2 [蚤の市★]
- 「『中国との対話望む』日本側の姿勢は偽善」 中国共産党系国際紙が批判 高市総理の答弁撤回改めて求める [蚤の市★]
- 高市内閣の支持率72%、高い水準維持…読売世論調査 ★2 [尺アジ★]
- 【高市速報】足立区でテロ [931948549]
- 🏡👧👩💥🚗👴💨プリウスミサイル発射ぁぁ!
- おーとーこーはー、汗かいてべそかいて
- 【悲報】高市政権外務省「旧敵国条項、既に死文化しただろ!!!!」Xで発信 [115996789]
- 足立区で11人ひき逃げ
- 【悲報】お母さん、息子の集めたガンプラを全てゴミ捨て場に断捨離してしまうwwwwwwwwwwwwwwwwwwww [802034645]
