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

■ このスレッドは過去ログ倉庫に格納されています
2018/04/06(金) 17:40:19.48ID:oKXVP34zM
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください

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

■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part136
http://mevius.5ch.net/test/read.cgi/tech/1520057345/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2018/04/20(金) 12:44:06.99ID:yZlfbYWOM
オブジェクトとは何かね
2018/04/20(金) 12:52:07.95ID:wBOVlPyYM
>>91
横からで悪いけどたとえ話がおかしいし
言ってることが伝わらない

もっとまとめてから書くべき
2018/04/20(金) 12:58:41.12ID:luJyaFhBa
>>80
まあ、一言でいうと愚問だねw
そんなこと考えても時間のムダ。

真面目な話、その疑問はそのまま放置して前に進む方がいいと思う。
2018/04/20(金) 13:08:12.31ID:9jg3Q7S00
>>92
オブジェクト指向ってやつか!
オブジェクトを使うと結果がない処理にも意味があるってこと?

>>93
まとめるなら「結果がない処理の価値がわからない」って感じかなあ

>>94
詰め込み教育への皮肉だと思うけど正直分かりにくいかも
もし本気で言ってるならさすがに時代遅れだから考え直したほうがいいよ
2018/04/20(金) 13:26:58.95ID:luJyaFhBa
>>95
経験が足りないために起こる疑問は経験を詰むことでしか解決しない。

構造化プログラミングの意義もOOPの意義も、体感できるのは
実際にコードを自分でコードが書けるようになってから。
本で読んだだけで最初からそれが分かるのは一部の天才だけ。

逆にいえば、>>80の疑問は頭の良い人が考えた難しい理論を理解しないと
解決しないような問題じゃなく、誰でも体験すれば自然と分かる程度の話ってこと
2018/04/20(金) 13:48:46.74ID:o6RSJKQdd
>>91
0と1?何を言ってるのかわからん
14時に集合ってメール出して、全員からわかったみたいな返信きてもうざいだろ?
だから、14時集合(返信不要)ってメールをおくる方が受け取る側も返信しなくていいし、送る側も無駄な受信を減らせるしでwinwin
この辺りは経験だったりセンスだろうな
2018/04/20(金) 14:03:32.43ID:0EVFmTU60
>>95
成否の観点では単にフィールドの値を設定するメソッドを鑑みても
メモリに書き込み失敗の概念があっても、代入に失敗の概念はない
設定前の値を返すにしても、わざわざ退避する処理を強制するのか?

想定外の発生は基本的に例外をぶん投げるものだし
常人が気にしない様な事を考えて躓いてそうである
2018/04/20(金) 19:05:49.61ID:W6WTRmLV0
関数型プログラミングの才能があるな
2018/04/20(金) 20:30:59.54ID:kti4nAgp0
>>95
戻り値がないのは常に「成功」を返す関数と考えて良い
C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない

C言語とかgoみたいに例外という概念がない言語は、成功したかどうかが戻り値に入ってることが多い
それでも絶対に失敗しないか、失敗したらプログラムが強制終了するような処理は戻り値がない場合もある
2018/04/20(金) 21:05:01.73ID:Yi5F0BBw0
>C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
えぇ…
102デフォルトの名無しさん (ワッチョイ 9a7f-fvqh)
垢版 |
2018/04/20(金) 21:14:39.58ID:7WlEIf700
>>100
> C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
ケースバイケース。何でもかんでも例外にしちゃ駄目。
2018/04/20(金) 21:42:51.61ID:9jg3Q7S00
>>96
とりあえず>>94が本気なのとそれが思考停止の詰め込み教育信奉じゃないのは分かったよ
偉そうなこと言ってごめん

>>97
自分もちゃんとは理解してないけどコンピューターは0と1だけで動いてるらしい
でも初心者用スレで出す話ではなかったと反省
メール送信の例は分かりやすい!と思ったけど本当に結果が何もないと送信済みマークも付かないのでは・・・?

>>98-102
詳しい人でも意見が割れるくらい難しい問題なのね
>>99は皮肉なんだろうけど意味どころか自分に向けられた言葉なのかも分からないから反応に困る・・・
2018/04/20(金) 21:52:31.13ID:7WlEIf700
>>103
元の発言の「結果が無い」って言葉を勘違いしてる。
関数で処理した結果を返り値と言う形で関数の呼び出し元に伝える必要が無いって意味だ。
ちゃんと意味のある結果は発生している。
2018/04/20(金) 22:00:49.23ID:kti4nAgp0
>>101-102
書き方が変だった
C言語やgoと比べて成否を例外で処理することが多いから戻り値がなくても良い場合が多い程度の意味で言った

>>103
メール送信の結果は戻り値ではない方法で返しているというだけ
C#には例外やイベントのように色々な機構があるから、とりあえず細かいことは気にせず先に進んだ方がいい
2018/04/20(金) 22:22:51.74ID:UaVetxYYM
関数という言葉に惑わされてるということかな

メソッドは数学で言う関数そのものじゃない
(y=x+1とかそういうのじゃない)
やることを順番に書いてあるもの
サブルーチン
戻り値が定義されてたそれを返すだけ

ほかの言語で戻り値がないものは関数と区別してる言語もあるけど
わざわざ二種類つくるより戻り値なしで共通にしてある
2018/04/20(金) 23:07:04.14ID:0EVFmTU60
>>103
その辺は想定外と書いたように>>102よろしくケースバイケースだよ
十分想定され例外情報すら要らんなら戻り値で成否を返す事もあるし
InvalidProgramExceptionみたいに言語レベルでは処理できない物もある

話が逸れたけどOSレベルでは例外を発生させる余地などが有ったとしても
プラットフォーム次第になったりと言語レベルで突き詰めない場合は多い
2018/04/20(金) 23:38:50.80ID:iIb0CR1w0
いろいろ調べたり考えたりしたのですが、解決出来ないので質問します。
https://dotnetfiddle.net/SoCII1
このようなコードがあって
List<ITest>にいれていったときに
ListのXだけを全て足して返す関数は出来たのですが、今後ITestのプロパティは増える予定で、それぞれに足して返す関数をつけたいです。
そのときに似たようなコードになるので一つに纏めようとしたのですが中々できず困っています。どのような書き方をすればいいでしょうか?
2018/04/21(土) 02:21:21.95ID:lHgu/nQp0
>>108
基本的にはプロパティを動的に指定するのはリフレクションとかDictionaryを駆使とか、何らかの形でコストを払うことになると思う
状況にもよるけど、コンパイル時に確定してるならT4テンプレートとかコード生成とかで対応するのが一番正しいんじゃないかな
2018/04/21(土) 02:34:40.78ID:m0t/bmNLa
>>108
そんなものは自作しなくてもList自身(正確にはIEnumerable<T>だけど)が持ってるw
名前もそのまんまSumだからよくMSDNを見てみ
https://msdn.microsoft.com/ja-jp/library/6sh2ey19.aspx
2018/04/21(土) 03:42:29.63ID:MaG6OThU0
>>110
んー、エスパーだけど、質問者はプロパティをforeachみたいに回して全てにsumするようなのをプロパティの数に限らず1行で書きたいってことじゃね?
2018/04/21(土) 07:59:48.29ID:z4AHgN+yd
>>103
メソッドの戻り値とコンピュータの世界は全く関係がない
低級のマシン語をわかりやすくするための高級言語なんで初心者用スレで〜というよりは見当違いなことを言ってる

っで、結果とは低級レベルでの結果とメソッドレベルの結果のどちらをさしている?
低級レベルでの結果が表に出てこないのは普通のこと
メソッドレベルで見てもメールの送信済マークを含めてないのでメソッド戻り値の返さない
2018/04/21(土) 08:37:04.35ID:i7kmKmol0
>>109
リフレクションについて調べて何とか出来ました!ありがとうございます!
>>110,>>111
もう少し具体的に書いていれば良かったですよね・・・今後質問するときはもっと詳しく書くので、そのときはよろしくお願いします!
2018/04/21(土) 10:09:06.82ID:XwcbmKc5a
連続時間的な関数ってあります?
2018/04/21(土) 10:52:04.99ID:WnG+wEwt0
連続時間 is 何
2018/04/21(土) 11:00:42.32ID:k3YYD8ov0
エポック秒のことかなぁ
2018/04/21(土) 12:09:05.27ID:Y1+gKOzZa
アナログメーター的なやつです
2018/04/21(土) 12:39:56.06ID:k3YYD8ov0
>>117
プログレスバーでググってみてはどうか
2018/04/21(土) 13:49:43.77ID:gbvJ8fZ/a
時空連続体と空目した
2018/04/21(土) 18:22:05.73ID:V5ZTEj450
プログレスバーってもろデジタルメーターじゃないですか

数百〜数千の筋繊維を一本の糸で表現できるような関数はないですかね
2018/04/21(土) 18:29:18.80ID:LQq77Lfe0
you!画像ファイル扱っちゃいなyo!
2018/04/21(土) 18:52:17.79ID:rKiuu7+10
>>120
>>117のアナログメーターも全く関係ないんだけど?
筋線維もよく意味が分からないし、糸の振動の軌跡の描画みたいなことやりたいのなら自分で作るしかないよ
2018/04/22(日) 00:35:03.08ID:XfnBBJY5M
プリンタの印刷設定の縦横を変更したいです。
DefaultPageSettings.Landscape プロパティから変えられるのは確認しましたが
一時的なものではなく、プログラムが終了したあとも変わったままにしておきたいのですが
なにか方法はないでしょうか?
http://bbs.wankuma.com/index.cgi?mode=al2&;namber=2377&KLOG=2
このサイトも参考にしてSetHdevmodeなどもやってみましたが、プログラム終了後にもとに戻ってしまいます。
Windows7,10 64bitです
124デフォルトの名無しさん (ワッチョイ 4ee8-9jjH)
垢版 |
2018/04/22(日) 00:38:42.31ID:2TRizD7z0
筋繊維を糸で表現ってそれもう物理演算じゃん
2018/04/22(日) 01:10:17.94ID:6eouzp2p0
何がしたいのかよう分からん
>数百〜数千の筋繊維を一本の糸で表現できるような関数
が欲しいなら
「アナログメーター」なんて単語は出てこんと思うのだが

なんか特殊な知識が必要なことやってるなら
なおさらキチンと説明しないといかんだろう
2018/04/22(日) 02:16:18.41ID:I1dKrIqPa
>>123
次回そのプログラムを起動した時も同じ設定が適用されるようにしたい、
という意味なら、Landscape を永続化すればいいだけでしょう。

同じ設定が他のプログラムにも適用されるようにしたい、って意味なら、
たぶんそんなことは出来ないんじゃないかと...
よく知らんけど
2018/04/22(日) 07:35:23.33ID:XfnBBJY5M
>>126
後者の方を考えています。
なにか方法があればいいのですが、、、
2018/04/22(日) 09:24:44.12ID:RctEGmkE0
他のプログラムでも同じ設定を使いたいんならプリンタドライバの設定変更以外に方法はない
てかそれってC#関係ないよね
2018/04/22(日) 19:36:51.14ID:YjWQK7FP0
[[['[] ]]] { {] ]][ '[][][] [][] [][][]  [] '[] []
2018/04/22(日) 21:23:13.30ID:AB//w8nmp
c#勉強始めたての者です。
indexofで文字列を検索しようとしているのですが、長文を検索するとエラーが出てしまいます。

MSDNを見ると戻り値がint32とあり、戻り値がintの範囲を超えるとlongエラーになるように推測していますが対応方法はあるのでしょうか。
2018/04/22(日) 21:24:53.81ID:AB//w8nmp
すみません上記文中のlongは誤植ですので読み飛ばしてください。
132デフォルトの名無しさん (ワッチョイ 4703-goBS)
垢版 |
2018/04/22(日) 21:30:18.18ID:PsQCMKRd0
そう言われるともうlongしか見えない
2018/04/22(日) 21:37:33.88ID:hhQLBFvv0
文字数がintに収まるように文字列を切り出しながら検索すればいいんじゃないか
もちろん切れ目に検索対象の文字列が有るときの対策して切り出さなきゃならんけど
2018/04/22(日) 22:10:29.71ID:VNNE7LSc0
ありがとうございます。
matchメソッドというのを見つけました。
全然見つからなかったのに投稿し出来すぐ見つかるものですね。
matchで出来なかったらint分割にトライしようと思います。
2018/04/22(日) 22:23:25.89ID:f9F/Sp5R0
フォーム上のコントロールを、プログラムから参照するいい方法はないでしょうか

SplitContainer上に配置した合計20個のチェックボックスについて、textをファイルから
読み込んだものに動的に変更したいと考えています

手元の書籍(作って覚えるc#)では、forループの中で

splitContainer1.Panel2.Controls[i].Text = mistakeText;

という形でやっていましたが、今回自分で用意したフォームはほかにもテキストボックスや
ラベルがあり、うまくチェックボックスを対象としてくれません
デザイン画面で配置した順番にやや依拠しているようですが、最後においたものほど添字が
小さそうだ、程度しかわかりません
今後デザインを変更する、あるいはチェックボックスを増やす可能性を考えると、何らかの
プロパティで順番を指定できるといいなと思いますが、発見できませんでした

Form1.Designer.cs のメンバ変数宣言欄に記載がある順番のように思えますが、IDEが
自動生成したコードを並べ替えるのも何やら気持ち悪く、今の所手を出していません

今回はチェックボックスですが、ほかにもラベルを順に参照するとか、テキストボックスを
順に参照する方法などあれば、教えていただけると助かります

なお、今回のフォームでは、とりあえずチェックボックスの名前は初期値(checkBox1など)に
なっています
2018/04/22(日) 22:25:29.08ID:tqpEX+7y0
>>135
if (Controls[i] is CheckBox)
2018/04/22(日) 22:43:50.37ID:VtQV/Dmoa
>>135
根本的に考え違いをしてると思う。
たぶんありもしないものをあるはずだと勝手に思い込んでる。

コントロールをテーブル参照したいなら自分で明示的にテーブル(配列)を
宣言しましょう。

デザイナには君が欲しいと思っているものを忖度して自動で作ってくれるような
都合のいい機能は存在しない。
2018/04/22(日) 23:18:57.35ID:f9F/Sp5R0
>>136
とりあえずチェックボックスだけを選択することは可能になりました
順番はやはり思っているとおりにいきませんが、これは実行結果を見つつ、デザイナで
並べ替えるしかないかなと思い始めました

>>137
デザイナが忖度してくれるとは思っていないので、プロパティか何かで明示的に選択する
事ができないかな、と思ったのです
以前VBAで似たようなものを作った際は、
Controls("CheckBox" & i).Caption = Cells(i, 1)
こんな選択の仕方ができたので、c#でもなにか方法はあるのではないかと思いました
2018/04/22(日) 23:35:35.52ID:Kp2niQOT0
>>138
コントロールに名前付ければいいじゃん
フォームにあるコントロールをどうやって特定したいと思ってるの?
2018/04/22(日) 23:50:44.34ID:f9F/Sp5R0
>>139
例えば
Panel.Controls.CheckBox[i]
みたいな形で指定できればいいなと思ってるんですが、残念ながらそうできないですね

>>137
が書いている、自分で明示的にテーブルを宣言するというのは、例えば
cbox[1] = CheckBox1;
cbox[2] = CheckBox2;
とかいうコードを予め書いておく、ということでしょうか?
2018/04/23(月) 00:02:33.07ID:Xa6TKCtV0
>>140
意味がわからない
何がしたいの?

@コントロールを特定する必要がある
A複数のコントロールに共通の処理がしたい

Aにしか目が行ってないけど@をやらなきゃいけない時点で
Aの方法なんてエレガントにできたってウンコブリブリじゃん
2018/04/23(月) 02:11:14.44ID:kNAX3uRd0
オムツの取り替えまでやって欲しい要介護は大人しくVBやってろ
2018/04/23(月) 03:09:44.29ID:0OUySOiKa
>>140
だから、配列が欲しいなら配列を自分で作ろうよ。

配列が欲しい、でもなんだか自分で配列を書くのは嫌だ。
この発想がおかしい。

var cbs = new[] {CheckBox1, CheckBox2, ...};

これ書くのがそんなに面倒?
変な方向に努力する方が余程面倒でしょ
ローカル変数じゃなくてメンバ変数かプロパティとして実装する場合だって手間は大差ないよ
2018/04/23(月) 06:08:01.85ID:wp3u/AuE0
>>143
配列を書くのは別に面倒でもなんでもないです
コピペしてちょっと直せば済むので

ただ、コピペで済む内容なら、コードで表現する方法があるのではないかと思ったのです
「新しくなにかプロパティを実装する」のではなく、「このプロパティを参照するとわかる」
という情報が存在するのかと考えました

>>137
が書いてくれたように、「ありもしない物をあるはずだと思い込んでる」のかもしれません
2018/04/23(月) 06:12:48.73ID:Xa6TKCtV0
>>144
それって同じフォーマットの行が並んだ設定ファイルみたいになんでしょ?
どの部分を自動でやってくれると思ってん?
2018/04/23(月) 07:30:25.22ID:wp3u/AuE0
>>145
自動でやってくれると言うか、Controls[n] の n に相当する部分を、何らかのプロパティで
持っているのではないかと思ったのです
それがわかれば、IDEでプロパティを書き換えてやればそれで済むな、と

あるいはそれがなければ、例えば

for (int i = 0; i < CBOX_ELEMENTS; i++) {
string s = "checkBox" + (i+1).ToString();
Controls(s).Text = ...
}

みたいな形で指定できないかな、と思っていたのですが、これは無理そうですし
147デフォルトの名無しさん (アウアウカー Sa43-AqIk)
垢版 |
2018/04/23(月) 07:45:09.58ID:7CTglbRxa
配列作って突っ込んどくのが何より簡単だし自由だろ
2018/04/23(月) 08:09:08.34ID:voecBiJS0
>>146
インデクサじゃ駄目なの?
2018/04/23(月) 08:16:30.00ID:C4a+50u5M
>>146
ちがくね?
お前がやりたいのって別のデータとid(?)が一致する項目にデータを入れていきたいんじゃねーの?
でもそれってコントロールを特定する必要があるんだよね?
コントロールとデータを紐付ける何かはあるの?
2018/04/23(月) 08:33:16.26ID:KdhM7QliM
GetAllControlsのカウント取るとかそういう?
2018/04/23(月) 08:37:13.12ID:+9lDlXeaM
Type.GetPropertiesの方かな
2018/04/23(月) 09:14:18.74ID:y08K2+qf0
VB6はコントロール配列があったけどなー。.Netの世界にはないからの。
2018/04/23(月) 12:01:51.66ID:joGGyVH30
ttps://dobon.net/vb/dotnet/control/findcontrolbyname.html
名前で探せばいいのでは?
2018/04/23(月) 12:30:43.09ID:b1ST+81Ba
だから配列に突っ込めば済む話を何でわざわざより面倒な方法で解決しようとするのw
2018/04/23(月) 12:34:22.72ID:HUKatAJtr
>>149
いや、単純にファイルから読み込んだ名前で、チェックボックスの文字を変えたいだけです
例えばファイルの中身が 犬,猿,雉だったら?CheckBox1-3の文字をそれぞれ犬、猿、雉にしてCheckBox4-20は「使用不可」にでもするような
だから機械的に参照できればよかったのです

>>153
これでほぼ解決です、ありがとうございます
2018/04/23(月) 12:39:13.94ID:HUKatAJtr
>>154
まあ一言でいうと、わざわざ自分で配列を作らなくても、それを実現する方法はすでに存在するだろうと思ってたのです
配列作ったら「そんなことしなくてもこう書けば一発で参照できるのに」って言われる方法があるんじゃないかと
2018/04/23(月) 12:39:38.75ID:+9lDlXeaM
>>155
その下にインデクサによる説明もあるだろw
158デフォルトの名無しさん (ワッチョイ 9a7f-fvqh)
垢版 |
2018/04/23(月) 13:33:10.44ID:48XgAlPp0
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Name ).ToArray();
}

private CheckBox[] checkBoxes;
}
2018/04/23(月) 17:06:56.96ID:FWk6fNJV0
public class B : private A
{

}

みたいなこと C# じゃ出来ないんだっけ?
2018/04/23(月) 17:10:12.77ID:BY7S8wKYd
>>159
継承元をprotectedにすれば継承したクラスからしかアクセスできないようにはできる
2018/04/23(月) 17:25:36.44ID:b1ST+81Ba
>>159
何言ってるのかわかりませんw
2018/04/23(月) 18:05:17.14ID:BY7S8wKYd
そのクラス経由でしかアクセスできないようにしたいってことじゃないの?
2018/04/23(月) 18:18:07.68ID:CCSIsfHWM
ゆとりしか居ないのかなぁ
C#はprivate継承はサポートしてないよ
フィールドに持たせて移譲メソッド書くしかない
2018/04/23(月) 18:31:05.83ID:VMRJeQmYd
>>163
ゆとりなんてもうオッサンやでおじいちゃん?
2018/04/23(月) 18:38:07.42ID:BY7S8wKYd
これ参考にすればいいのかな
http://ufcpp.net/study/csharp/oo_conceal.html

protected internal 同一プロジェクト内のクラス内部、または、派生クラスの内部からのみアクセス可能

private protected (C# 7.2 以降)同一プロジェクト内のクラス内部、かつ、派生クラスの内部からのみアクセス可能
こういうこと?
2018/04/23(月) 18:52:13.60ID:Xa6TKCtV0
>>155
それで解決しねーだろ
バラっバラにくんじゃね?
俺はてっきりコントロールの
座標でソートして名前付けたいのかと思った
2018/04/23(月) 21:02:25.52ID:wp3u/AuE0
皆様いろいろありがとうございました

>>158
書いてくださった方法が、ほぼ私が求めていたものを完璧に実現しています
抱かれてもいいくらい惚れました
ただ、試してみたところピックアップされる順番は必ずしもコントロールを配置した
順番通りではなく、はっきりした法則性も見いだせませんでした
テストプログラムを書いて、インデックスと見た目を一致させるようデザイナで
コントロールを並べ替えようかとも思いましたが、後日コントロールを追加した際
悩むことになりそうなのでやめておきました

>>153
結局この方法でコントロールを検索し、発見したコントロールをリストに追加するという
方法で対応することにしました

>>154
配列に突っ込むにも、コード上に直接 checkBox1 とか checkBox2 とかのリテラルを
埋め込みたくなかったので、検索した上で配列を作ることにしました

>>148, 150, 151
実は書いていることがわからないレベルなので、これから勉強します
「作って覚える」は一通りやったので、「独習c#」を紐解いてみます

>>166
これで解決しました
158の方法で解決するかと思っていたのですが、やってみたところバラバラの順番でした
皮肉でもなんでもなく、コントロールの座標でソートとか、なぜそういう操作をしたいのだろうと
推測したのか教えていただけると嬉しいです
今後も質問すると思いますので、疑問点がわかりやすい文章を意識する必要があるので
168デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/23(月) 21:07:14.52ID:QriAiZTC0
今日からC#勉強し始めたけど、
結構ネスト深くなる言語っぽいね、これ。こんな…


namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
checked
{
sbyte a = 64;
sbyte b = 65;
sbyte c = (sbyte)(a + b);
}
}
catch (OverflowException ex)
{
Console.Write(ex.Message);
}
}
}
}
2018/04/23(月) 21:09:42.34ID:b1ST+81Ba
>>167
いやいやいやcheckBox1 とか checkBox2 とかはリテラルじゃないってw
ただの識別子(フィールド名)

コードにリテラルを埋め込むというか、コンパイル時に誤りを検出できない
(普通の理解では)お行儀の悪いコードになるのはむしろ>>153みたいな方法だってw
170デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/23(月) 21:09:53.25ID:QriAiZTC0
namespaceとかcheckedがブロックなのが何かなぁ…
2018/04/23(月) 21:27:15.55ID:wp3u/AuE0
>>169
おっと・・・
どうやら根本的なところで間違っていたようです
書いてあるとおりだとすると、質問とレスが噛み合っていない理由がわかりました
わざわざ行儀の悪い書き方を探していたのか
172デフォルトの名無しさん (ワッチョイ 9a7f-fvqh)
垢版 |
2018/04/23(月) 21:37:46.50ID:48XgAlPp0
>>167
>>158はOrderBy()でチェックボックスの名前(Name)順にソートしてる。
Nameの代わりに、TabIndexかTagを設定してそれを利用しても良い。
というか、Nameだとチェックボックスが10個以上になるとソートが望むようにならないか。
2018/04/23(月) 21:45:21.31ID:Xa6TKCtV0
>>167
おそらく配置したコントロールから欲しい情報は座標とサイズぐらいしかない
それらの特定情報は別ファイルにある
なのでコントロールが上から
もしくは左からか順番に取得できれば
別ファイルに記述した通りの順番で情報を並べることができる
Controlsで取得できる順番はよく知らないけど
作った順かあるいわなんの特徴もなくランダムか何かを保証するものではないのかな?と
2018/04/23(月) 22:10:47.18ID:48XgAlPp0
>>173
Controlsが返す順番は保証されてないけど、自分でソートすれば良い。

(1)TabIndex順 (各CheckBoxにタブオーダー(TabIndex)を設定しておく)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.TabIndex ).ToArray();
(2)Tag順 (各CheckBoxのTagに数値を設定しておく)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Tag ).ToArray();
(3-1)Location順(左から)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Location.X ).ThenBy( x=> x.Location.Y ).ToArray();
(3-2)Location順(上から)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Location.Y ).ThenBy( x=> x.Location.X ).ToArray();
2018/04/23(月) 22:33:20.75ID:fnmaDcrK0
>>155
そういう使い方なら、チェックボックスを先に作っておくんじゃなくて
ファイルから読んだ内容で動的に作っていった方が手っ取り早い
どうせチェックボックスは全部等間隔に並べるんじゃろ?
2018/04/23(月) 22:53:14.98ID:pYJnxPYX0
WPFのサンプルでありそうな話だ
2018/04/23(月) 23:04:57.82ID:0nhwdYRFa
>>126,>>128
>>123です
SetPrinter関数を使用することで実現できました。ありがとうございました。
2018/04/24(火) 00:40:53.09ID:U7B9av/W0
>>168
そのtry意味ないんだけど。。
2018/04/24(火) 00:55:02.77ID:P/LpDfjz0
>>178
ネストのイメージ書きたかっただけだろうよ
2018/04/24(火) 06:02:26.80ID:PLNFE8AC0
>>173
なるほど、コントロールから情報を取得する必要があると思えたのですね
実際はそれ以前の段階でしたが

>>175
それも考えたのですが、デザイナで画面を確認したいので、静的に用意して
おきたいという結論になりました
動的に置くほうが難易度高そうだ、と思ったのもありますが
181デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 11:44:27.10ID:MJ0NRymv0
>>178-179

「意味無い」って、どういう意味?
182デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 12:45:33.19ID:MJ0NRymv0
うぇぇ、C#、goto文使えるし…
183デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 13:15:16.40ID:MJ0NRymv0
うーん、string x = "10"; に対して
x.toString(); するんじゃなくて、int.Parse(x); するのか…。
xオブジェクトにintegerを吐き出させるのではなく、
integerオブジェクトにxオブジェクトを与えてintegerを吐き出させる…。

これは初めての体験だな…。
2018/04/24(火) 13:18:45.32ID:Ajvhvjmq0
何もかも間違っててワロタw
185デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 13:34:52.91ID:MJ0NRymv0
なにゆえ?
186デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 13:45:01.31ID:MJ0NRymv0
expression-bodied関数は、なんかエロいな…
187デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 13:46:08.52ID:MJ0NRymv0
やってる事は違うけど、考え方的にはCのマクロに近いのかな…
188デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 13:50:59.68ID:MJ0NRymv0
LINQ…、エロいな…。
189デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 13:53:53.94ID:MJ0NRymv0
関数名がアッパーキャメルなのは感心せんなぁ…
2018/04/24(火) 14:00:18.73ID:a0zqzGgA0
ここ質問スレなんで日記は他所でな
191デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 14:04:20.23ID:MJ0NRymv0
なんだよ、ToString()メソッドあるじゃねぇかよ…。
192デフォルトの名無しさん (ワッチョイ 47c9-8E8L)
垢版 |
2018/04/24(火) 14:05:02.22ID:MJ0NRymv0
>>190

ごめん。

質問です。なんだよ、ToString()メソッドあるじゃねぇかよ…
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況