トップページ⇒tech
1001コメント244KB

ふらっとVisual C#,C♯,C#(初心者用) Part101

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/01/09(水) 00:51:11.11
このスレッドは
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、
もしくは質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からない場合など、勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますが、
ご了承下さい。

なお、テンプレ2行目が読めない回答者は邪魔なので後述のC#相談室に移動して下さい。

>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。

前スレ
ふらっとVisual C#,C♯,C#(初心者用) Part100
http://toro.2ch.net/test/read.cgi/tech/1354437126/

関連スレ
C#, C♯, C#相談室 Part78
http://toro.2ch.net/test/read.cgi/tech/1356268827/
0002デフォルトの名無しさん2013/01/09(水) 07:38:21.17
>>1
おつ
0003デフォルトの名無しさん2013/01/09(水) 09:09:22.63
5時間ぐらいスレ立ってなかったのか
0004デフォルトの名無しさん2013/01/09(水) 12:23:38.27
通は会話もC#で行う
0005デフォルトの名無しさん2013/01/09(水) 13:08:55.70
リアルで2ちゃん用語使っちゃう人みたいだね
0006デフォルトの名無しさん2013/01/09(水) 16:17:01.59
質問させてください。
WPF+MVVMモデルで、
「ボタンをクリックしたら、テキストブロックにボタンの名前(Content)が表示される」というプログラムを作りたい場合、
どのように実装したらよいものでしょうか。

コードビハインドを使えば簡単そうなのですが、
MVVMの勉強をしているためコードビハインドを避けて実装したいと考えています。
Viewにあるボタンの名前をどうにかしてViewModelに持ってきて、その名前を使ってテキストブロックの文字を更新したいのですが、
ボタン名を持ってくるにはどうすればよいのかわからず・・・

初心者なので要領を得ない質問になっているかもしれませんが、
エスパーでも結構ですのでどなたかお答えいただけないでしょうか。
0007デフォルトの名無しさん2013/01/09(水) 16:20:28.51
私にはわかりませーん
0008デフォルトの名無しさん2013/01/09(水) 17:19:08.86
WindowsフォームのchartコントロールでLineチャートを使っています。
配列からデータを追加していくとき、数値がnullの部分があるので、そこは空白にして飛ばしたいと考えています。
chart1.Series[0].Points.Add(???)
の???には何を入れればいいのでしょうか?
(nullやDouble.NaNを入れてみると、nullの場合は描画に失敗し、NaNの場合は0として描画されてしまいます。
EmptyPointStyleはAverageに設定してあります。)
アドバイスをお願いします。
0009デフォルトの名無しさん2013/01/09(水) 17:26:42.36
abstract 宣言された get のみのプロパティをオーバーライドしたいんだけど:

public abstract string Hoge { get; }
 ↓
public override string Hoge { get { return "hoge"; } }
 → Bは継承抽象メンバーA.Hoge.setを実装しません
public override string Hoge { get { return "hoge"; } set { } }
 → Bは継承抽象メンバーA.Hoge.setを実装しません
 → Aに、オーバーライド可能な set アクセサーがないため、オーバーライドできません
public string Hoge { override get { return "hoge"; } }
 → そもそも構文エラー

どう書けば良いんでしょうか???
0010デフォルトの名無しさん2013/01/09(水) 17:30:16.46
無理。
派生されたとき、setに変なオーバーライドされないようにってことなんだろうが、
そこは、派生クラスの責任として捉えるしかない。
制約するなら getのみのプロパティを作って、基底クラスでは、別のメソッドなりでフィールドを更新するぐらいだろう。
0011デフォルトの名無しさん2013/01/09(水) 17:33:57.94
マジで! これ Windows Azure のクラスなんだけど…
Microsoft.WindowsAzure.ServiceRuntime.LocalResource ← これのテスト用モックを作ってます
0012デフォルトの名無しさん2013/01/09(水) 18:44:04.02
getのみの抽象プロパティは問題なくオーバーライドできるはずだけど
ドキュメントに出てないだけで多分本当はgetのみじゃなくて{ get; internal set; }なんだろうな
LocalResourceクラス見てみたけど、この程度なら全部ラップしてインターフェイス被せとけばいいだろ
0013 忍法帖【Lv=40,xxxPT】(1+0:5) 2013/01/09(水) 21:43:53.40
てすてす
0014デフォルトの名無しさん2013/01/09(水) 22:51:49.46
>>6
ボタン名をVMに持ってきとけば?
Button.Contentもバインディング
0015デフォルトの名無しさん2013/01/10(木) 15:01:18.00
Windows AzureはC#の仕様全くわかってない奴が作ってるのか
0016デフォルトの名無しさん2013/01/10(木) 15:50:57.83
abstractプロパティでget internal setか・・・
嫌がらせには最高だな
001792013/01/10(木) 19:36:31.92
なるほど、internal set で宣言されてたらこうなりそうですねー。
ありがとうございました orz
0018デフォルトの名無しさん2013/01/10(木) 20:13:08.86
すみません。

たとえばTeacupの掲示板に、毎日定時連絡を自動で書き込みたいのですが

これの方法って紹介しているところありますかね。

信じて欲しいのですが、決して嵐がしたいわけではありません。
0019デフォルトの名無しさん2013/01/10(木) 20:25:07.57
C#としてはWebRequestの使い方ぐらいしかポイントがないんで、自分でHTMLの勉強をして勝手に作って
0020デフォルトの名無しさん2013/01/10(木) 20:33:50.31
>>19
なるほど。。。
0021デフォルトの名無しさん2013/01/10(木) 20:37:19.41
パブリック継承できない抽象クラスってMSのライブラリでは珍しくないが
コンストラクタがinternalじゃないのは不親切だな
0022デフォルトの名無しさん2013/01/11(金) 11:31:06.59
ILSpyなんかで何となくSystem.〜〜辺りを眺めてると、
そのクラス公開してくれよっと思ってしまう。
0023デフォルトの名無しさん2013/01/11(金) 13:43:07.16
貼り付けたWindowsMediaPlayerコントロールをキャプチャすることは出来ないでしょうか?
GraphicsのCopyFromScreenではコントロールの上に他のフォームがあるとそれもキャプチャしてしまい、
User32.dllのPrintWindowでは真っ黒になってしまいます。
0024デフォルトの名無しさん2013/01/11(金) 14:36:30.73
たぶん動画の部分は、Directなんたらになってるから
普通のやり方では無理だったはず。
0025232013/01/11(金) 18:03:46.73
>>24
コントロールじゃないWindows付属のも、キャプチャするのにプロパティ変えなきゃですしね・・・。
他の方法を考えてみます、ありがとうございました。
0026デフォルトの名無しさん2013/01/11(金) 21:19:16.49
しかしあれだな、Win8に慣れるとデスクトップアプリなんか作る気にならなくなるな
まじでタッチ主体の時代くるでこれ
0027デフォルトの名無しさん2013/01/11(金) 21:29:12.87
ソフトウェアでうちの液晶モニタもタッチ対応にしてください
0028デフォルトの名無しさん2013/01/11(金) 21:54:03.00
>>26
バカにしてたけど用途によってはいいね
ファイルを意識せず扱えるところとか
0029デフォルトの名無しさん2013/01/11(金) 23:05:20.58
>>27
液晶モニタは自分で買えよ
0030デフォルトの名無しさん2013/01/11(金) 23:50:04.52
>>28
UIも言われるほど悪くないと思う
ってかタブに慣れたらノートPCなんかポイポイ〜だよ
0031デフォルトの名無しさん2013/01/12(土) 09:32:01.84
>>30
でもスピードは劣るでしょ?
0032デフォルトの名無しさん2013/01/12(土) 13:30:43.86
最低の入力デバイスであるトラックパッドよりは早いだろ
0033デフォルトの名無しさん2013/01/12(土) 14:24:53.50
public Form1()
{
InitializeComponent();

MyClass mc = new MyClass();
mc.Rect.Add(new Rectangle(0, 0, 50, 30));
mc.Rect[0].Width = 40;
}
public class MyClass
{
List<Rectangle> rect = new List<Rectangle>();

public List<Rectangle> Rect
{
get { return this.rect; }
set { rect = value; }
}
}

mc.Rect[0].Width = 40;←この行が実行するまでもなくエラーなんですが
どう書けば値を変更できますか?
0034デフォルトの名無しさん2013/01/12(土) 18:09:21.75
>>33
その1行前に答えが出てるじゃないか。
0035デフォルトの名無しさん2013/01/12(土) 18:24:35.14
>>34
一回removeしてからnewしろってことなの?方法それだけ?
0036デフォルトの名無しさん2013/01/12(土) 23:42:25.32
構造体プロパティのフィールドは変更できん
Removeは要らんけどRectangleを代入しないと
0037デフォルトの名無しさん2013/01/13(日) 02:31:21.06
remove要らないのか、ありがとう
とりあえず通ったからこれで先に進めるよ!
0038デフォルトの名無しさん2013/01/13(日) 04:36:45.65
大人しくVS使っとけよw
0039デフォルトの名無しさん2013/01/13(日) 22:56:53.13
オブジェクトを取得するって表現よりも
オブジェクトを生成するって表現の方がいいですか?
0040デフォルトの名無しさん2013/01/13(日) 23:07:20.03
newならそうだな
0041デフォルトの名無しさん2013/01/13(日) 23:39:43.64
>>40
取得の表現は
どういった場合ですか?

教えてください。
0042デフォルトの名無しさん2013/01/14(月) 00:17:14.76
オブジェクトプールから引っ張ってくる場合、生成では変だろ
0043デフォルトの名無しさん2013/01/14(月) 01:19:50.38
国語辞典に聞けよ
0044デフォルトの名無しさん2013/01/14(月) 01:51:45.52
インターフェース定義のものをもらうときとか
0045デフォルトの名無しさん2013/01/14(月) 05:22:29.05
返す必要があるなら借りるだな
0046デフォルトの名無しさん2013/01/14(月) 13:33:21.33
取得はGetだろ
生成はnew
newしないで取ってくるだけならGet 取得
0047デフォルトの名無しさん2013/01/14(月) 13:52:48.54
flyweightパターンで取得または生成する場合はどうすればいいでしょう
0048デフォルトの名無しさん2013/01/14(月) 14:03:33.78
普通はGetじゃね
0049デフォルトの名無しさん2013/01/14(月) 14:14:46.63
破棄の必要があるかないかで分けるという観点もある。
0050デフォルトの名無しさん2013/01/14(月) 17:58:21.33
ジェネリックインターフェイスの理解がどうにもこうにもピンときません。
なにか理解の助けとなるような有用な実習課題はないでしょうか?例えばこういうの作ってみると
理解が進むよ!とか。
0051デフォルトの名無しさん2013/01/14(月) 18:01:51.89
ICollection<T>
0052デフォルトの名無しさん2013/01/14(月) 18:10:07.25
>>51
内部に配列持って・・・
ってやつですか?
0053デフォルトの名無しさん2013/01/14(月) 18:14:21.17
ジェネリックインターフェイスを理解しないと困る理由を述べよ
0054デフォルトの名無しさん2013/01/14(月) 18:20:26.50
理解できないような馬鹿がどう困ろうが知ったことか
0055デフォルトの名無しさん2013/01/14(月) 18:23:35.99
毎回キャストしとけばええやん
悩むなし
0056デフォルトの名無しさん2013/01/14(月) 18:35:19.46
Array.Sortでint[]にIComparerとIComparer<int>とIComparer<string>やってみるとか
0057デフォルトの名無しさん2013/01/14(月) 19:28:41.93
>>50
ジェネリックはわかるの?
インターフェイスはわかるの?
0058デフォルトの名無しさん2013/01/14(月) 20:20:11.46
内部クラス便利やな
0059デフォルトの名無しさん2013/01/14(月) 20:54:47.28
ジェネリック医薬品なら使った事ある
0060522013/01/14(月) 20:56:44.09
>>59
ジェネリック医薬品なら理解してるつもりですが
そっちのほうじゃありません。
0061デフォルトの名無しさん2013/01/14(月) 23:30:29.12
>>52
List<T>の自作とか
0062522013/01/14(月) 23:32:25.63
ありがとうございます
提示された課題をやってみます。
0063デフォルトの名無しさん2013/01/15(火) 00:36:53.62
C#にC++でいうところのconstってないですか?
例えば、クラスが内部で持ってるmutableなオブジェクトを返すプロパティを作る場合、
書き換えられたくなかったらクローンしたものを返すのが一般的なのでしょうか。
0064デフォルトの名無しさん2013/01/15(火) 00:38:44.25
その通り
あとCloneは非推奨だからコピーを新しく実装するならコピーコンストラクタな
0065デフォルトの名無しさん2013/01/15(火) 01:01:09.30
ICloneableが非推奨なだけでClone自体は別に好きに書けばいいよ
0066デフォルトの名無しさん2013/01/15(火) 01:02:24.21
とりあえず、readonlyを付けておく。
といえ、インスタンスメンバーが参照され書き換え可能なので何らかの方法で複製したものを返すようにする。

ただそういう場合、プロパティよりもメソッドのほうが良いと思う。
foreachとかで短時間に複数回呼び出さないならどうでもいいけど。
0067デフォルトの名無しさん2013/01/15(火) 11:16:17.68
フォームのControlBoxをfalse、Textに何も文字を入れないとタイトルバー画非表示になりますが
たまに一時的にタイトルバーが表示されることがあります(表示されても自動的に数秒で消える)
CPUに負荷がかかってるときに起きてるんですが、これはこういうものなんでしょうか?
0068デフォルトの名無しさん2013/01/15(火) 13:45:40.66
immutableなラッパーを返すなり
書き換えないでねってコメントに書いておくなりしたらええわ
0069デフォルトの名無しさん2013/01/15(火) 14:54:17.67
VC#のフォームイベントのleaveのメソッドの中に、メッセージボックスを表示するコードを書いたのですが
フォームがアクティブから外れても処理されません
これはなぜですか?
0070デフォルトの名無しさん2013/01/15(火) 14:56:39.26
他のプロセスがアクティブ化された場合、Leaveイベントは、発生しない仕様。
どうしてもやりたいなら、ウィンドウメッセージを掴むしかない。
0071デフォルトの名無しさん2013/01/15(火) 14:57:53.31
そのコントロールがアクティブになっているか確認しろ
0072デフォルトの名無しさん2013/01/15(火) 15:19:32.76
他のアプリクリックしたらメッセージ表示されるとか
何事かと思うわな
0073デフォルトの名無しさん2013/01/15(火) 17:41:10.72
説明が曖昧なんだよな
タスクバーでアプリ切り替えてもフォーカスの位置はそのままだろ
0074デフォルトの名無しさん2013/01/15(火) 17:52:14.56
あれ?2012 expって評価目的にしか使えんのか。
これじゃフリーソフト作れないなー。
0075デフォルトの名無しさん2013/01/15(火) 17:55:30.52
などと意味不明なことを言っており
0076デフォルトの名無しさん2013/01/15(火) 18:25:13.56
登録(無料)をすれば使えるだろ
0077デフォルトの名無しさん2013/01/15(火) 19:11:22.68
@ITの「第2回 Entity Frameworkコード・ファーストでモデル開発」
のサンプルをやっていて、NugetからEntityFrameworkをインスト済、ビルド済の状態で
Booksコントローラを追加しようとすると「~.Model.Bookのメタデータを取得できません」とくるのです。
勿論SQLCompact4.0はbinに叩き込み済。試行錯誤しても一歩もすすまないので教えて偉い人。
0078デフォルトの名無しさん2013/01/15(火) 20:39:12.82
プログラミングC# 第6版の251ページの「反復処理と変性」の文章がどうしても理解できません。なんとかしてください。
0079デフォルトの名無しさん2013/01/15(火) 21:39:25.09
ああああああああああああああああああああああああああああああああああああああああああ
0080デフォルトの名無しさん2013/01/15(火) 22:51:39.28
タスクバーには表示しないでalt+tabで切り替えられるようにする方法を教えてください
0081デフォルトの名無しさん2013/01/15(火) 22:54:12.04
ShowInTaskbar
0082デフォルトの名無しさん2013/01/16(水) 10:32:24.74
そのShowInTaskbarをfalseにすればもちろんタスクバーには表示されないんですが
alt+tabで切り替えられなくなるのです
0083デフォルトの名無しさん2013/01/16(水) 11:18:10.68
前スレでファイラーの質問したものです
おかげさまで作る事ができました
ありがとうございました
0084772013/01/16(水) 12:57:39.99
>>78
揶揄されてるのかと思ってしまった。
url貼ろうとしたら忍法帳に断られたのです。
0085デフォルトの名無しさん2013/01/16(水) 15:20:45.39
Web browserで広告クリックすると強制的にIEで開いてしまう
のですが、強制的にweb browserの中で開く方法を教えてください
0086デフォルトの名無しさん2013/01/16(水) 19:36:02.34
34A715A0-6587-11D0-924A-0020AFC7AC4D
でググれ。
0087デフォルトの名無しさん2013/01/16(水) 20:29:50.59
C#の機能を中心に勉強に便利な参考書って何があります?
0088デフォルトの名無しさん2013/01/16(水) 22:26:36.03
プログラミング .NET Framework
0089デフォルトの名無しさん2013/01/16(水) 23:00:24.59
>>82
FormBorderStyleをToolWindow系にしてない?
0090デフォルトの名無しさん2013/01/16(水) 23:05:04.44
ジェネリックってちょっと記述が楽になるだけだろ
0091デフォルトの名無しさん2013/01/16(水) 23:07:17.45
あなたの財布が楽になるの間違いでは?
0092デフォルトの名無しさん2013/01/16(水) 23:10:39.09
>>87
独習
0093デフォルトの名無しさん2013/01/17(木) 02:38:39.05
>>87
オライリー
0094デフォルトの名無しさん2013/01/17(木) 09:46:17.71
>>87
実践講座
0095デフォルトの名無しさん2013/01/17(木) 10:20:42.06
マウスでフォームのサイズの変更を、縦だけ禁止にしたいと思います
MaximumSizeとMinimizeBoxの値に0, 100と入力したら、縦どころか横にもサイズの変更ができなくなりました
何か他に設定がいるのでしょうか?
0096デフォルトの名無しさん2013/01/17(木) 11:31:03.25
public Form1()
{
InitializeComponent();
Application.Exit();
}

これでフォームが終了しないのはなぜですか?
0097デフォルトの名無しさん2013/01/17(木) 11:33:01.28
Application.ExitはApplication.Runを終わらせるもの
メインフォームのコンストラクタじゃまだApplication.Runは呼び出されてない
0098デフォルトの名無しさん2013/01/17(木) 11:34:21.78
まじすか
この段階で終わらせるにはどうするのでしょうか?
0099デフォルトの名無しさん2013/01/17(木) 11:40:26.89
そんな頭の悪いVB厨みたいなことはしない
Program.csでやれ
0100デフォルトの名無しさん2013/01/17(木) 14:58:26.17
VC#のデザイナーにコントロール(listboxとかlistviewなど)を貼り付けるのと、
まっさららクラスから
ListBox listBox1 = new ListBox();
this.Controls.Add(listBox1);
としたときで、プロパティの初期値は同じですか?
0101デフォルトの名無しさん2013/01/17(木) 17:37:47.30
初期値はそうだけどTabIndexのように生成と同時に外部から設定されるものもあるよ
■ このスレッドは過去ログ倉庫に格納されています