ふらっと C#,C♯,C#(初心者用) Part137
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらない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 >>54-57
ありがとうございます
頑張って見ます すいません、PS4のコントローラをPCに接続して、
入力ボタンを表示したいのです。 配置が違うだけなのか。
でも認識させるにはDirectXのラッパーとか使うしか無さそうなのね。 Task.Factory.StartNew(またはTask.Run)で生成したスレッドの優先度を変える方法はあるのでしょうか。 63ですがスレッドプールを使わず、スレッドで対応することにしました。 >>65
Taskだと処理中に割り込み?が割と入ってきて、処理時間が遅延してしまうのです。
スレッドレベルで優先度を上げたいと思いまして。
結局Threadにして優先度を上げても割り込みは入ってくるのですが、多少マシになったような気がします。 >>66
それ単にスレッド生成で遅延しているなんてオチじゃないよな? 受託案件なのでC#で作らざるを得ないのです。
自分自身はファーム屋なので、マイコンでやりたいんですけどね。
>>70
まだ遅延の原因はわかってませんです
生成時だけの遅延じゃないので、違うとは思いますが・・・ ユーザーコントロールのプロパティをデザイン時のプロパティウィンドウでコンボボックスにしたく
人様のサイトで恐縮なのですが、以下をほぼコピペしました。
http://blog.okazuki.jp/entry/20070207/1170820895
が、テキストボックスのままで選択肢になりません。
公開プロパティに、なにか別の宣言が要りましたでしょうか? 継承ユーザーコントロールだったのですが、継承元にも
[System.ComponentModel.TypeConverter(typeof(〜 が必要だっただけみたいです。
すみませんでした。 引き続きすみません。
たとえばユーザーコントロールに
Folder
File
という2つのstring型の公開プロパティを用意します。
IDEのプロパティウィンドウからFolderを設定(通常のテキストボックス)すると
そのフォルダ内のファイルを舐めてFileの選択肢にしたいのです。
TypeConverterで、静的な候補が出て選択できるところまでは出来たんですが
動的に候補を変更する場合、どうするんでしょうか。
IDEのプロパティウィンドウに、どうアクセスしたらいいのか、そこが分かれば何とかなる気がしてるんですが。 初歩的な質問で申し訳ないのですが、
戻り値なしのメソッドと、引数なしのメソッドはどういう状況で使用するのでしょうか?
戻り値なしのメソッドは
その後にどこかに代入したりする予定はなく出力が目的の場合に使用すると
読んだのですがその通りですか?
万が一、後で代入したくなった場合に備えて取り敢えず戻り値は設定しておいたりしないのでしょうか?
引数なしのメソッドは
引数がない(=変数宣言がない?)とそのメソッド自体、動いてくれないイメージがあるのですが、実際は動きますよね
何も値を与えられていないのに動くのはどうしてですか?
宜しくお願いします・・・ >>80
例えば
int Add(int a, int b) {
int c;
c = a + b;
return c;
}
というメソッドですと、Add(3, 5)ならaとbにそれぞれ3、5が入りc=8となると思うのですが、
abc = xyz,Add()といった風に使用しても、cの値も何も返ってこないのに、
引数なしのコードを見かける様な・・・ >>80
メソッドってのは別に数値の計算だけするわけじゃない
何かの処理なので、その処理に引数が必要なら引数を渡すし
その処理に結果があるなら戻り値がある >>84
横からごめん
処理に結果がないならそれはもう何も処理してないのと同じじゃないの? >>86
>>84の説明が間違ってると言いたいんじゃなくて
単純に理解できなかったんだけど誤解させたならごめん
とはいえせっかくだから自分なりに説明を考えてみたんだけど
プログラムを動かすことが目的じゃなくて人間に読ませてアルゴリズムを
分からせることが目的の場合は最終的な結果は必要ないって感じかな? >>80
メソッドは外注さんへの作業手順書みたいなもん
引数は、その作業に必要な情報がある場合に外部から渡すための窓口
情報不要なら省略できる
引数なし=こっちから情報渡さなくても作業できるよね?みたいな感じ
メソッド内で作業が完了したあと、なんか返事してほしい場合は戻り値をつかう
返事不要の場合void
戻り値なし=作業さえしてくれたら結果レポートいらね!
メソッドコール(外注さんへ仕事依頼)したら作業はちゃんとされるので、結果のレポートを使って、さらになんか作業をしたいなら戻り値よこせよ!って作業手順書に書いておけばいいし、仕事さえしてくれたら、返事不要なら戻り値いらない >>80
コントロールにupdateってメソッドがあるだろ?
これは自身の再描画をするだけのメソッドなんだから引数を取りようがない
また再描画するだけなのに失敗するわけないんだから戻り値もいらない
無理やり成否を返すこともできるが、失敗する可能性があるメソッドに様変わりし、呼び出し元で失敗を意識した実装にしなきゃいけないから負担を強いることになる
って感じかな 引数のとりようも戻り値の返しようもなんぼでもあるわ
へんな忖度みたいな真似すんなボケ >>88
作業が行われればレポートは要らないというのは例えば殺し屋みたいな?
でもコンピューター上でそれを再現するならターゲットもターゲットの生死も0と1のデータなんじゃないの?
だとしたらそのデータはどこに消えるの???
>>89
同じようなことばっかり聞いて悪いんだけど再描画の結果も0と1のデータなんじゃないの?
それがメモリに残らないのに再描画は成功という意味がわからない
>>90
戻り値の返しようがあるというのは返さない選択肢もあるということ???
戻り値を返さないプログラムに人間に読ませる以上の価値があるとすればそれを教えて欲しい >>91
横からで悪いけどたとえ話がおかしいし
言ってることが伝わらない
もっとまとめてから書くべき >>80
まあ、一言でいうと愚問だねw
そんなこと考えても時間のムダ。
真面目な話、その疑問はそのまま放置して前に進む方がいいと思う。 >>92
オブジェクト指向ってやつか!
オブジェクトを使うと結果がない処理にも意味があるってこと?
>>93
まとめるなら「結果がない処理の価値がわからない」って感じかなあ
>>94
詰め込み教育への皮肉だと思うけど正直分かりにくいかも
もし本気で言ってるならさすがに時代遅れだから考え直したほうがいいよ >>95
経験が足りないために起こる疑問は経験を詰むことでしか解決しない。
構造化プログラミングの意義もOOPの意義も、体感できるのは
実際にコードを自分でコードが書けるようになってから。
本で読んだだけで最初からそれが分かるのは一部の天才だけ。
逆にいえば、>>80の疑問は頭の良い人が考えた難しい理論を理解しないと
解決しないような問題じゃなく、誰でも体験すれば自然と分かる程度の話ってこと >>91
0と1?何を言ってるのかわからん
14時に集合ってメール出して、全員からわかったみたいな返信きてもうざいだろ?
だから、14時集合(返信不要)ってメールをおくる方が受け取る側も返信しなくていいし、送る側も無駄な受信を減らせるしでwinwin
この辺りは経験だったりセンスだろうな >>95
成否の観点では単にフィールドの値を設定するメソッドを鑑みても
メモリに書き込み失敗の概念があっても、代入に失敗の概念はない
設定前の値を返すにしても、わざわざ退避する処理を強制するのか?
想定外の発生は基本的に例外をぶん投げるものだし
常人が気にしない様な事を考えて躓いてそうである >>95
戻り値がないのは常に「成功」を返す関数と考えて良い
C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
C言語とかgoみたいに例外という概念がない言語は、成功したかどうかが戻り値に入ってることが多い
それでも絶対に失敗しないか、失敗したらプログラムが強制終了するような処理は戻り値がない場合もある >C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
えぇ… >>100
> C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
ケースバイケース。何でもかんでも例外にしちゃ駄目。 >>96
とりあえず>>94が本気なのとそれが思考停止の詰め込み教育信奉じゃないのは分かったよ
偉そうなこと言ってごめん
>>97
自分もちゃんとは理解してないけどコンピューターは0と1だけで動いてるらしい
でも初心者用スレで出す話ではなかったと反省
メール送信の例は分かりやすい!と思ったけど本当に結果が何もないと送信済みマークも付かないのでは・・・?
>>98-102
詳しい人でも意見が割れるくらい難しい問題なのね
>>99は皮肉なんだろうけど意味どころか自分に向けられた言葉なのかも分からないから反応に困る・・・ >>103
元の発言の「結果が無い」って言葉を勘違いしてる。
関数で処理した結果を返り値と言う形で関数の呼び出し元に伝える必要が無いって意味だ。
ちゃんと意味のある結果は発生している。 >>101-102
書き方が変だった
C言語やgoと比べて成否を例外で処理することが多いから戻り値がなくても良い場合が多い程度の意味で言った
>>103
メール送信の結果は戻り値ではない方法で返しているというだけ
C#には例外やイベントのように色々な機構があるから、とりあえず細かいことは気にせず先に進んだ方がいい 関数という言葉に惑わされてるということかな
メソッドは数学で言う関数そのものじゃない
(y=x+1とかそういうのじゃない)
やることを順番に書いてあるもの
サブルーチン
戻り値が定義されてたそれを返すだけ
ほかの言語で戻り値がないものは関数と区別してる言語もあるけど
わざわざ二種類つくるより戻り値なしで共通にしてある >>103
その辺は想定外と書いたように>>102よろしくケースバイケースだよ
十分想定され例外情報すら要らんなら戻り値で成否を返す事もあるし
InvalidProgramExceptionみたいに言語レベルでは処理できない物もある
話が逸れたけどOSレベルでは例外を発生させる余地などが有ったとしても
プラットフォーム次第になったりと言語レベルで突き詰めない場合は多い いろいろ調べたり考えたりしたのですが、解決出来ないので質問します。
https://dotnetfiddle.net/SoCII1
このようなコードがあって
List<ITest>にいれていったときに
ListのXだけを全て足して返す関数は出来たのですが、今後ITestのプロパティは増える予定で、それぞれに足して返す関数をつけたいです。
そのときに似たようなコードになるので一つに纏めようとしたのですが中々できず困っています。どのような書き方をすればいいでしょうか? >>108
基本的にはプロパティを動的に指定するのはリフレクションとかDictionaryを駆使とか、何らかの形でコストを払うことになると思う
状況にもよるけど、コンパイル時に確定してるならT4テンプレートとかコード生成とかで対応するのが一番正しいんじゃないかな >>108
そんなものは自作しなくてもList自身(正確にはIEnumerable<T>だけど)が持ってるw
名前もそのまんまSumだからよくMSDNを見てみ
https://msdn.microsoft.com/ja-jp/library/6sh2ey19.aspx >>110
んー、エスパーだけど、質問者はプロパティをforeachみたいに回して全てにsumするようなのをプロパティの数に限らず1行で書きたいってことじゃね? >>103
メソッドの戻り値とコンピュータの世界は全く関係がない
低級のマシン語をわかりやすくするための高級言語なんで初心者用スレで〜というよりは見当違いなことを言ってる
っで、結果とは低級レベルでの結果とメソッドレベルの結果のどちらをさしている?
低級レベルでの結果が表に出てこないのは普通のこと
メソッドレベルで見てもメールの送信済マークを含めてないのでメソッド戻り値の返さない >>109
リフレクションについて調べて何とか出来ました!ありがとうございます!
>>110,>>111
もう少し具体的に書いていれば良かったですよね・・・今後質問するときはもっと詳しく書くので、そのときはよろしくお願いします! プログレスバーってもろデジタルメーターじゃないですか
数百〜数千の筋繊維を一本の糸で表現できるような関数はないですかね >>120
>>117のアナログメーターも全く関係ないんだけど?
筋線維もよく意味が分からないし、糸の振動の軌跡の描画みたいなことやりたいのなら自分で作るしかないよ プリンタの印刷設定の縦横を変更したいです。
DefaultPageSettings.Landscape プロパティから変えられるのは確認しましたが
一時的なものではなく、プログラムが終了したあとも変わったままにしておきたいのですが
なにか方法はないでしょうか?
http://bbs.wankuma.com/index.cgi?mode=al2&namber=2377&KLOG=2
このサイトも参考にしてSetHdevmodeなどもやってみましたが、プログラム終了後にもとに戻ってしまいます。
Windows7,10 64bitです 何がしたいのかよう分からん
>数百〜数千の筋繊維を一本の糸で表現できるような関数
が欲しいなら
「アナログメーター」なんて単語は出てこんと思うのだが
なんか特殊な知識が必要なことやってるなら
なおさらキチンと説明しないといかんだろう >>123
次回そのプログラムを起動した時も同じ設定が適用されるようにしたい、
という意味なら、Landscape を永続化すればいいだけでしょう。
同じ設定が他のプログラムにも適用されるようにしたい、って意味なら、
たぶんそんなことは出来ないんじゃないかと...
よく知らんけど >>126
後者の方を考えています。
なにか方法があればいいのですが、、、 他のプログラムでも同じ設定を使いたいんならプリンタドライバの設定変更以外に方法はない
てかそれってC#関係ないよね [[['[] ]]] { {] ]][ '[][][] [][] [][][] [] '[] [] c#勉強始めたての者です。
indexofで文字列を検索しようとしているのですが、長文を検索するとエラーが出てしまいます。
MSDNを見ると戻り値がint32とあり、戻り値がintの範囲を超えるとlongエラーになるように推測していますが対応方法はあるのでしょうか。 すみません上記文中のlongは誤植ですので読み飛ばしてください。 文字数がintに収まるように文字列を切り出しながら検索すればいいんじゃないか
もちろん切れ目に検索対象の文字列が有るときの対策して切り出さなきゃならんけど ありがとうございます。
matchメソッドというのを見つけました。
全然見つからなかったのに投稿し出来すぐ見つかるものですね。
matchで出来なかったらint分割にトライしようと思います。 フォーム上のコントロールを、プログラムから参照するいい方法はないでしょうか
SplitContainer上に配置した合計20個のチェックボックスについて、textをファイルから
読み込んだものに動的に変更したいと考えています
手元の書籍(作って覚えるc#)では、forループの中で
splitContainer1.Panel2.Controls[i].Text = mistakeText;
という形でやっていましたが、今回自分で用意したフォームはほかにもテキストボックスや
ラベルがあり、うまくチェックボックスを対象としてくれません
デザイン画面で配置した順番にやや依拠しているようですが、最後においたものほど添字が
小さそうだ、程度しかわかりません
今後デザインを変更する、あるいはチェックボックスを増やす可能性を考えると、何らかの
プロパティで順番を指定できるといいなと思いますが、発見できませんでした
Form1.Designer.cs のメンバ変数宣言欄に記載がある順番のように思えますが、IDEが
自動生成したコードを並べ替えるのも何やら気持ち悪く、今の所手を出していません
今回はチェックボックスですが、ほかにもラベルを順に参照するとか、テキストボックスを
順に参照する方法などあれば、教えていただけると助かります
なお、今回のフォームでは、とりあえずチェックボックスの名前は初期値(checkBox1など)に
なっています >>135
if (Controls[i] is CheckBox) >>135
根本的に考え違いをしてると思う。
たぶんありもしないものをあるはずだと勝手に思い込んでる。
コントロールをテーブル参照したいなら自分で明示的にテーブル(配列)を
宣言しましょう。
デザイナには君が欲しいと思っているものを忖度して自動で作ってくれるような
都合のいい機能は存在しない。 >>136
とりあえずチェックボックスだけを選択することは可能になりました
順番はやはり思っているとおりにいきませんが、これは実行結果を見つつ、デザイナで
並べ替えるしかないかなと思い始めました
>>137
デザイナが忖度してくれるとは思っていないので、プロパティか何かで明示的に選択する
事ができないかな、と思ったのです
以前VBAで似たようなものを作った際は、
Controls("CheckBox" & i).Caption = Cells(i, 1)
こんな選択の仕方ができたので、c#でもなにか方法はあるのではないかと思いました >>138
コントロールに名前付ければいいじゃん
フォームにあるコントロールをどうやって特定したいと思ってるの? >>139
例えば
Panel.Controls.CheckBox[i]
みたいな形で指定できればいいなと思ってるんですが、残念ながらそうできないですね
>>137
が書いている、自分で明示的にテーブルを宣言するというのは、例えば
cbox[1] = CheckBox1;
cbox[2] = CheckBox2;
とかいうコードを予め書いておく、ということでしょうか? >>140
意味がわからない
何がしたいの?
@コントロールを特定する必要がある
A複数のコントロールに共通の処理がしたい
Aにしか目が行ってないけど@をやらなきゃいけない時点で
Aの方法なんてエレガントにできたってウンコブリブリじゃん オムツの取り替えまでやって欲しい要介護は大人しくVBやってろ >>140
だから、配列が欲しいなら配列を自分で作ろうよ。
配列が欲しい、でもなんだか自分で配列を書くのは嫌だ。
この発想がおかしい。
var cbs = new[] {CheckBox1, CheckBox2, ...};
これ書くのがそんなに面倒?
変な方向に努力する方が余程面倒でしょ
ローカル変数じゃなくてメンバ変数かプロパティとして実装する場合だって手間は大差ないよ >>143
配列を書くのは別に面倒でもなんでもないです
コピペしてちょっと直せば済むので
ただ、コピペで済む内容なら、コードで表現する方法があるのではないかと思ったのです
「新しくなにかプロパティを実装する」のではなく、「このプロパティを参照するとわかる」
という情報が存在するのかと考えました
>>137
が書いてくれたように、「ありもしない物をあるはずだと思い込んでる」のかもしれません >>144
それって同じフォーマットの行が並んだ設定ファイルみたいになんでしょ?
どの部分を自動でやってくれると思ってん? >>145
自動でやってくれると言うか、Controls[n] の n に相当する部分を、何らかのプロパティで
持っているのではないかと思ったのです
それがわかれば、IDEでプロパティを書き換えてやればそれで済むな、と
あるいはそれがなければ、例えば
for (int i = 0; i < CBOX_ELEMENTS; i++) {
string s = "checkBox" + (i+1).ToString();
Controls(s).Text = ...
}
みたいな形で指定できないかな、と思っていたのですが、これは無理そうですし >>146
ちがくね?
お前がやりたいのって別のデータとid(?)が一致する項目にデータを入れていきたいんじゃねーの?
でもそれってコントロールを特定する必要があるんだよね?
コントロールとデータを紐付ける何かはあるの? GetAllControlsのカウント取るとかそういう? VB6はコントロール配列があったけどなー。.Netの世界にはないからの。 ttps://dobon.net/vb/dotnet/control/findcontrolbyname.html
名前で探せばいいのでは? だから配列に突っ込めば済む話を何でわざわざより面倒な方法で解決しようとするのw >>149
いや、単純にファイルから読み込んだ名前で、チェックボックスの文字を変えたいだけです
例えばファイルの中身が 犬,猿,雉だったら?CheckBox1-3の文字をそれぞれ犬、猿、雉にしてCheckBox4-20は「使用不可」にでもするような
だから機械的に参照できればよかったのです
>>153
これでほぼ解決です、ありがとうございます >>154
まあ一言でいうと、わざわざ自分で配列を作らなくても、それを実現する方法はすでに存在するだろうと思ってたのです
配列作ったら「そんなことしなくてもこう書けば一発で参照できるのに」って言われる方法があるんじゃないかと >>155
その下にインデクサによる説明もあるだろw public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Name ).ToArray();
}
private CheckBox[] checkBoxes;
} ■ このスレッドは過去ログ倉庫に格納されています