ふらっと C#,C♯,C#(初心者用) Part134
レス数が1000を超えています。これ以上書き込みはできません。
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/
■関連スレ
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/
■コードを貼る場合は↓を使いましょう。
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 今年の夏くらいからプログラミング勉強し始めたけど結局なーんも身についてなくて笑えない
ちょっと応用すれば出来るはずのことも全く同じサンプルがないと何も出来ないし頭の悪い奴ってのはほんとに必要ないなと実感したわ
こんなの身についてるってみんなすげーよ
ほんと尊敬する 趣味なら続けてればそのうちできるようになるよ
もし仕事にするつもりだったなら今すぐ考え直したほうがいい
向いてない人が業界入っても生涯最底辺確定だよ 今振り返るとプログラムを書けると自信を持って言えるようになるまで5年くらいかかった レベル2の症状だろ
レベル3になると、実はまだまだヒヨコに過ぎなかったと気づく 最近始めたんやけど、ラムダ式がまだまだ身につかんな…
自称プログラマーもまだまだ遠いと感じる レベル3の症状だろ
レベル4になると、実はプログラマに向いてないって事に気付き始める VS2015を用いてC#でアプリを作っています
現在テストを行う中でスタブを使おうと考えたのですがどういうものかの記述はしてあっても実装の仕方が見つけられないのでどう実装するべきものなのかアドバイスをお願い致します
なにか決まった構文などがありますか?
スレ違いなら申し訳ありません >>11
普通に実装するんだよ
たとえばリポジトリクラスをモックするなら、DBの変わりにListやファイルを使うように実装する
Moqみたいなアドホックなモックに頼るのは都合のいい脳内彼女状態になりやすいからお勧めしないな >>13
頼るんじゃなくて賢く利用するんだよおバカ >>11
言語以前の問題だから板違いではないがスレ違いだな
「デバッグに何か決まった手順はありますか」って聞くようなもの
そして「使おうと考えた」のではなく「使えと指示された」と邪推 >>14
その賢い利用というのが、テストが正しいかどうかはともかく、
なんでもいいからとにかくテストをパスさせて仕事から逃げることを意味するなら積極的にMoqを使うべきだな
プロダクトの機能に対して責任を持つのか、コーディング作業員として単体テストのレビューが通るところまでの責任なのか
プログラマの立場次第であり、絶対的にどちらが正しいとはいえない Moqの使い方すら理解できないキチガイがわめいてる xUnit自体のテストでもMoq使ってんのに何言ってんのこいつ >>19
xunit見てみたけど、内部的な依存関係の差し替えには全く使われてないね
テストツールをテストするという特殊な事情ゆえ、テストには(ユーザーにとっての)テスト対象コードが必要になる
その代わりとして極一部でMoqやNSubstituteが使われてるようだ
賢い使い方の一つだとは思うけど、リポジトリクラスやサービスクラスを差し替えたりするのとは全くの別物と考えるべきかと またヤバそうなのが湧いてるなw
先週みたいになるのかな?
いやーゴミは世に憚るってホントだね んな大袈裟な
俺は自分の経験(個人・チーム含む)からアドホックなモックは上手くいかないと思ってるけど、
実際に効果的に使われてるケースがあるならぜひ知りたいよ
xUnitのテストなんて超特殊な例じゃなくてもっと適切な例をplz どうやらUnit TestとIntegration Testの違いさえ理解できないガイジのようだ ワイクソ馬鹿
そもそも何のためにスタブとかモックとかがあってどういう時に有用なのか分からない
足りない所を補うみたいなイメージなんだけどプログラムが全部完成してからのテストなら必要ない? >>24
たとえばあるメソッドをテストするとして、テスト目的の箇所以外の依存関係をモック/スタブで差し替えれば、目的のロジックに集中できるしパフォーマンス的にも有利 >>24
例えばテスト対象のメソッドが何らかのAPI呼び出してるとして、そのAPIがエラーを返すケースのテストをする時にスタブを使ってエラーを返したりする >>24
テストしてて、ここ触りたくねえなあデータ用意すんの面倒臭えなあと思うことあるだろ?
正しいかどうかは別にして、とりあえず臭いものに蓋をしたまま手っ取り早くテストを終わったことにして帰宅できる >>26
>>27
>>28
ありがとう
そしてC#じゃない話広げてごめん
テストの為にSQLだったりなんか色々条件準備するの大変だからスタブで置き換えちゃおうみたいな感覚なのかな >>30
大変だからというか、テスト目的と関係ないAPIやDBアクセスに依存しないようにするため こういう奴らってサーバーがAWSとかGAEのサーバーが503で落ちてる時のテストとかどうやってんの?
DoS掛けて落としてるの? サーバーが落ちてる状態をスタブ/モックで再現すればいいんちゃう? プログラミング始めたてなんだけど、CSVファイルの先頭何行を無視してそれ以外のデータをデータベースに入れたいって状況になったんだけど、経験者の人はめっちゃ簡単だよって言ってて、
でも俺には全く想像もつかなくて、プログラミング出来る人の頭の中はほんとどうなってるんだ…
やっぱみんなもこれくらいのコード書くのは楽勝なの? >>37
一瞬でアルゴ思いつくけど、おまえやばくね? >>38
やっぱ経験者からすると簡単なんだ
すげぇなぁ…
CSVなんて触った事ないしそこから先頭何行とか全く想像もつかん
始めて数ヶ月だけどオレ向いてないんだろなぁ >>37
テキストの数行をスキップするのならすぐできるだろ。それがCSVになるだけ
CSVのパーサーについては
https://dobon.net/vb/dotnet/file/readcsvfile.html
にいくつもやり方が乗っている
ネットで調べればC#初心者でもできる案件 いっぺんに全部やろうとするんじゃなくて、小さい作業に分解して考えるんだよ
今回なら「先頭数行を無視してテキストファイル読み込む」にCSVは関係ないでしょ?まず欲しい分だけ読み込んで、CSVとしてパースするのはその後に考えればいい
ググって出てくるくらいまで分解すれば、あとは組み合わせておしまい >>41
>今回なら「先頭数行を無視してテキストファイル読み込む」
要素内に改行がある場合(めったにないが)を想定しなきゃならないので先にパーサーを通す必要がある
元の要件が「CSVファイルの先頭何行を無視して」だから >>42
この場合、先頭数行はヘッダーでcsvじゃないのでは まずは
・CSV の先頭になんかワケわからん行がくっついてる
のか
・CSV のデータを何件か読み飛ばす
のかをはっきりしろって話だわな どうせ読み飛ばすんだからどっちでもええやろそんなもんw ここ数日ここ見てたんだが自称上級者様がドヤ顔してるだけのスレだな >>47
どんなのが理想なんだ?
ぶっちゃけほとんどの質問に回答がもらえてるようだが 会計システムはクラサバが最低限の要件なので、計算はDBでやるからクラス分けなど何の役にも立たないし却って邪魔だ
彼はクラサバと無縁なスタンドアローンの世界に住んでいるのかもしれんね スタンドアロンだとして、どういうデータ設計したら費用項目ごとにクラスができるんだろうね
日付, 費用種別コード, 金額
まさかこんなタプルで管理してるんだろうか そ、ギョーミーな戦場ではオブジェクト指向などと言う玩具の武器は役に立たない 何をいっておる、LinqもLambdaも戦場の小火器として使えるが腐ったオブジェクト指向など使えぬわ 腐ったオブジェクト指向脳で単純なものを複雑にするヤツが大嫌いなだけ 結局個人的感情か
毎回レスの最後に ※個人の感想です って付けとけよ >>59
全レスそうだから省略できる
もちろん個人の感想だが 大きなスケール→ガチガチのオブジェクト指向
小さなスケール→手続き型、関数型 名前、住所、電話番号、みたいなデータがあったとして、
Aさんの住所を参照するのに、["A"]的なアクセスするやつ、なかったでしたっけ? ボタンを押すと処理を緊急停止するプログラムを作りたいのですがどのような方法がありますでしょうか? >>68
とりあえずthis.Close()でFormを閉じる
それでだめなら要件を挙げて 今はbackgroundWorkerで処理を実行しているのですが
CancelAsync()で停止させても
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
というコードに到達するまで停止しないので停止までに時間があるのを改善したいです
このコードをたくさん差し込むしかないのでしょうか? >>70
親フォームでkillしたらbackgroundWorkerも止まるんじゃないの? どういうことでしょう
あらゆる処理をForm1に書いていまして
killの仕方がわからないです backgroundWorker以外の処理は生かしておきたいって話なら分からないな
>>70
というかキャンセル用のフラグ作って止めなきゃならないところに停止処理差し込むのがそんな大変だとも思えないけど
楽したいってのはわかるけど、それは他の人に聞いて >このコードをたくさん差し込むしかないのでしょうか?
>あらゆる処理をForm1に書いていまして
まず、設計の仕方を覚えた方が良い 自作プログラムでSemaphoreFullExceptionが発生したんだけど、これってSemaphore使って無くてもTaskやawait使っていれば発生するようなもんなの? >>77
Unhandledで拾ったは良いものの、例外詳細見たらスタックトレースに他の発生行が無くてその例外行だけだったのよ
どこかでthrowし直してたとしてもその行が表示されるのにな >>70
なんか先週ぐらいも同じ質問してた人がいたけどw
だからさあ、メソッドを外から強制的に止めようって発想が間違ってる。
メソッド自身が何かをポーリングして自分で止まるように作る backgroundworkerとtaskの違いは何よ? >>81
ここで2回も聞くぐらいなら
やりたいことを英語にしてGoogleで検索した方がいいよ
ここにいる人が知らないか教えないだけで
やり方はちゃんとある
ポーリングとか今どきダサすぎるからやめとけ いやいやないからアホかw
あるなら言ってみ。まあ無理せんでよろしい。
生スレッドは強制終了できるが普通は推奨されない。 そもそも外から強制的に止めるって発想に疑問を持たない時点でセンスがない >>88
スレッドの強制停止は推奨されないから、事実上ポーリング的な手法しか無いと思うけど。
(マルチプロセスは考えないとして) CancellationToken.ThrowIfCancellationRequested()使うけど、これもポーリングだしな。 >>88
つか、今標準のCancellationTokenもポーリングが基本だよ
そっから抜け出るのに例外使うのがミソではあるが スリープで時間かかってたり繰り返しスリープ入れてるなら
Interruptを使って無理矢理中断させることもできる >>70
Async が付いている関数は、非同期処理だから、コンテキストが異なる。
だから、処理が実行される順番が確定しない
Sync なら同期処理だから、順番が1つに決まる。
つまり、ソースコードの上から下へ、順に実行される
コンテキストが異なるもの同士が通信するには、プロセス間通信(IPC)を使う。
基本的には、相手のキューに、投入することしかできない
1. 依頼する。A プロセス → OS → B プロセス
2. B が届いたメッセージを処理する
3. 返事する。B プロセス → OS → A プロセス
これを同期処理にすると、1〜3 の処理中、
アプリが止まる(ストール)から、GUI では嫌われる。
50ms 以上掛かる処理は、非同期処理にすべき
逆に、CUI では同期処理にして、コンソールが止まる このどことなくズレたレスをつける句読点過剰くんってのは、やはり糖質なのだろうか? 句読点箇条君はすぐわかるな
そして必ず間違ってる
スレッドが違うだけならIPCなんか使う必要ない
普通は単にメモリを共有する
FormsのBeginInvokeなどで使われているSynchronizationContextのキューも普通にメモリを共有してるだけだ つまり、1〜3 は、OS が行っている事だから、何もできる事が無い。
OS レスのマイコンとかなら、自分でプログラミングするけど
何かをしようとしても、OS がCPU のタイムスライス、
プロセスの優先度・実行順番を決めているから、何もできない
それがOS。
OSレスなら、それらを自分でプログラミングしないといけないから、無理 このアスペは>>97も理解してないんだと思うけど、初心者スレだから改めて否定しておく
スレッドが違うだけなら、>>95の123は正しくはこう
1. スレッドAがジョブの情報Jをメモリ上のキューQに登録する
2. スレッドBはQからJを取り出し、Jの内容に従って処理を実行する
3. Bは処理結果RをキューQ'に登録する
4. AはQ'からRを取り出し、後続処理を実行する
AとBの間で普通にQやQ'を直接共有してるだけで、OSなんか全く関係ない
そもそもマルチスレッドに限った話でもなく、例えば、ゲーム内で2つのキャラクターの間でやり取りしたい、
でも直接メソッドを呼ぶと長くなるとか、間にウェイトを入れたいとかで一旦処理をゲームループに戻したい、なんて時にも使える オレオレキューなんぞつかわずにTaskを使え
バックグラウンドといえどインプロセスで長大な処理を発生させるな
そういうのはジョブ管理サービスを使えHangfireとかな 今回はTaskかどうかは問題ではなく
「BackgroundWorkerの処理を中断する方法で、ポーリングより面倒くさくない方法があったら教えて」
なので
Thread.Abortでも使え Task大好きッ子もなかなかスレの流れ読んでねえよな asyncつけてるとエラー発生したらデバッグの実行位置の矢印の動きがおかしくなる RunWorkerCompletedでイベントオブジェクトのフラグをいじり、それを待機とかだめ? Task関連は7標準のランタイムだと使えないからいまだにBackgroundWorker使ってる
まあ他ソフトの事情で.NET 4以降一切入れないってことはないんだけどさ 自分のBackgroundWorker使ってるソース見てみると、
処理単位でループして1処理終った後と、長い処理の途中でwk.CancellationPending == trueで抜けるか判定してる
イベント待ちはタイムアウト設定して一旦抜ける
という感じだった
Task使っても同じだろう @Abortはしたくない
Aメインループのフラグチェックでは頻度が足りない
Bでもフラグチェック処理を書き足すのは嫌だ
要件はこれでいいか?
真面目に考えるとメタプログラミングの領域だな
チェック頻度とパフォーマンスのトレードオフも考えなきゃならん
初心者スレ民の実力では難しいんじゃないか? >>107
この頻度が足りないって、メインループの記述が冗長とか別の理由ありそうな気がするわ クッソ長いループ書いてんだろうな
マルチスレッドより先に基本的なコード整理術を覚えたほうがいい たくさんレスありがとうございます。
わからない言葉がたくさんあるので調べてまた来ます。 キーボードをa,b,c,dと順番に5秒置きに押していくメソッドをBackgroundWorker内で無限ループさせていて
キャンセルボタンを押したときすぐに止まって欲しいのですが必ずdまで押されてから止まるので困っているという感じです
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
while (true)
{
play_abcd();
if (backgroundWorker1.CancellationPending)
{
// イベントをキャンセルする
e.Cancel = true;
return;
}
}
} キーボードをa,b,c,dと順番に5秒置きに押していってすぐ途中で止められるプログラムを作るには
どういう方法があるんでしょうか?BackgroundWorkerにはこだわりません。
play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあってBackgroundWorkerを使うと
プログラム実行中でもきちんと表示されるのでBackgroundWorkerを使っています private IEnumerable<Action> GetJobs(int sleepMilliseconds) {
/**/var buttons = new [] { btnA, btnB, btnC, btnD };
/**/while (true) {
/**//**/foreach (var button in buttons) {
/**//**//**/yield return () => button.Click();
/**//**//**/yield return () => Thread.Sleep(sleepMilliseconds);
/**//**/}
/**/}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
/**/while (true) {
/**//**/foreach (var job in GetJobs()) {
/**//**//**/job();
/**//**//**/if (backgroundWorker1.CancellationPending) {
/**//**//**//**/e.Cancel = true;
/**//**//**//**/return;
/**//**//**/}
/**//**/}
/**/}
} play_aとplay_bとplay_cとplay_dを分ける
デリゲート配列にしてforeachで回せばチェックは一カ所で済む BackgroundWorkerじゃなくてタイマー使うべきだよ >>111
>>113
>play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあって
ってことはたぶんplay_abcdの中でbackgroundWorker1.ReportProgressを呼んでいる、
つまりbackgroundWorker1を参照できる場所にplay_abcdはあるんだから、
素直にCancellationPendingをポーリングするだけじゃないの?
本当はよくないと思うけどねこういうの
本当は前も書いたみたいにplay_abcdのシグネチャを
void play_abcd(Func<bool> canceled){...}
とかにして、呼び出すときに、
play_abcd(() => backgroundWorker1.CancellationPending);
がいいと思う
っていうか、そもそも
>キーボードをa,b,c,dと順番に5秒置きに押していくメソッド
をビジーループで実弁する必要本当にある?w
それ、タイマーで十分実現できると思うんだけど... BackgroundWorkerのほうが実装が綺麗になるよね >>117
スペース2つで改行だっけ?
普通のレスの書き方と分離するためにコマンドを先頭に付けるとかかな
専ブラが対応すれば専ブラだけでは見れるな タイマーなら、キャンセルでタイマー止めればそれで終わりでしょ
実装が見苦しいようには見えんね >>113
そもそも、なんで提示したコードがdまで実行しないとキャンセルされないか理解できてる?
理解出来てればBackgroundWorkerを別の手法に変えても意味がないことは分かると思うんだけど >>107
>Abortはしたくない
元質問者はAbortしたくないとは言ってないと思うぞ バックグラウンドなんちゃらってなんだ?
タイマーでいいじゃん >>126
そんなに悪くないね
bの後2秒待ってコンソールにハゲと出力
3秒後にc
みたいな仕様変更があったとしたらどうなる? >>130
アホなん?
そんなレアケース持ち出して何が楽しいんだ?
そんな風になったら別のコーディングするに決まってんじゃん タイマーでもTickイベントを1秒おきにすればその実装できるし
while+sleepとかアホすぎるわ >>131
推測でしかないが質問者のやりたい事ってAPIが提供されてないアプリのGUIオートメーションだと思うんだ
やってみるとわかるけど、等間隔キー入力の繰り返し、のような単調な操作のほうがむしろレアケースだよ バックグラウンドワーカーとかタイマーじゃなくてTask.Runの中にwhileとsleepとカウンタを全部ねじ込んだほうががまとまりがいいな ちなみに>>114の実装ならマクロが多少複雑化しても可読性がそこそこ良いのでオススメ
IEnumerable<Action> GetJobs() {
while (true) {
yield return () => SendKeys("A");
yield return () => Sleep(5000);
yield return () => SendKeys("B");
yield return () => Sleep(2000);
yield return () => SendKeys("ハゲ");
yield return () => Sleep(3000);
yield return () => SendKeys("C");
yield return () => Sleep(5000);
yield return () => SendKeys("D");
yield return () => Sleep(5000);
}
この考え方を進化させてJobsをActionの列挙ではなく式木にしたら記述が楽そうだな、とかインタープリターパターンで実装したらユーザー目線で便利そうだな、とか発展していく 非同期処理は、コンテキストが異なるから、処理の実行順番は確定しない
ビジーループするのは、もってのほか。
ビジーループは同期処理
非同期処理は、コールバック関数を使う。
相手の処理が終わったら、コールバック関数を呼んでもらう
コンテキストが異なるものは、マルチスレッド・マルチプロセスでも、
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから、
プログラマーができる事は無い
複数のスレッド・プロセスは、無関係に同時に、異なるCPU で動く(並行処理)から、
処理時間が短くなるが、処理の実行順番は、OS が決めるから確定しない
同期処理とは異なる 一番の問題は、最悪5秒戻ってこないポンコツってことだと思う そもそも、ビジーループ(ポーリング)しても意味がない
例えば、スレッドA から、10ms 毎にポーリングしても、
スレッドB の処理が10秒掛かれば、千回のポーリングは無意味
ポーリングしても、異なるスレッドの処理を速めることはできない。
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから
プログラマーにできることは、コールバック関数を登録することだけ。
スレッドBの処理が終われば、それを呼んでもらうだけ 鈴虫がまだ何か言ってるな
鈴虫は鈴虫の学校にでも通ってな フリーズしない/しても問題ないUIにすればいいだけだと思うが play_abcdって雑な作りから察すると5秒おきってのはaの動作が終わってから5秒なんじゃね?
本当に5秒感覚でキーを押したいならタイマーがいいけど、各動作を5秒感覚で実行したいならタイマーは使わない方がいいかな 2〜3台のPCだけで使う小規模なアプリケーションで、不変で追加もしない500×3列程度のデータを扱いたいです。EXCELでいうvlookup関数みたいな参照を行いたいのですが、EntityFrameworkだとSQLserverのインストールが必要?なため別の方法を模索中です。
csvやtxtファイルを実行ファイルと同じフォルダにいれて参照するのがいいか、もしくは別の方法があればご教示いただきたいです >>150
EF知ってるならSQLiteが現実的じゃね? >>150
そんなもんコード埋め込みでいいよめんどくせえ
動きゃいいんだよ
C#erってそういうの好きだろ 俺ならそんなもん一枚のHTMLとJavaScriptで作ってAWS S3に置くわ
その程度のことにデプロイの手間をかけるのはアホらしすぎる >>154
いちいちブラウザひらくのめんどくさ
ブラウザだとウィンドウサイズでかいし 今時一切ブラウザ使わない業務システムなんか存在するのか?
ブラウザくらい常に開いてるだろ 500×3でたかだが1500前後にデータベースは大げさだ
.resxファイルで済む量だろう >>150
>2〜3台のPCだけで使う小規模なアプリケーションで、不変で追加もしない500×3列程度のデータ
だったら500x3の二次元配列で行けると思う。 てきとーなクラス作ってXmlSerializerで永続化すりゃOK
検索も500件程度なら速度を気にせずLINQで楽々実装可能 今時新規でXMLはないわ
このまま衰退して消えてくれ JSONの指定があればJSONでもいいけど
何も指定がなければXMLで書くけどな
別にレガシーでもなくね? でも項目数多くなって激遅になったらCSVに戻せる構造なら戻したほうがいいよ xml、resx、json、yaml、SQLiteといろいろ選択肢がありますね。少し調べてみて良さそうなもの選んでみます。ありがとうございました >>169
XML比なら、
人間にとって扱いやすい
サイズが小さい
読み書きが速い
属性と要素の使い分けをしなくていい
JSON SchemaはXML Schemaより圧倒的に分かりやすく書きやすい
配列、マップ、数値、論理値、文字列という最低限の型付けがあるので、
プログラミング言語のデータ構造とのマッピングがしやすい(XMLは属性やXML Schemaで明示的にマッピングしてやらないと使い物にならない) 人間にとって扱いやすいだけはXMLの方が優れてると思うな
特にデータ量が増えるにしたがってjsonはそのまま読むのが不可能になってくる この案件だと、Excelで加工しやすいcsvがマッチしているんじゃないかな?
そりゃxmlだって出来るが、仕組みが大きくなる SYLKファイルにしたっていいんだぜ
どうせ作業量変わんないだろ 今時パーサーやシリアライザが揃ってるんだからどれでも同じな気はする >>175
データ量が多くなるとおせーんだよなxml,json
んで運用入ってから素人でも編集できるいいツールはないの?
って普通に無いからな(笑)
本気で作るものほどcsvやxls 結局は小さいデータなら下手なDBとか使うより、
csvの方が丈夫さとか確認のしやすさで良いって言うw だから上手なDBとか使えばcsvの方より良いんだろ DBはトランザクションあるから規模に関係無く必要だと思ったら使っとけ
設定ファイル的な話としたら
xmlとjsonって微妙だよねと 設定ファイル的な話だとしたらjsonって微妙だけどxmlはクソ
xmlはどんな用途向けにもクソ >>185
言うほど変わらんような気がするけど
何が嫌なんだ? >>186
嫌なのではなくクソだと言っとるのだが? アホちゃいまんねんパーでんねんって言われてもどう違うのか本人にしか分からんよw >>190
何が気にいらんのか知らんけど変な絡み方するのやめてもらえんかな? むしろお前が無駄に絡んでる気がするが...
俺も>>179でFAだと思う >>194
同じって事はないよ
どの形式でも必要十分な機械可読性を得られるなら
選択の決め手になるのは速度などではなく人間可読性
ヒューマンリーダビリティ
xmlはこれが壊滅的にクソ バックエンドだと設定ファイルは.csがベスト
貧弱なインテリセンスで間違えやすい設定なんか書きたくないっすわ
テストまで考えるとビルドなしで変更可能である意味がほとんどないしな 今日は特別に俺からのクリスマスプレゼントの言葉を贈ってやろう
お前らはもう少し自分の無知無能と真剣に向きあった方が良い >>180
多くなるならJSON Linesの方が効率いいよ
ログとかで普通に使われるファイル形式
CSVはスキーマが変わると面倒なんだよな 今時csvはなんちゅう本中華
レガシーへ(から)の接続ならしょうがないが >>202
いいアイディアだな
ただこのスレはこのまま残して
初心者雑談用として新しくスレが欲しいな そんなことしても質問スレで雑談が始まるのは目に見えてるやん... 議論スレがあるじゃん
脱線しそうなら自発的に移動して
ふらっと C#,C♯,C#(議論用) [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1469538912/ 無理でしょ
どこまでが質問の答えなのか雑談なのか区切りが曖昧だし >>199
ごめんなさい。
今日の朝、靴下にその言葉入ってたら読んでたよサンタさん! >>207
>>199みたいに自覚ない奴がいる限り誘導しても無駄でしょ
まあXMLに親でも殺されたんだろうな w ボクのおとうさんは、XMLというやつに殺されました
俺はWPFだなw 初心者なので教えてください。
xml ならDataSet.ReadXml()でお手軽に扱えてたんですが、jsonはどう読み込んで使うのですか?
ちょっとググったら、jQueryとか、webっぽいのが目についたのですが、ローカルexeでも使えるんでしょうか? >>211
NuGetでJson.NETを拾ってくる UWPならWindows.Data.Jsonが使えるのでダウンロードしなくてもよい XML最高って言う奴がいるけどDTDとかちゃんと理解して使ってるのか疑問
俺はさっぱりわからなないので放置してる
XMLは賢い人が集まって俺って賢いだろを連発してクソ企画になったって本で読んだ XMLは同じようなものが大量に並んでてゲシュタルト崩壊?してタグがタグに見えなくなる jsonの問題はコメントだな、一応使える場合もあるけど本式はコメント使えない
ググると作者が原理主義者でどうにもならんようだ >>218
じゃあ折角だし
ListviewItemCollectionやCollection<T>をソートするいい方法ってなんかある?
別インスタンスにするのはNG
並び替えたやつをループしてRemoveとAddを繰り返しやる方法以外思いつかなかった いいってのは何がいいんだ?
メモリ効率か?
ソート速度か?
コーディングの手軽さか? >>219
並び替えたやつをループとは?
どうやって並べ替えた? そもそもICollection<T>に要素の並び順なんてものはない
IEnumerable<T>として列挙されるときの順番ならOrderBy
その順番を使い回したいならToArray >>219
分かりづらかったんで質問を変える
private readonly Collection<string> hoge
のhogeを文字列順にするとき
foreach(var s in hoge.orderby()){
hoge.Remove(s);
hoge.Add(s);
}
でできたんだけど理由があってaddは使いたくなかった
add使わないで並び替えってできる? Comparison書いてSortすりゃいいのでは
この手の問題は並び順のルールの方に重点が置かれる、並び替え方なんてこの際どうでもいい Collection<string>がICollectionの間違いならToListして代入するだけじゃないの? >>225
Sortがあったら楽だったんだけどね
>>226
https://msdn.microsoft.com/ja-jp/library/ms132397(v=vs.110).aspx
読み取り専用だから代入できない
ICollectionは継承してるクラス
ToListした時点で別インスタンスだからそれに対してSortしても意味無い
>>223
気持ちは分かるんだけど使ってる先を修正できずこちら側で並び替えないといけない状況があってな
インデクサー定義されてるんだから並び替えできても良さそうなのに見つけられなかった point(1,1)
を
axis(1,1)
に正規表現で置換したいのですがどうすればいいでしょうか?
visualstudio2015です point\({.*}\)
axis(\1)
とやっても出来ないので悩んでいます >>227
なるほどw
でもreadonlyにこだわる必要本当にあるの? 自分でソートロジックかいて要素入れ替えていけば良いだけ
おれならそうとうな量でない限り、ソート済みの別インスタンスと入れ替えるがな >>224
理論的に考えてインデクサを持たないICollectionをAdd無しに内部での並び順を変えるのは不可能だろ もし元インスタンスにさわりたくないなら、元のコレクションとは別に
ソートした結果のインデックス位置をもつコレクションつくってそっちから引っ張るけど >>232
IListも継承してるクラスだからインデクサ持ってんじゃないかな
元インスタンスに触りたくないというよりは元インスタンスにも反映させたい
別クラスで作られたオブジェクトのインスタンスを渡してもらっていて、それをreaonlyにセットこっちのを並び替えたら同じ様に元のデータも並び替えられるって感じ
ここら辺の構成は弄れない
本当に勘弁してほしいわ >>235
ICollectionはIEnumerableしか継承してないんだがIListも継承してるとは? >>237
今議題にしてるのがCollection<T>クラスだからそっちの継承をみてくれ >>236
マイクロソフトのドキュメントみて\1を$1にしたらできた >>238
すまんな
じゃあ先頭から参照書き換えていけばいいのでは? >>239
(にして$にしたらできました!有難う御座います! なるほど、Add、Removeじゃなくてhoge[i]=s みたいな感じで順に設定し直せばいいのか
多分>>233も同じことを言ってたんだろうけど別の意味で捉えてた
次からそうするわ 車輪の再発明感全開だなw
public static class Extensions
{
public static void CopyTo<T>(this IList<T> src, IList<T> dst)
{
int count = Math.Min(src.Count, dst.Count);
for (int i = 0; i < count; i++)
dst[i] = src[i];
}
public static void Sort<T, TKey>(this IList<T> x, Func<T, TKey> keySelector)
{
x.OrderBy(keySelector).ToList().CopyTo(x);
}
} C#はメモリ不足でコンパイルできないことはありますか? >>249
該当するコンパイラのスレで聞いてください >>249
絶対にないとはいえないけど、そもそもそんなマシンじゃ開発なんてできやしない。 >>249
その前にVSが重すぎてまともに動かないから大丈夫 >>252
コンパイルとVisual Studioは別問題 Windowsアプリケーションにおいて、ソースファイルのフォルダ分けはどのようにされていますか? 自前のクラスに、作成済みオブジェクトを探してオブジェクトを返すメソッドを作るにはどうすれば良いんですか?
Xamarin Androidにいうfindbyname()、UnityでいうGameObject.Find<T>()のようなものを自前のクラスにもつけたいんですが・・・・ >>256
Dictionaryに名前でオブジェクト登録という方法があるけど
わざわざそんな無意味なことをする意味が分からない
UWPやWPFやwindows forrmsでは
xamarinのfindbynameみたいなものわざわざ使わないでもいいのに >>254
コンパイルの質問なのにVisual Studioの問題にすり替えるのが不適切だと言ったまで データにメソッドをチェーンするのが関数型言語の特徴なのかなと解釈してるんですけど、c#は関数型言語も内包してると考えて良いのでしょうか?
で、F#は関数型専用言語という位置づけで >>262
F#は関数型専用ではなく、マルチパラダイム >>263
そうなんですか
となるとc#にかなり接近してる気がするのですが、F#がなぜ作られたか不思議です >>262
まず大前提としてメソッドチェーンと関数型プログラミングは何にも関係ない
下手にオブジェクト指向とのマルチパラダイムから入るより、まずはML系とかHaskell, Schemeみたいなちゃんとした関数型言語を触って特徴を掴むのがいいと思う 関数型言語やるとコードが綺麗になるから目的なんか関係なく一度は経験するべき >>249
>>251
パソコンのメモリは十分に余裕があると仮定してプログラム的な容量の限界が知りたいです。
C#は無限にコードが書きこめるということですか? C#言語にはソースコードサイズの限界なんて定義されてない
むしろ定義されてる言語って存在するの? >>270
無限にコードが書き込めるって、具体的にどういうことを想定してるの? コンパイル可能なソースコードサイズがコンピュータのメモリ資源に依存するコンパイラがあるってことじゃね >>271
VB6は数百万行で限界が来てコンパイルできなくなりました。
>>272
コードを千万行単位で書き込んでも大丈夫か知りたいです。 適宜プロジェクト分ければ楽勝だろ
VS自体のソースとかだと余裕で超えてるだろうし >>271
コンパイラーの上限値を明記してる処理系はあるけどc#の見つからんな。
何処かにあるはず。 コンパイラエラーCS1033の記述に
/debugオプションを指定した場合は16,707,556行。しない場合は268,435,454行って書いてある。
1つのソースコードファイルにそんな行数を想定してるんだw 1ファイルの行数の制限はCで見たことあるけど
プロジェクトやモジュール単位での総行数の制限は見たことないな
本当にそんなのあるの? >>274
そんなサイズのVB6なんて見たことないw 約1600万行のcsファイル開きたくないな
どう考えてもGodClassですがな Visual Studioのエディタがハングするだろ >>267
lisp/scheme は関数型にはいりますか? >>274
> コードを千万行単位で書き込んでも大丈夫か知りたいです。
試せばいいだけ >>284
何をもって入らないにしたいのかわからないくらい入るじゃん >>288
lisp って太古の昔から存在しているじゃない、これに比肩するのは cobol とか fortran とか、位に
そんな昔に関数型が存在できたのか? コンパイラなんて自分で書いたことも理論勉強したこともないけど、
扱える識別子の数の上限とかは当然あるんだろうなあ
もっとも、恐らく全部がオンメモリで動いてるはずのインテリセンスの限界ですら
普通のプログラマはたぶん経験してないはずで、必要ならディスクも使えるはずの
コンパイラの限界なんて実用上は無限と想定してよいんじゃないかしら 言語を二次コードとして
一次コードから生成する形のプログラムを組んだらそういう限界を超えやすいかもしれんな >>289
実装として問題ない性能が出たかは別として、関数型パラダイム自体は大昔からある
ラムダ計算も提唱された時期はチューリングマシンとあまり変わりなかったはず
関数型なんて要は文より式を多用する書き方ってくらいの認識でいいよ
初期Lispだって十分関数型といえる >>256
>作成済みオブジェクトを探してオブジェクトを返す
という点だけで反応するけど、シングルトンのオブジェクトを共有したいみたいな話なら
MEFとかUnity(ゲームじゃない方)とかのDIコンテナ利用すればいいんじゃないかな。 javascriptで生成後の値をスクレイピングして取得するにはどのような方法がおすすめですか? >>295
普通にヘッドレスブラウザ & Seleniumでいいよ
今ならchromeやfirefoxがヘッドレス対応してる
C#はSeleniumライブラリの出来がイマイチなのでpythonやその他の言語を使ったほうがいいだろうね >>296
ベースはC#で行きたい場合、スクレイピングはpythonで作って、dllにでもして呼び出すイメージでしょうか? C#でもSeleniumは動かせるよ
おすすめはしないってだけ python使うならモジュールではなくサービスにしたほうがいいだろうね 普通にProcess.Startでいいよ
スクレイピングなんかそれ自体クソ重いから連携はファイルベースで全く問題ない oracleに接続するのはodp.net安定ですか? ファイル、新しいプロジェクトを選びます
Windowsフォームアプリケーション
を選択したいのですが、見当たりません
visual studio 2017インストールし、C#の勉強をしようとしています
背景が真っ黒で白地にしたいですが、表示(V)を左クリックしても背景を変更する設定が分かりません
c#本を2010年に買って、8年かかってやっとインストールする気になり…当時はvisual studio2010をインストールしてね、でしたが…
2017をインストールしました スタートボタンからblend for visual studio 2017を起動してました
vのvisual studio2017から起動したら、白背景、Windowsフォームアプリケーション(.net flamework)ボタンがありました
.NET Frameworkは外したいけと、外せないようですね >>307
307さん、ありがとう
本のサンプルプログラム、1つ動かせました
早く.exe作りたいです
少しずつページを進めます! 楽しみにしているところ申し訳ないが、動かせたのなら既にお前は.exeを作っている プロジェクトが作れない
こんなのがFAQなんだからMSはいろいろと見直したほうがいい 初心者でも落ち着いて考えれば十分解決可能な問題のような気もするんだけどね まったりとした雰囲気ありがとう、皆さん
自分は古く融通が利かないタイプです
フォルダ作ってコンパイラとリンカ放り込み、パスを通してbat作ってコンパイル
エラーが出たら、エラーリストをテキストエディタで読みタグジャンプ、エラー修正…
開発環境はFD1枚で持ち運び
だから今の開発環境インストール50GBに驚愕、ソースバックアップどうするの??開発環境はノーパソごと持ち運びか?とか
visual studio2000いくつかを過去にインストールした時はOSごと落ちてOS再インストールを味わって困惑してました
奮起してゆっくり覚えます >>315
batでコンパイルならMSBuildはまだ現役だからそうそう焦ることは無いんじゃね
ソースバックアップは今ならオンラインでGit使えば履歴・差分管理も出来て楽だよ >>315
言うほど何個ものコンピュータで開発するか?
それぞれで環境作ればよくね?
プロジェクトは個人ならOneDriveかグループならGithubとか なんかcmd.exe←全部半角にすると書き込めないね int a=2;
int b=3;
int c=9;
int d=11;
このうち10より小さいもののうちで一番大きいものを選択する(アルファベットを返す)コードはどういうふうに書けばよいでしょうか? >>327
var list = new List<int> { a, b, c, d };
var result = list.Where(l => l < 10).Max(); var dict = new Dictionary<string, int>(){
{"a", 2},
{"b", 3},
{"c", 9},
{"d", 11}
};
var result = dict.Where(data=>data.Value<10).Max(data=>data.Value).Key; 何度もすいません
int a=2;
int b=3;
int c=9;
int d=11;
同じアルファベットに対応したフラグ
bool a_flag=true;
bool b_flag=true;
bool c_flag=true;
bool d_flag=false;
このうちフラグがtrueの中のもので一番大きいものを選択する(アルファベットを返す)コードはどういうふうに書けばよいでしょうか? そういうことをやりたいなら
C#入門を全部終えてからやれ 処理内容を変数の名前に依存するのは悪いやり方
int aがbool a_fragに関連していると決めているのはコードを書いてる人間だけ
プログラム上は関連づけられてない
とんでもない愚かなコード C#でなくパッパラパー向けの言語やればいい
Pなんとかっていう >>334
それだと最大値をもつものが複数あった場合が考慮されていない >>336
うむ。
一応Valueは重複しないものとして最初に出現したやつを選ぶことにしておいた 最大値を持つアルファベットをすべて出力するVer
https://ideone.com/RfUhMp ありがとうございます
自分のコードにあてはめて書いてみます
また来ます 何故Max関数はリストの要素そのものではなく判別に使った式の値を出力する仕様にしたのか と思ったけど最大値が複数あるときにそうじゃないと困るからか!初めて気付いた いやいやそんな理由じゃないぞw
最大値を求める関数から要素返されても困るだろ >>342
まあそうなんだけどさw
要素自体を抽象的な順序数として考えれば要素が返されてもおかしくないのにって思ってたは w どれか一個えらぶ関数じゃなくて一応演算の結果を返す関数だからな
SumとかAvgとかと挙動違ったら面倒くさい >>331
さっきの解を、swichで判定だな。
もしくはdictionary型をつかう。 var list = new List<bool> { true, false, true, true, true, true };
Console.WriteLine(list.Count(true));
trueの数を表示させたいのですがこの場合ラムダ式はどのように書けばいいでしょうか? それは「この場合ラムダ式」が分からないんじゃなくて、そもそもラムダ式がまるで分からないんだと思うw
質問する前にやることがあるんじゃないのかな ラムダ式以前にc#がわかってないだろ
コード書くには早すぎる
入門書を読み返せ
回答が出てないなら新しいのを買え var list = new List<bool> { true, false, true, true, true, true };
Console.WriteLine(list.Count(n => n == true));
とりあえずこれで動きました
nはメソッドの引数みたいなものでなんでも構わないのでしょうか?
var list = new List<bool> { true, false, true, true, true, true };
textBox1.Text = list.Count(n => n == true).ToString();
また上の様にすると動かないのですが、これは何故でしょうか? 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f) 質問です
わたしはパッパラパーなりにC#を勉強してきて、自分用の初歩的なGUIアプリを作れる程度には覚えれたんですが
Pなんとかのほうが良かったんですか?
それがパッパラパーに向いてる理由をふくめて教えていただけるとありがたいです >>352
そう、nは引数。
>>352
動かないとは具体的にどうなる?エラーとかでテルル >>354
Tostringの後の;で
型 'System.NullReferenceException' のハンドルされていない例外が LINQtest.exe で発生しました
追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません。
と出ます >>353
Pなんとか=Python?
Pythonだと高度な機能が無いから簡単ってことかな?
でもC#で簡単な機能だけ使えばいいのでは... >>356
うーん...ideoneに全部貼ってうp頼む >>358
https://ideone.com/mDt50q
こちらになります
お手数おかけしますがよろしくお願い致します。 >>359
Form1メソッドはForm1クラスのコンストラクタなんだが、ここじゃなくてform1_Loadの中に書かないといけない。
デザイナーでフォームのウィンドウをダブルクリックすればform1_Loadが作成されるからその中に。 あと、コピぺするときに省略しただけかもしれないけどInitializeComponent();っていう文がForm1メソッドの中に書いてあったはずなんだがそれは必要 >>361
出来ました!
有難うございます。
助かりました。 >>334
同じ値の時はあらかじめ決められている優先順位を取りたかったのでこのコードが非常に参考になりました
有難う御座います。
優先度が高いものを上にすればいいんですね
var flaggedList = list.Where(data => data.Flag);
これだけよくわからないのですがif(true)とかと同じ様な書き方でtrueのものだけソート出来るんでしょうか? 上は下の省略形で下の括弧内で好きに条件をかけばいい
data => data.Flag
data => {return data.Flag;}
勿論ifも使えるしこんな感じで書きかえることもできる
data =>{
if(data.Flag){
return true;
}
else{
return false;
}} レス有難う御座います。
>>334
でFlagが全てfalseだった場合止まってしまうので、mavValueOwnerKeyに空である表示をしたいのですがどうすればいいでしょうか? ある文字列に特定の文字列が含まれていれば別の文字列に置換する、という処理を行いたいんですが
だぜ→です
ですわ→です
といった感じの置換したい文字列が数百パターン存在する場合はひとつひとつ置換を試していくしかないのでしょうか…? >>371
基本的にはreplaceを使うことになると思うのですが、例えば
'今日はほんといい天気だぁ〜〜〜!!'
という文字列に対して
だぜ→です
だぁ→だ
ほんと→ほんとうに
といった変換ルールが複数ある場合は
ひとつひとつreplaceをかける(あるいはループで変換ルールすべてを試す)しかないのかなぁと思いまして
要するに実行速度が気になっているのです >>372
やってみろよ
問題なければそれでいいじゃん >>373
それもそうですね
一度試してみます
ありがとうございました >>372
そこに”今日はほんとうにいい天気だ”を突っ込むとどうなる? 変換済みワードは一旦固めてしまわないと駄目かもしれんね インクリメンタルにトライ木に掛けると1走査でできるよ switch c
case 'だ':
var n=nextWord();
if(n=='ぜ')
replace("です");
else if(n=='ぁ') C♯のswitchってC♯6からint以外も扱えるようになってたのか知らなかった "one"
"two"
"three"
の様な文字列が用意されていて
int keisan(2,"one")
→2*1
int keisan(2,"one","two")
→2*(1+2)
int keisan(2,"one","two","three")
→2*(1+2+3)
int keisan(2,"one","three")
→2*(1+3)
の様な結果を返すメソッドを作りたいのですが
引数の数が決まっていないメソッドを作るにはどうすればいいのでしょうか? シグネチャは int keisan(int x, params string[] xs) になるかな たぶんずっと同じ人だと思うけど、こういう人には質問するより前に
まず自分で一通り勉強したらって言ってあげるのが優しさだと俺は思うけどなあw 質問するより前にまず自分で一通り勉強した結果がお前らなのだから
俺は自分で勉強するより前に質問する方を選ぶよ 例えばこんな感じのことがしたいのか
2の部分や演算順序が固定で気持ち悪い感じするが、簡易パーサーか何かかな
https://ideone.com/b4A3Hl 勉強というよりもこの程度の内容をググれないのが心配だ
"引数の数が決まっていないメソッド"って感じの適当な検索でもかなりヒットするのに ここは
>「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
て、ことだからねえ。
>>1 が気にいらないなら自分で自分の主義にあるスレを立ち上げればいいだけ。
検索するにも適切なキーワードを思いつけなくて1日悩み続けた挙げ句に、聞いたら一瞬で終わるなんて事もあるし。
今回のは簡単な方だったみたいだけど。 >>399
「VS2017 のプロジェクト(P)→プロパティ(E)のスタートアップオブジェクト(O) に相当する
eclipse や intelliJ のメニューってなんですか」
と、今も探しているが、そもそも適切なキーワードが思いつかない
自分の話ですまん‥ (1) 勉強して理解できなかった疑問点や調べても解決しなかったことを質問する
のと
(2) 面倒くさいからとにかくお前ら手取り足取り教えてくれ
では全然違うと思うよw
誰でも変な思い込みや勘違いをすることがあるから、(1)であるならくだらない質問でも問題ないと思う。
でも(2)は見ててあんまり気分がよくないなと思う人もいると思うけどね。
っていうかそういう道徳的話はともかく、それって学習効率悪いよね絶対。
優しさ云々はそういう意味 くだらない調査に時間かけるより聞いた方が良い
答える方もグダグダ言わずに知ってることを教えてやれ
そういうネットワークができれば社会全体の生産性が上がるんだよ
日本にはなくて外国には当たり前のようにあるシステムだ
日本人は性格が排他的すぎるからITに向いてない
だから負けるんだ >>385
>>386
>>387
有難う御座います。
後でやってみます。
入門書は一冊終わらせてはいるのですが作りたいものを作ろうとした時、その本に載っていないことの方が多くて…
ここのスレの方々のおかげで今作っているプログラムもだいぶ形になってきました
非常に助かっています
可変長引数についても一応事前に調べて存在は知っていましたが説明を読んでもいまいちわからなく
もっと簡単な方法があるかも…と思って聞いてみました
でもやっぱりparamsと答えられたのでそれがベストなんだなと知ることが出来て
説明をもう一度読み直したらなんとか理解出来ました >>394
ありがとうございます。
参考にします。 くだらん質問だと思うならスルーするなり他のスレに行けよ
ここは
> 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
だよ ちなみにこういう書き方はできるのでしょうか?
int keisan(params string[] xs,int x)
int keisan("one","two","three",2) 無理です
ちょっと考えればそれができたら困ったことになるのは分かるはず >>406
paramsは最後のみ
エラーでるから試してみるといい
>>405
スルーも何も質問は2分後に解決してる
その後はこういったプログラミング初心者対して別アプローチをした方がって話で質問とは関係ないと思うんだが >>407、408
よう初心者クン
で何を教えて欲しいのかね? >>407
最後にint型が来るって指定なんだから別に困らない
パターンマッチではよくあるでしょ >>410
この場合は困らんけど一般的には困るだろ
こんな文法が許されてたら。 >>411
デフォルト引数の順番の制限もなくなったことを考えてみ? >>408
> 質問とは関係ないと思うんだが
スレ違いだとは思わないのか? 可変長は一種類だけで、最後に定義しないといけないみたいですね
無事に機能を実装できました。
質問に答えて下さった方有難う御座いました。 >>412
おまえに言われなくてもそんなこと考えてるし
そのパターンは非現実的だって分かるだろ >>416
hoge(arg=1, args=2, arcs=3, n=2)
↑
argsの配列感がない上に1,2,3っていう順番付けが曖昧
hoge((arg=1, 2, 3,) n=2)
↑
こんな文法を作ったとしても、もう配列で良いよねってなる
説明させんなよメンドくせえな なぜ>>417はこの程度の理解で答えたがるのか?
他人事と思わず皆考えてみよう rubyも昔は可変長引数は最後の仕様だったけど、今は途中でも大丈夫になってる
結局は作ってる人のやる気次第だな >>421
無理矢理でもやってるやつもあんだな。
ま、>>407 は
「ちょっと考えれば分かるだろ質問すんな」じゃなくて、
『は?なんで可変長だけ順番変えねえの?キモッ。』って思われるかもしれないから、納得できるように付け加えただけな。 async/awaitを使った際の実行の流れの図があったら誰か見せてくれんかな ありがとうございます
図はよくわからなかった点も多いので、ゆっくり記事を読んできます よくみたら間違った図ではないが
使う上でなんの説明にもなってない図に訂正
この図だけをみると初心者がハマる ↑の人はたぶんコードと図で1セットになってることに気付かずに
図だけ見てそう言ってるか、あるいはなんか思いっきり勘違いしてるだけだと思うから
安心して参考にしていいと思うw 説明するのが非常に難しいんだけど
async/awaitの挙動をまともに書いてる記事が少ない
有名人でも間違った解説をしてる >「メソッドを一時中断し、awaitされた処理の完了を待って残りの処理を再開する」
非常にグレーな表現
>@に続けてAの処理が別スレッド上で開始される
非常にグレーな表現
HevyWork()の中身が必ずすべて別スレッド上で行われてるわけではない 出来たら苦労しない
場合訳が複雑なので
非常にめんどくさい 言っちゃ悪いけど、これも立派な2ch脳だね
羊たちの沈黙にあった台詞だけど、その批判的精神を自分自身に向けるだけの理性はないのかw >>434
いや、>>428の記事は十分わかりやすいし間違ってもいないから安心していいよw それぞれがそれぞれの心の中でお前が言うなと思う
上にあった図を参考にしてるといつか全然思った通りに動かなくなり?マークになる 初めてのJavaScript 第3版、オライリー、2017
JS には、async/await が無いから、
この本では、generator runner の仕組みを説明している。
co, Koa というライブラリを使う
非同期処理は異なるコンテキストで、
別のスレッド・プロセスだから、どこを実行しているのか分からない。
実行順番も制御できないし、例外処理も使えない
generator runner は非同期処理を、yield で待つように作る。
これにより、非同期処理を同期処理のコンテキストに当てはめるから、
実行順番を制御できるし、例外処理も使える
try{
yield promise 非同期処理
} catch {
} 異なるコンテキストとは、同じソースコードに書いていても、
OS から見ると、別のプロセス・スレッド・実行単位になる
OS は、1秒間に数万回も、実行単位を切り替える(コンテキストスイッチ)から、
今、別の実行単位の、どのコードが実行されているかは、全く分からないし、制御もできない
別の実行単位に対してできることは、
タスクの終了を待つか、タイムアウトするか、タスクを止めてもらうかだけ >>440
>JSには、async/awaitが無い
何言ってんの? 句読点君のレスを判定するアルゴリズムを作ろう
機械学習の勉強によさそう >co, Koa というライブラリを使う
あぁ、このアホか。C#スレまで出張ってきてうざいな。 C#始めて1カ月程度の初心者です
trackbarの値をBackgroundWorkerに渡して、その値を使って別スレッドで画像を生成して、whileとReportProgressでtrackbarの変更に合わせて画像を表示していくプログラムを作っているんですが、
trackbarの値をBackgroundWorker_DoWorkに渡すのってどうやるんですか?
別スレッドなので、trackbar.Valueでそのまま使う事ができなくて…
デバッグ無しの実行ならよく分からないですが、そのまま使っても実行できて上手く画像表示されている事が確認できたので、
スレッド間でtrackbarの値を渡すのだけが上手くいかなくて悩んでます トラックバーの値変更イベントのイベントハンドラでフォームのフィールドにトラックバーの値を保持しておく
それをバックグラウンドワーカーで読み取る >>447
それって両スレッド共通の変数を作っておいてトラックバーが動いた時のイベントハンドラでその変数に値を保存していくって事ですよね?
それも試したんですが、よくわからないエラーが発生して動作が止まってしまいました それか、Invokeでアクセスする
// コントロールが破棄されてないかチェック
if (trackbar.IsDisposed)
return;
var value = 0;
// Invokeが必要かチェック
if(trackbar.InvokeRequired) {
Invoke((MethodInvoker)(() => {
value = trackbar.Value;
}));
} else {
value = trackbar.Value;
} >>448
じゃあ、値変更イベントハンドラ内でトラックバーの値をフィールドに設定するところと、バックグラウンドワーカーでそのフィールドから値を読み出すところを、lock{...}で囲む その処理は別スレッドでないと出来ないのか?
という身もフタもない突っ込み lock (トラックバーの値を保持してる変数) { ... } のミスでした >>450
ちょっと用事ができたので今は試せませんが、両方試してみます
>>451
割と重い処理なので、同じスレッドのトラックバーのイベントハンドラで処理を行うと、トラックバーの動きがかくついてしまったので、分離したいんです >>454
課題でバックグラウンドワーカー指定されてたので、
それ初めて聞いたんですが、同じような事が出来るんですか? >>455
BackgroundWorkerは、標準機能で専用のeventargを使ってオブジェクトを一つ引き渡せたはずだが
マニュアルしっかり見たほうが良いよ >>456
それってバックグランドワーカーを開始する時に値を渡す事ですか?
WhileとReportProgressで画像表示していて、バックグランドワーカーは止まらないので開始時の値を引き渡すのだけでは、トラックバーの値変更に対応できなさそうですが、できるんですか?
的外れな事言ってたらすみません。
まだ学び始めたばかりでわからない事だらけなので
ちなみに画像生成に使うトラックバーは7本あります >>455
async/awaitならイベントハンドラの中に1行で非同期処理書ける
課題なら仕方ない >>448
処理イベントを多重呼び出ししていない?
busyのときは呼ばないように
>>446
>whileとReportProgressでtrackbarの変更に合わせて
ReportProgressでは元のスレッドのコントロールにアクセスできるからこの意味がいまいちわからないが
とりあえず
・BackgroundWorker_DoWorkに渡す
https://dobon.net/vb/dotnet/programing/displayprogress.html#backgroundworker
呼び出す側
int value=trackbar.Value;
BackgroundWorker1.RunWorkerAsync(value);
Do_Work側
int value=(int)e.Argument;
>>453
>割と重い処理なので、同じスレッドのトラックバーのイベントハンドラで処理を行うと、トラックバーの動きがかくついて
かくつかない程度に仮処理用の縮小画像を作る
>>457
>トラックバーの値変更に対応できなさそうですが
リアルタイムに反映は理屈から言うと無理
処理量が少なければそう見えるようにも作れるから画像が大きければトラックバー動作中は縮小画像で >>455
>>446と同一人物?
仕様の詳細が分からんので断定はできないけど、
断片的な情報から判断すると
(1) 無限ループでTrackbar.Valueをポーリングして
(2) 変化を検出したら画像生成を開始
(3) 完了したらBackgroundWorkder.ReportProgressを呼んで
UIスレッドで画像を表示
こういうこと?
もしこうなら、スレッドで無限ループ回すって発想がたぶん間違ってる。
諸事情でBackgroundWorkderを使う必要があるにしても
Trackbar.ValueCangedイベントでBackgroundWorker.RunWorkerAsyncを
呼んで都度画像生成処理を開始するようにした方がいいんじゃないの?
それならTrackbar.ValueはRunWorkerAsyncの引数で渡せる >>460
ブラウザ部分同じだから同一人物で間違いない
>>457
次からレス番でコテハン付けて
一応捕捉でRunWorkerAsyncの引数はobjectなので
https://msdn.microsoft.com/ja-jp/library/f00zz5b2(v=vs.110).aspx
受ける側でキャストしたらListでも配列でも使える ただこの場合でも、ValueCangedはたぶんユーザーがつまみを動かかしている間は
逐次的にイベントが発生しちゃうと思うから、BackgroundWorker.RunWorkerAsyncを
コールするのは、例えばValueCangedが発生しなくなってから1秒後、みたいな工夫がたぶん必要になるのかな
知らんけど >>459
起動時にRunTaskWorkerを呼び出す。
↓
doWorkでは無限ループでトラックバーの値の変更を監視
こういうことだと思う。
知らんけど。 public void testA()
{
bool error=false;
error=true;
if (error == true) { return; }
textBox1.Text = "ok";
}
error=true;
if (error == true) { return; } をまとめてメソッドtestBにするにはどうすればいいでしょうか
testAの中でtestBを実行し、testBでエラーが出たらtestAもそこで処理を中止して
textBox1.Text = "ok";を実行しない
というプログラムを作りたいのですが これじゃダメ?
―――――――――
...
var error = testB();
if(error) return;
...
―――――――――
public bool testB(){
var error=false;
error=true;
if(error) return true;
retrun false;
}
――――――――― >>465
やはりtestBメソッドの後で判定するしかないですよね。
ありがとうございます。 Janeでいう画像のようなフォームを作りたいのですが、
フォームにはどのようなコントロールを配置しているのでしょうか?
列名にはButton、一覧はListBoxのように見えます。
https://imgur.com/a/mOqw6 >>464
> testAの中でtestBを実行し、testBでエラーが出たらtestAもそこで処理を中止して
> textBox1.Text = "ok";を実行しない
例外で一気に抜ければいいだろ >>467
ListBoxのViewプロパティをDetailsにしたやつと同じ
上のボタンはColumnsプロパティで編集できる あと、多分FullRowSelectプロパティをオンにしないと行をクリックしたときに一列分しか色が付かない >>469,>>470
ありがとうございます
1つのコントロールで実現できるのですね
作るときにFullRowSelectも意識してみます 今ってC#なら何でもできる時代か?webページもゲームもWindowsアプリもandroidも 初めて目にしたものに万能感を感じてるだけ、刷り込みという でもここまで全部作れる時代ってないんじゃん?
全部c言語の時代以来だな アプリ開発言語としてはWebのフロントエンドを除けばほぼ何でもできるので
目下最も万能な言語であることには違いないが、道具を前提にして物事を考える癖がつくと頭悪くなるから一つに拘るのはお勧めしないな まあ、なんでもいいしね
msにはsilverlightに騙されたのでこの辺の信用は薄い >>477
WebのフロントエンドはhtmlとJavaScriptという道具を前提とするしか無いが。 >>480
騙されたと言うかJavaScriptの進化が速くてJavaアプレットもオワコン なんかWeb系の人多いね
Webとは一切関わらずに来たから
色々と世界の違いを感じるわ 直接の原因はセキュリティ対策を名目にしたプラグイン排除の動きでしょ >>483
そっちはついで
サーバー側がメインに決まってんじゃん
片手間で意外と時間がかかるのがムカつく
画面なんかデザインと相談しろよ 職につくために限定的な開発だけじゃあ厳しいなってC#なら何でも作れるようにならないとなって思って >>487
逆引き辞典でも買っとけ
〜できる?って聞かれたときいいぞ スタブってのがほんとに分からん…
どんな知識が必要でどんな風に使うのかイメージ出来ん
DAO?とかの概念が自分になくてSQLを扱う部分とロジックがごっちゃになってるとそもそもスタブでなんとかしようってレベルですらないのかな
なにか猿でも分かるような記事とかないですか… >>490
スタブはテストのためのダミーだよ
完成まで一時的にいれておいてビルド通したり
テストで実際の環境に影響をおよぼさないために使う
テストしない
完成まで途中で実行しない
ならいらない ここ雑談所とかロビーじゃないんで
リンクテンプレにあるんだからワッチョイの無い相談室でやればいいのに sqlserverからレコード取得する処理で、dataReaderを別関数に渡して、
そっちでdataReader.Iten("hogehoge")するのってありですか?
一部のカラム名だけが異なる類似レコードの取得処理をまとめたいなあと >>498
それ自体は特に問題はないけど、可能ならDapperとか使った方がいい >>498
その手の仕事なら、拡張メソッドで書くとスッキリ書けるよ >>498
Itenがなにかはわからんけど、dataReader を渡すのはありでしょ ItemItemって考えてるとあいてむってなんだっけ?ってなるよね データが大量の場合は予めカラム名から序数取得しておいて、序数指定にするんだっけか
今はDapperばかりだから忘れたわ 一時期ORMが流行ったがメモリ食いすぎと重すぎて今じゃBI以外で使う機会がない
軽量wrapperを挟んでクエリ直書きの負担を軽減するというのが最近のスタイル
有名なのはDapper、Massive、PetaPocoとか >>508
Micro-ORM ですか、Java にはあまりなさそうですね
BI ってなんの略ですか? 498だす
いろいろありがとう
Dapperって知らなかったので調べてみます 質問させてください
まず、やりたいことは以下です
@c#からネイティブライブラリの関数を呼び出す
A引数としてマネージ側で実装した関数を渡し、ライブラリ側でその関数を呼び返す
Aでマネージ関数と一緒にマネージドオブジェクトを渡したいのですが、そのオブジェクトをGC対象から除外する方法が分かりません
GCHandle.Alloc では blittable なオブジェクトでないとダメだと怒られます
List<int> とかを渡したいのですが…… どうしたらいいでしょうか? >>511
普通にデリゲートをマーシャリングして渡す
呼び出す先が同期的な関数ならGCは考慮不要
非同期的にコールバックしてくるならデリゲートをフィールドに入れておいてGCを防ぐ
デリゲートのマーシャリングは非常に優秀で、メソッド内から外のローカル変数を参照してたりインスタンスフィールドを参照してたりしても問題ない
だからList<int>とかをわざわざ渡す必要はない 補足
メソッドから参照されてるオブジェクトはデリゲートが生きてる限りはGCされないので、
GC対策としてはデリゲートだけフィールドで保持しとけば十分 >>512
ありがとうございます!
解決しました。変数をキャプチャしてるラムダ式でもOKなんですね
これって実行時にコードを生成してるんでしょうか? visualstudio2015でifの条件式の部分が
if(a>1&&
b>1&&
c>1&&
d>1)
となっているのを
if(a>1&&
b>1&&
c>1&&
d>1)
ときれいに揃える方法はないでしょうか?
ctrl+k,ctrl+dではこの部分だけきれいにならず困っています if(a>1&&
b>1&&
c>1&&
d>1)
となっているのを
if(a>1&&
__b>1&&
__c>1&&
__d>1)
_はスペースです >>514
ない
そんな非生産的なコーディング規約は今すぐ撤廃しなさい 条件式がたくさんある場合はどうすれば見やすく書けるのでしょう…
横に伸びると見にくくて 自分にあったフォーマッタを
自分で開発すればいいんじゃないの?
出来合いで我慢できないならそれしかないでしょ
幸いにもあなたはプログラマーだ
頑張れ if(a>1&&
b>1&&
c>1&&
d>1)
となっているのを
if(a>1&&
__b>1&&
__c>1&&
__d>1)
_はスペースです if(a>1&&
b>1&&
c>1&&
d>1)
となっているのを
if(a>1&&
__b>1&&
__c>1&&
__d>1)
_はスペースです >>515
その前に書くなら
if(a>1
&&b>1
&&c>1
&&d>1)
って揃えるべきじゃね?
そういう視点で見るとどうよ? 522
それでもいいんですが
____if(a>1
&&b>1
&&c>1
____&&d>1)
貼り付け繰り返してるうちにこうなっちゃったりしてるんですよね 俺だったらIsXXXみたいなboolを返すメソッドに分けちゃう。 おれは諦めた。もう好きにフォーマットしてくれたまえ すっぱい葡萄
手に入れたくてたまらないのに、人・物・地位・階級など、努力しても手が届かない対象がある場合、その対象を「価値がない・低級で自分にふさわしくない」ものとみてあきらめ、心の平安を得る。
フロイトの心理学では防衛機制・合理化の例とする。
また、英語圏で「Sour Grapes」は「負け惜しみ」を意味する熟語である。
wikiより >>515
if(
a>1&&
b>1&&
c>1&&
d>1
)
じゃダメ? >>530
俺的には条件が長くなったときに
&&が後ろに隠れるのは納得行かないぜ
横が揃うなんて些細な問題だ >>531
個人的には
if(
1 < a
&& 1 < b
&& 1 < c
&& 1 < d
)
って書くけど>>515に合わせてあるだけ もう書いてる人いるけど、こういうのは結局自分の(ほとんどの場合はくだらない)
こだわりの方を修正する方が早い。
っていうか頭を揃えたら見やすいって感覚はちょっと理解不能
間違いなくただの思い込みだと断言できる もうbool返すメソッド作れよ
bool AllUnderOne(a,b,c,d) んなことしなくてもifに長い式書くのが嫌なら適当な使い捨ての変数を導入するだけでしょ 結局staticって何が有用でどういう時に使うものなの?
解説読んでもこれが何に活かされるのか分からない… おまえMathクラス使わんの?string.Joinも? >>523
Code alignmentって拡張機能があるから使ってみれば? ちなみにstaticな変数の話?
staticなメソッドの話? それはスタティックおじさん誕生じゃないのかと突っ込む ここだかどうだかわすれたけど
staticの質問をしてた人が過去にいた
そしてなぜかCの話になったりしていちゃもんつけるだけつけて帰って行った
同じ人かもしれない string型の文字列を配列で持ちたいときはlistboxに
文字列をコピーしていく方法よりカッコいい方法ある? stringの文字列を配列で持ちたいというのはstring[]ってこと?
listboxに文字列をコピーしていくとは?もうちょっと詳しく。
カッコいい方法というのはC#のコードの書き方という意味で? SQLを外部ファイルに出したいのですが、そういうライブラリやフレームワークってあるでしょうか
それとも皆さんオレオレフレームワークを作っているのでしょうか オレオレフレームワークもみんなが使えばワレワレフレームワークになる
そーゆーこと みんなで使える優れたフレームワークはオレオレフレームワークと呼ばれない >>549
何について言ってるのか理解しづらいけど
SQLを外に出すのは悪いことなのでそういうライブラリやフレームワークはない
SQLってただの文字列でしかなくてコンパイル時に間違いがわからない
それを埋め込んでテストを繰り返すことでバグの可能性を限りなく低くしてる
でもORMなどを使っても必ずバグを洗い出せるわけじゃない よく考えると形だけ外出ししてもデータ取得後のソースが
SQLによって変わるからあんまり意味ないっつか見にくくなるだけだな 質問が下手ですみません
javaのibatisのようなxmlでクエリを外部ファイルに置くようなフレームワークはC♯にあるのでしょうかという質問でした
自分は文字列でコード上に直接クエリを書いており、悪手をやっているのではと不安になり質問しました
ご教示よろしくお願いします >>558
iBatisって相当昔だと思うけど…C#でもiBatis(MyBatis)は使える
絶対やめた方がいいけど 個人的にクエリは定数で宣言して、クラスにまとめる感じで書く。
リフレクション使ってクエリ文字列を引っ張れば管理資料もチョチョイのチョイやで。 むしろクエリを外部ファイルに書き出すのは古いのですね
参考になります すみません。この場を借りて質問させていただきます。
C#初心者なのですが、wpfで動画再生アプリを作っています。コピペメインです。
MediaElementを使って動画のコントロールはほぼ実装できたのですが、
動画のフルスクリーンからの復帰の仕方が良くわかりません。
(元の画面にうまく戻せません)
フルスクリーンにするときは、こちらを使っています。
layoutRoot.Children.Remove(myMediaElement);
this.Content = myMediaElement;
this.WindowStyle = WindowStyle.None;
this.WindowState = WindowState.Maximized;
戻すときは以下のようにしてみましたが、
this.Content = layoutRoot;
layoutRoot.Children.Add(myMediaElement);
this.WindowStyle = WindowStyle.SingleBorderWindow;
this.WindowState = WindowState.Normal;
System.ArgumentException: '新しい親 Visual に関連付ける前に、指定された子と現在の親 Visual との接続を切断する必要があります。'
と怒られますw 親子の縁はどのように切ったら良いのでしょうか?
よろしくお願いいたします。 >>564
上と下を見比べて対応してないものをまず見ろ
それにしてもひどいやり方だ private void savedata()
{
string name = "aaa.txt";
system.IO.StreamWriter sw;
try
{
sw = new IO.StreamWriter(name, false, System.Text.Encoding.GetEncoding("shift_jis"));
sw.WriteLine("aaaa");
}
catch (Exception ex)
{
MsgBox("Savedata error:" + ex.Message);
}
finally
{
sw.Close();
}
}
Newでエラーした場合にはSw.Closeすると落ちるが、何とかならないものだろうか? if(sw != null) sw.Close();
じゃダメなのかしらん? >>569
Dispose()とかでもそうするのが基本だと思うが
>>568
Fileが無い場合やサイズが0とかの対応全く考えてないのも問題だと思う あっそうか Nullで検出できたのか。ありがと。Useingってのもあるんだね。
開発モードではエラーしないのに、Setupファイルでインストールすると、書き込み禁止がかかっているような
エラーになるんだがなにが原因だろ。
System.UnauthorizedAccessException: パス 'C:\Program Files (x86)\test14\あああああ.ini' へのアクセスが拒否されました。 >>572
WindowsフォルダやProgramFilesフォルダに書き込むには管理者権限が必要 フォームのデザイナが以下のエラーを吐くのですがどうすればいいですか。
"***.dll"を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)
プロジェクトは以下の4つです。
MainForm(C#)
MainView(C#) (MainFormの中でNewされる。DLLsを利用する。)
DLLs(C#) (DLLImportする。)
Drawer(C++) (DLLExportする。dllファイルはビルド後に実行ファイルがある場所にコピーされる。)
コールスタックでは、MainViewのDLLsを使用しているところでエラーがでており、
それをコメントアウトすると、デザイナが表示されます。 >WindowsフォルダやProgramFilesフォルダに書き込むには管理者権限が必要
ありがとう。
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
をいれたら動き出した。しかし立ち上げ時に毎回「この不明なアプリが実行することを許可しますか?」って
Windowsの確認画面がでるんだが、なんとかならないのでしょうか? >>576
ユーザーコードで対処するのは無理でしょう。
そのためのUACなんだし。
リスク覚悟でUACを無効にするしか
Vista出たのも10年前だし、UACが何だか知らない人も多くなってるのかな Program filesにインストールするようなアプリで今時.iniとかちょっと… >>576
コードサイニング証明書取得して、プログラムに署名。 管理者権限でいつも立ち上げるようにすると確かにアクセスできるようになった。
しかしインストール先 パス を'C:\Program Files (x86)、これをやめれば管理者権限で立ち上げる必要はないのでは? >コードサイニング証明書取得して、プログラムに署名。
最高だ。これはいい。
とおもったら金がかかるのか? 残念。 >>582
普通はアプリケーションフォルダにデータを置きます
てか、設定ファイルは.iniを使わなくなって10年以上経ちます
[C# 設定]で、普通の設定ファイルの使い方調べた方がいい 訂正アプリケーションデータフォルダ(AppDataってやつね) 最近流行らないと思うけど、バイナリと同じ場所に設定ファイルを置くのは
バイナリ自体をUSBメモリに入れて持ち歩くような特殊な用途ぐらいだよね
iniファイルでも悪くないと個人的には思うけど、せっかく便利なシリアライザがいろいろあるのに
わざわざ機能的に劣るiniファイルを使う意味はないわなあ
読み書きするコードも自分で書かなきゃならんし AppDataってVsのSetupプロジェクトでは作ってくれないですね。Apllicationフォルダーに設定用のデータも入れています。
「iniをつかわない」ってのがあまり意味がわかりませんがいま使っているのは単なるテキストファイルです。
(*.iniという名前にしていますが、)StreemWriterで書いています。XMLに落とすのが普通なのでしょうか?
しかし単に改行だけのファイルで十分なのでXMLにはしていません。
XMLは設定ファイルとしてはわかり難いですし無駄が多いように思います。
それにエディターで気楽に追加ができないです。 >niファイルでも悪くないと個人的には思うけど、せっかく便利なシリアライザがいろいろあるのに
>わざわざ機能的に劣るiniファイルを使う意味はないわなあ
慣れなんですかね。どうも直観的にわかり難いように思います。だからJsonとかを使う人も多いんではないですか? ”設定”, 20,
とかをStreemReaderで読みこむと何で ””設定””になるんですかね。ストリングにするためにわざわざ「”」をNULLにReplaceしています。
なんかいい方法はないですかね。 >>586
俺はええと思うな
XMLは編集するツールがない
プログラマでない人間がぶっ壊したら
自分で直すのは至難の技だ >VisualStudioの機能だが
・AppDataフォルダ:このフォルダは「C:\Users\ユーザー名\AppData」にあります。ほとんどのプログラムの設定ファイル
はここに置かれています(サブフォルダ「Roaming」の中)。プログラム名か開発企業名のフォルダの中に、設定ファイルや
関連データが保存されていますので、フォルダごとバックアップしておきましょう。
こういうもののようですね。だからSetupプロジェクトにはここに入れる設定データのフォルダーがあってしかるべきですがない?みたいですね。 バイナリと同じフォルダにiniファイルだと…
アプリケーション1つにつき設定が一個しかないのでユーザーが複数いると困る
たとえば年賀状ソフトで差出人が全てのユーザーで一つしか設定できない 今時複数ユーザーなんか考慮しなくていいだろ
健全なファミリーがお前の作ったアプリを使うとでも? すまんが、列挙型って関数の引数の型に指定することはできないの?
enum A {B, C ,D};
void E(A a){}//ここでエラー
これを書く事ができれば、エディタのアシストが効きまくってミスが減る気がするんだけど・・・・・ できるはず
エラーメッセージはどのようなものですか? 関数内に書いててpublicメソッドにしてるんだろうな クラス内に書いててpublicメソッドの引数にしてるの間違い
それかenumをpublicにしてないか Windows Form のコントロールたちって、ここ10年くらい全くもって変わり映えしてない気がするんだけど
もう改善する気がないのかねぇ
グレープシティ壊滅させるまでやらずとも
テキストボックスの縦位置とか枠線スタイルとか複数列コンボとか、そのくらい対応してくれてもいいと思うんだけど >>602
UWPに注力してる以上まずやらんだろ。 XPに対応したVS2005の時代から変わってないのに何をいまさら感w >>603
Windows 10 Mobile が事実上終了したんだからUWPに注力する必要ないよね Chartがその後で増えたよ
いやまあBCLに入っていなかっただけで前からあった奴だけど >>605
GoogleやAppleのまねしたいみたいだから、あがき続けるんじゃないか。 WinFormsって長いこと触ってないが
今でも線引くのにLabel使うとかアホなことしてるの? 底辺の人は底辺の環境で不思議なことをしてる
普通の人は普通の環境で普通なことをしてる >>608-609
ラベルでヘアライン引くのはよくあるしアホでも何でもない MSがUWPの宣伝しているのを見る度に
ユニバーサルプラットフォームっていうけど
お宅の会社ってPC以外のプラットフォーム持ってましたっけ?
って煽りたくなる 実態はともかく構想的にはMS以外ノプラットフォームも対象なんで
その批判は当たらないかと とは言え、ギョーミーなアプリ書く上で、マストなものは粗方揃ったわけだし
クライアントがWindows10で揃えられるなら選択肢として悪くない とはいえUWPで作れるアプリならWebで十分なんだよね
タッチパネルでの利用を想定しないのであれば、現実的にはあえて選ぶメリットはほとんど無い 解像度2560×1440のモニタを使っているのですが、Formアプリの解像度が合いません。
原因はサイズを125%に拡大していることで、通常の倍率に戻すとぼやけません。
FormのAutoScaleModeをDpiに設定してみましたが改善されませんでした。
対策をご存知の方がいましたら教えてください。 VSの吐くWinformsのテンプレだと自分でdpiAware仕込まなあかんのじゃなかったっけ >>617
app.manifestを設定したらモニタの解像度に対応できました。
ありがとうございます!! >>616
exeを右クリしてプロパティの中の互換設定を弄ると直る >>619
なるほど、互換の設定でも対応できるのですね。
勉強になります。 つまり他のソフトもボヤけてるんだな。
XPExplorerインストールすればいいのに。 >>621
さっそくインストールしました
ありがとうございます! 早速インストールしたら好調でした
ありがとうございます! >>621
早速インストールしたら好調でした
ありがとうございます! >>621
早速インストールしたら好調でした
ありがとうございます! >>621
早速インストールしたら好調でした
ありがとうございます! >>621
早速インストールしたら好調でした
ありがとうございます! >>621
早速インストールしたら好調でした
ありがとうございます! >>621
早速インストールしたら好調でした
ありがとうございます! >>621
早速インストールしたら好調でした
ありがとうございます! public static SqlConnection connect = new SqlConnection("接続文字列");
public static SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Table", connect);
public static DataTable dt = new DataTable();
private void Form_Load(object sender, EventArgs e)
{
sda.Fill(dt);
DataGridView1.DataSource = dt;
}
private void button_publish_Click(object sender, EventArgs e)
{
connect.Open();
〜Tablesへの改変処理
connect.Close();
dt = new DataTable();
sda.Fill(dt);//★
}
Table内容をSqlDataAdapterを使い、データテーブルに入れ込んで、DataGridViewに表示させた後、
Table内容を変更後、再びDataGridViewに表示させるとき、例外がスローされます。
★の部分で、「System.InvalidOperationException: 'ConnectionString プロパティは初期化されていません。'」が出ます。
最新のデータを同じDataGridViewで見るには、どのようにすればよいのでしょうか? >connect.Close();
接続切ったらそりゃエラーになるでしょ connect.Open();//★
sda.Fill(dt);
connect.Close();
としたら、★マークのところで、またエラーが出ました。 まずコネクション以下全てのオブジェクトはクローズしたら再度newしないと使えません
よってスタティックじゃなくて普通のインスタンスとして管理
使う度にnewで新たに作ります そうだったんですね、使いまわせると思ってました・・・ インスタンス内で、宣言したら、うまくいくようになりました。
ありがとうございます。 デバッグで完全に動作するのにインストールして動かすと、途中で落ちる。多分データベースのアクセスではないかなと
思っているんだが、インストールした実行プログラムのデバッグをやろうとしているんだがどうやるのか不明。
VS2013の「デバッグ」から「インストールされているアプリケーションパッケージのデバッグ」に入ってもリストに何もでてこない。
なにか設定があるのだろうと思うが、どこを設定すればいい?
アタッチするまでが分からない。 >>639
どうやってインストールしたん?
結局Console.WriteLine()をあちこちに埋め込むのが早かったりする >>640
ConsoleよりTraceの方が使い勝手良いぞ。
Trace.WriteLine()とかの情報をDebugViewで時間情報付きで見れる。
フィルターやハイライトとかもかけられる。 CallerMemberNameAttribute class っていうか
リリース版でデバッグしたいって聞いてるんでしょ? Trace出力でのデバッグはリリース版でやることが多いぞ。
ビュワー立ち上げなければ、ユーザーからは見えないし。 mono入れたLinuxでmscでコンパイルした実行ファイルを
WindowsにもってこようとするとMicrosoft Defenderでトロイ扱いされてブロックされます
同じコードをWindowsでcscでコンパイルした場合は問題ありません
WindowsでコンパイルしたものはmonoでLinuxでもちゃんと実行できます
なんでmscでコンパイルしたものがトロイ扱いされるんでしょう? どうやって受け渡してる?
zipで渡したらどうなる? >>646
scp(ssh)とhttp経由でダウンロードしましたがだめで
その後拡張子を変えたりしましたがだめでした
アーカイブは試しませんでしたが
ダウンロードできても解凍するところでアウトと思われます
軽いプログラムだったのでbase64エンコードした文字列を
Windows側でデコードして出力しようとしたのですが
ファイルに出力した時点でウイルス判定され隔離されました C#アプリからCTRL+V以外のホットキーでSendMessageでWM_PASTEを送っても
ペーストできるアプリとできないアプリがあるのですが
ペーストできない原因とどうすればペーストできるのか
分かる方がおられましたらお教えいただけないでしょうか
自作C#アプリ ○
FireFox ○
ThunderBird ○
IE11 ○
Mery ○
秀丸ファイラ ○
MDIE ○
等
V2C ×
Chrome ×
Vivaldi ×
Everything ×
等 いやいや、原因は普通に当該アプリがWM_PASTEを処理しないからでしょうw
泥臭いけど素直にSendKeysを使ったらよいのでは? シリアル通信のプログラムで問い合わせ付のコマンドを送信する場合に、送信結果(bool)とレスポンス結果(string)を取得したいのですが、返り値boolでレスポンス結果をoutで返すといった感じにすればいいでしょうか WM_PASTEじゃなくて直接キーをハンドリングしてるんだろ
最近のメジャーなアプリは開発者がMacをメインで使ってるケースが多かったりして、
ファッキンドザのために必要以上の特殊な対応はしないというスタンスのものが増えてるよ >>650
成否だけ分かればいいなら、失敗した時はnullを返せば十分じゃない?
enum Acknowledgement {ACK,, NAK, NoResply, Offline};
みたいなのを返したいなら、
Class Response
{
public string Received{get; private set;}
public Acknowledgement Acknowledgement{get; private set;}
}
みたいなのを返すとか メインメニューにコピーの項目ないなら
直接ペーストするウインドウに送らんと >>652-654
ありがとうございます
試してみます classをforeachで回したいのですがGetEnumeratorの書き方はこういう形が一般的なのでしょうか?
プロパティが増える度にGetEnumeratorのyield return追加しないといけないですが
うっかり追加し忘れてバグの元になるから別の書き方があるのかも?と少し気になったので
https://ideone.com/etKQWk >>657
普通はそんなことはしない
まともな作り方をしていれば、次元の異なるものを列挙することはない >>658
すっごい単純なものだと
int id
string name
みたいなものでクラス保持してて、そこに他にも付属品が付いてるイメージです
たまにforeach使えないと不便な時があるのでその為に継承させてるのですが
DBから読み出したデータをそのままforeachで出力させたいって時とかに使います
わざわざ全部の項目を関数で読み出して表示ってのも大変な時があるので >>659
Typeの使い方色々調べましたけど、指定方法がイマイチわからなかったのでもうちょい調べておきます >>660
質問してるんだから人の言うこと素直に聞いた方がいいと思うよw
少なくとも>>658は正しい。
一般的なのでしょうか?
一般的どころかそんなこと誰もしないよw
どうやったらそんなアホなことをせずに目的の仕様を実激できるかを考えた方がいい >>662
すいません、目的の事をしたいのにそうではないと提示してもらったのはありがたいのですが
他の実現方法が分からなかったのでとりあえず現状何をしてるかを更に明確に伝えた方がいいと思ったで
その回答がただ否定してるだけに見えたのなら少し発言が悪かったでしょうか?
>>659
で更に回答いただけたのでTypeの使い方を調べています
とりあえず動くものだけ>>657で暫定で動かしておいて、使い方を理解したら置きかえて行く予定です
個人的に作ってるものなのでとりあえずは手の届く範囲で扱えるので >>664
ビルドして動作確認しました
この通りの動きです、ありがとうございます
Linqの渡してるところ調べながら読み直して何してるか理解します >>662
質問されてるんだから屁理屈いってないで素直に答えろよw低能らしいなw {
//描画先とするImageオブジェクトを作成する
Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height);
//ImageオブジェクトのGraphicsオブジェクトを作成する
Graphics g = Graphics.FromImage(canvas);
//画像ファイルを読み込んで、Imageオブジェクトとして取得する
Image img = Image.FromFile(@"C:\test\1.bmp");
//画像のサイズを2倍にしてcanvasに描画する
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
//Imageオブジェクトのリソースを解放する
img.Dispose();
//Graphicsオブジェクトのリソースを解放する
g.Dispose();
//PictureBox1に表示する
PictureBox1.Image = canvas;
}
g,imgはNEWしてないのに何でdispose()する必要があるの? >>668
Graphics.FromImageもImage.FromFileも直接コンストラクタ呼んでないだけのこと。
中で非公開のコンストラクタが呼ばれてインスタンスが作られてることに変わりないじゃん
お片付けしていいタイミングが分かるのは作った人だけ。
だから作った人がお片付けする責任を負うのが合理的 そういうことなの。
Graphics g = Graphics.FromImage(canvas);
こいつが内部のコンストラクタでNewしてるかどうかなんてどうしたらわかるの? 分からんよな。
マニュアルをみると確かにこいつだけ「Creates a new Graphics from the specified Image.」と
なってるな。わかり難く紛れ込んでるんだね。
しかも
g.dispose()
PictureBox1.Image = canvas;
と御片付けした後に表示するとはまた不思議な気がする。なんで片づけてから表示するん?
どのみちNEWしたCanvasはDisposeしないといけないでしょ。それならそのときに自動的に全部Dispose()する
とかできないのか? これはGraphicsクラスの説明にあるMSのサンプルだけどImageもulCornerもDispose()していないのは何故。
private void DrawImagePointF(PaintEventArgs e)
{
// Create image.
Image newImage = Image.FromFile("SampImag.jpg");
// Create point for upper-left corner of image.
PointF ulCorner = new PointF(100.0F, 100.0F);
// Draw image to screen.
e.Graphics.DrawImage(newImage, ulCorner);
} 別に使い終わってもリソース気にしないなら放置でいいよ
実害は普通の使い方してる限りでない
一個二個リソースが握られただけでは問題ないけど
数千数万とかレベルだと問題がでる
でもわざわざ勘定したり場合わけしながらコード書いているのか?
だったら正しいコードを書こう
newしてるかどうかわからなくても使ってることはわかるだろ?
いつかは自動で解放されるけどタイミングが不明
コード書いてる途中にg,imagを使い終わったと判断できるのは自分だけだから
片づけた後に使うのは当たり前だな
基本的にgなどはつかみっぱなしが良くないので短い範囲で手放してるだけ これは基本的にwindowsのGDIという仕組みに乗ってるだけなので
他でも使ってる
c#に文句を言うのは筋違い
でもc++スレに行くのも筋違い
30年近くさかのぼってMSの設計者に文句を言ってくればいい
どうしても嫌ならwindowsの仕組みに乗ってないものを使えばいい こういう自分とこでインスタンス作成しといて始末しない設計ってクソだね
って話で終わりだな もう少し説明
>と御片付けした後に表示するとはまた不思議な気がする。なんで片づけてから表示するん?
仮にgをファイル操作に置き換えたとしよう
ファイル開く
ファイル読み書き処理
ファイル閉じる
表示
これを
表示
ファイル閉じる
にした場合、表示がもし5年かかった場合、ファイルは意味もなく5年間開かれっぱなしで他から操作できない さらに言えば自動でファイルを閉じる仕組みを作ったにせよ
表示が終わるまで5年間ファイルは閉じられる機会がない
これでもすべて自動でやれという意見は変わらないかな? そういう話ではなくて意味が解らないという話だね。
例えばこれは何故当たり前なのかが不明。
>片づけた後に使うのは当たり前だな
>基本的にgなどはつかみっぱなしが良くないので短い範囲で手放してるだけ
折角グラフィック表示するためにgを作ったのに、表示する前に解放するというのが意味不明だ。
Msのサンプルコードではまさにこのgに対してDRAWしている。これで表示が機能しているのに
この例では、PictureにCanvasを代入して表示が完了することになっている。表示する前にg
をdisposeしているから、gの役割が二つの例で意味が不明だ。 gは数が限られている
鉛筆みたいなもの
鉛筆が5本あってみなで共有している
使い終わったらすぐ放棄しないと絵が描けない人がでて困る
必要なくなったのに5年鉛筆を持ちっぱなしが望ましい状態だろうか? 鉛筆5本をそれぞれが持ちっぱなしで
6個目のアプリが起動したらどうなるか?
鉛筆がないのでまともに動かない 一つ勘違いがあるけど、newやコンストラクタとDispose()は直接関係ないよ
C#にdeleteは無いし、それに相当するものでもないので、インスタンスを解放する訳じゃない
Dispose()は主にガベージコレクション管理外となるアンマネージリソース等を解放するためのメソッド
そしてGraphicsはBitmapというキャンバスを弄るために用意したに過ぎない、表示するのはBitmapの中身
モノによってはDispose()すると内部バッファとかの書き出しとかもやるし、using等も使いつつ明示的にやりましょう
ちゃんとしたIDispose実装クラスならデストラクタ(ファイナライザ)でもDispose()を呼び出すコードが入ってるけど
タイミングがガベコレ次第になるし高コストなので明示的に呼ばれるとファイナライズキューから外すように設計されてる >>670
だから、「Disposeする必要があるのは自分がnewしたもの」という勝手な思い込みが間違ってる。
Disposeは作成したオブジェクトが必要なくなった時に呼ぶ。
オブジェクトを作成する方法はコンストラクタ呼び出しだけじゃない。
MSDNの説明にある通り、Graphics.FromImageもImage.FromFileも新しく作成されたオブジェクトを
返す。使いまわしされる共有オブジェクトを返すわけじゃない。
> どのみちNEWしたCanvasはDisposeしないといけないでしょ。それならそのときに自動的に全部Dispose()する
> とかできないのか?
usingステートメントを使う
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-statement C#でたころにGDIの限界までオブジェクト作ったことがあったな
画面がおかしくなって黒いところがあちこちにできる
リソースがないと怒られる
それともc++だったかないずれにせよ20年ぐらい前かな 要するに
Canvas(これはBItmapと同じ?)
Image (これは、Bitmap以外にも多種多様な表示を扱う?)
Graphics (これは描画するための、関数群のようなもの?)
の違いが不明ってことかな。
上の例(DOBON)では
Picture.Image=Canvas
これでImageにビットマップを代入して描画が完了することになっている。
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
ここでgを使ってimgに描画したのでもうgはいらない。だからgはdisposeした。
ならわかるが、ここでimgをDsiposeするからわけがわからない。 あっ、コメントにちゃんと書いてあった。
//画像のサイズを2倍にしてcanvasに描画する
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
ここですでにCanvasに書いているんだな。 はい
解決したね良かったね
写真(img)を見て画用紙(canvs)に鉛筆(g)で絵を描いた
終わったので写真と鉛筆を片付けた
画用紙を額(picturebox1)に入れて飾りました DOBONの例の機序
PictureBox1のサイズで空のBITMAPを作成する。
そのビットマップから描画オブジェクトのGraphics gを作成する。
ファイルからBitmapのImageを作成する。
gでそのImageをBITMAPに描画する。(BITMAPに描画したのでg、imgはいらない)
描画したBITMAPをPictureBOxにコピーする。
こういうことか。わかった。お騒がせしました。ペコリ やっぱりuingとか言ってた奴はガイジだっただろ? >gは数が限られている
それはおかしい。そんなことはどこにも書いてない。
もしそうだとしたら
Graphics g = Graphics.FromImage(canvas);
このコードが間違いってことになる。ここで数量をチェックしないといけない。 ガイジって言葉を使う奴のほうがどうかしてると思いますよ >C#でたころにGDIの限界までオブジェクト作ったことがあったな
>画面がおかしくなって黒いところがあちこちにできる 。リソースがないと怒られる
これはどういう意味? メモリーの限界ではなくて、GDI(ハードウエア)がもつレジスタの限界ってこと?
Graphicsって要するにGDIのリソースを確保するという意味なの? ユーザフレンドリーと見せかけてウンコの代表みたいなクラスなので
真面目に考えないほうがいい
結局仕組みを理解するにはwin32の描画文化から知る必要がある >>689
しょうもないことに突っかかるなあw
数が限られてるって言い方が気に入らないなら高価な共有リソースって言えば分かる?
例えば巨大な配列とか、通信ポートとか、
そういった類のものを「一人」がずっと占有したら他の人が使いたい時に使えないよね? >>694
そんなくだらない例え話じゃなくてちゃんと現象を説明してあげればいいじゃない >>691
GDIはハードウェアっつーより…Windowsでの実装が気になるならReference Sourceでも読んで
メソッド内部では色々チェック入ってるし、しくじったら例外ぶん投げるようになってるから MSの説明はたったのこれだけw
■Graphics クラス
Encapsulates a GDI+ drawing surface. This class cannot be inherited.
GDI+って要するに、グラフィックコントローラを使うってことでしょ。でも鉛筆5本ってほどしょぼいことはないだろ。 結局リソースリリースタイミングを制御しないといけなくなるわけで、ほんとGCって糞だよな。 最近のMSのドキュメントはほんと不親切だよな。
幸運なことGDI+は不親切になる前に開発されたものだから、ググればMSも含めて大量にドキュメントが残ってる。 ググってみた。
Application.SetCompatibleTextRenderingDefault(false);
というのが設定されるようになっていて、GDI+は糞だからGDIを使いなさいってことらしい。w よく鉛筆5本とか言うけど、Win16ではDCは同時に使用できるのは5つまでだった。
だからDC取得したらその関数内ですぐ開放するのが当たり前だった。 c#の{ }って中身が1文の場合、省略できるものとできないものってどうやって決まってるんでしょうか?
namespace、class、
for、switch、while、try、checked、fixed、unsafeなど PictureBoxのMouseMoveイベントハンドラ内にInvalidate()を入れるとTimerのTickが止まります。何故ですか?
https://ideone.com/fWNMPP コード見てないけど
そんな暴れん坊見たいことはしないほうがいいと思う マウスの位置をフィールドに入れて間隔の短いタイマーで描画しますか? すみません質問です。
C#でエクセルを複数起動させるプログラムを書いているのですが、解決できない問題があります。
例えば既にa.xlsxが開かれていて、追加で3つのエクセルファイル(b.xlsx, c.xlsx, d.xltm)を立ち上げるとします。
その場合、process.start("excel", "b.xlsx c.xlsx d.xltm");
とすると、a~dまでが一つのプロセスにまとまるのはいいのですが、テンプレートが編集モードで開いてしまいます。
仕方ないので、
process.start("excel", "b.xlsx c.xlsx");
process.start("d.xltm");
とテンプレートだけ"excel"を抜いて起動すると、ちゃんとテンプレートは新規ファイルで開かれますが、プロセスが3つに分かれてしまいます・・[a.xlsx], [b.xlsx, c.xlsx], [d1]
(何故かa.xlsxまで孤立しちゃうんですよね・・・)
色々試したところ、
process.start("excel", "b.xlsx c.xlsx");を実行して一度処理を終了させた後(この時点ではa~cが一つのプロセスになっている)、
また起動し直しでprocess.start("d.xltm");を単独実行させると、a~cと同じプロセスにdが加わってくれました。
であれば、全部起動完了待ちすればうまくいくか?と思って、
Process p = new Process();
p.StartInfo.FileName = "excel";
p.StartInfo.Arguments = "b.xlsx c.xlsx";
p.Start();
p.WaitForInputIdle();
p.StartInfo.FileName = "d.xltm";
p.Start();
と、インスタンスを作ってからp.WaitForInputIdle();を加えたうえで実行させると、
プロセスは3つじゃなく今度は2つにまとまりましたが、一つになってくれませんでした・・。
[a.xlsx, b.xlsx, c.xlsx], [d1]
という具合で、何れにせよテンプレートだけプロセスが分かれちゃいます。
色々試しましたが、テンプレートファイル含む複数のエクセルファイルを、テンプレートファイルは新規ファイルとして開きつつ、全て一つのプロセスとして起動させる方法が分かりませんでした・・
方法があれば教えてくださいお願いいたします(m_m) 712です。
p.WaitForInputIdle();
の後に、System.Threading.Thread.Sleep(1000);
を強引に追加したら上手くいきました・・。
(うまくいったというのはつまり、
a.xlsxだけが最初に開いてあって、
b.xlsx, c.xlsx, d.xltmをC#で開いた時、a~dまで一つのプロセスにまとまり、
d.xltmも新規ファイルで開いてくれたという事です)
でもこれ、絶対正規の解決方法じゃないですよね?
きっともっといい方法ありますよね?・・
ご教授下さい。お願いいたします。 >>713
システムハングアウトなめんな。
スリープは大事。 >>715
オートメーションってつまり、コムオブジェクト使うって事ですかね?
ちょっと調べてみます。
>>716
スリープも効果的に使えば立派なコードですかね!
ミリ秒時間の調整行って、確実に上手くいく範囲で秒数縮めてみようかと思います。
もっといい方法見つかればそれで実装しますが、それまでスリープで対応しようかと思います。
有難うございました。 Form1のデータから、Form2を呼び起こして、
Form2のPrintDocument1_PrintPageを印刷しています。
Form2を閉じて、2回目にForm1から別のデータを印刷すると、
DrawStringで印刷したデータが重複してしまいます。
PrintDocument1_PrintPageを初期化するような方法はないでしょうか? getcommandlineargs()で引数を渡すと
スペースとダブルクォーテーションが消えてしまいますがどうすればいいですか?
大文字にしても消えます >>719
ダブルクォーテーションは""に置き換える
スペースの入った文はダブルクォーテーションで囲む >>708
ありがとう
自分でやってみた結果
埋め込みステートメントができるのは
do,if,else,fixed,for,foreach,lock,using,while
だった pictureBoxに線を引いたり色々描画した後に指定位置のピクセルの値を取得する方法はありますか?
CopyFromScreen?を使うしかないですか? (12345).ToString("D8") = "00012345"
だけど、” 12345"にする方法はないのか? >>726
0を半角スペースにしたいならPadLeft(桁数)でいいんじゃね なるほど
" 123"
" 123.0"
" 123.00"
~
みたいなのをformat登録しておいて一括処理したいんだが,,,,
PadLeftをつかうには、独自フォーマットを作って解析して分解するひつようがあるな。
"8,D","12,F1","10,F2","10,F3","8,D"
これをSplitで分解して桁と表示にわけるとできる。みんなこんなことをやってるんだろうか? 設計ミスだな
出力の幅なんて最終的な出力の段階で自ずと決まるもんだろ
普通そんなもん必要ない 文字列は空白埋めできたような
Formatを2回する
あるいはカスタムフォーマッタを作成 String.Format("{0,8:d}", 12345); >設計ミスだな
ToStringとString.Formatでいちいち仕様を変えるなんざ設計ミスもいいとこだ。 $"{12345,8} 6.0になってからString.Formatを使わなくなったな >>734
残念。VS2013ではそのスタイルは動かんな。 最新のVSって毎週バージョンが上がってて、アップデートしたら突然ビルドが通らなくなったりとか時々あるんだよね
自社開発でパパっと対応できる体制の開発が前提になってて、もうジャパニーズドカタには手を出せない代物 質問者が何言ってるのか俺にはさっぱりわからんけどみんなよく分かるなw 俺も正しい意味はわからないけど憶測で判断してる
文章も書けないくらい幼稚だけど偉そうなレスしてるとだけわかる >>728
これが特に意味不明だけど考えてわかるレベル
>>735
これが偉そう List<string> a = new List<string> {
"x3" ,
"x4" ,
"x5" ,
"x6" ,
"x7" ,
"x8" ,
};
foreach (string el in a)
{
combox1.Items.Add(el);
}
combox1の初期化ってこんな方法しかないのか? 直接は初期化できんのか? >>236
ちゃうちゃう、$” { valuえ} ”の記述はVs2017しかサポートしとらん。 int w = (int)((double)pic.Width / (double)(1 + x ) / 1.3);
doubleとintを混在するときにdoubleに自動的に型推論する機構ってないの?
いちいちキャストするのはメンドクサイよな。 >>748
int w = (int)(pic.Width / (1.0 + x ) / 1.3);
でいけるはず Fontをファイルに保存したい。この場合name,style,sizeに分解して保存するのだろうか?
他に何かいい方法は? >>751
多分VSのアプリケーション設定のところでシリアライズして保存できるようにできる >>751
もう少し意味が通じるようにまとめろよ
Font.Familyname:string
FontStyle:int
FontSize:float(single) これな
https://i.imgur.com/ZyRzEn7.png
これで保存
Properties.Settings.Default.*** = font;
Properties.Settings.Default.Save();
これで読み出し
var font = Properties.Settings.Default.***;
ユーザーのアプリケーションデータフォルダの中にxmlで保存されるようになってる var conv = TypeDescriptor.GetConverter(typeof(Font));
var text = conv.ConvertToString(font);
font = (Font)conv.ConvertFromString(text); それがあるのは知っていたけど、Settingsってそんなふうに使うのか。初めて知った。
便利そう。ありがとう。
前に設定してみたけど、ビルドすると直ぐに消えてしまうので、どうやって使うのか
わからなかった。 Properties.Settings.Default.DispFont = lblFont.Font ;
エラー 1 プロパティまたはインデクサー 'Properties.Settings.DispFont' は読み取り専用なので、割り当てることはできません。
フォントはリードオンリーになるので設定は無理ぽい。 >>761
スコープのところをアプリケーションにしたのが間違いだった。ユーザーにしたら
いけた。
でも暫くやって意味がわからなかったので結局はJson.netを使って保存した。
クラスをそのままシリアライズしたらFontもなにもかも一切合切勝手にシリアライズ
してくれた。W
これは分かりやすい。一発でわかった。 class 年齢 {
public string 名前{ get; set; }
public int 年齢{ get; set; }
}
List<年齢> 年齢リスト = new List<年齢>();
このような年齢型の年齢リストがあったとして、
年齢が21のリストだけを抽出したい場合、ラムダ式ではどのように書けば良いのでしょうか? list.FindAll(x=>x.年齢==21) >>765
ありがとうございます。明日試してみます! 配列の要素すべてが0もしくは1000でなかったらという論理式を書きたいのですが で、っていう
その文章、「でない」がどう掛かるのかあいまいで二通りの解釈が可能だから、
解釈の余地がなくなる別の表現を工夫した方がいいと思うよ >>770
arr.All(x=>x!=0&&x!=1000) >>771
ドキュメントでよくあるよなこれ
この種のミスをする奴は何度注意しても直らないんだよ ねえわwリアルでもこんなアスペばかりで困るけどなw arr.All(x=>!(x==0||x==1000))
!arr.All(x=>x==0||x==1000) 日本語で書くから間違える
最初からコード書けばいいのにね >>775
お前の読解力が絶望的だってのはわかった >>777
なるほど、つまり>>770は、
arr.All(x=>!(x==0||x==1000))
を書きたいのですが
もしくは、
!arr.All(x=>x==0||x==1000)
を書きたいのですが
と質問すべきだったと。
確かにこれなら解釈が割れる心配ないね! >>689
どーせ、CreateCompatibleDCみたいな話 初心者だからわからないんだろうけど
そういうリソース系は数量をチェックしても無駄だよ
チェックした時点で大丈夫かもしれないけど
使うとき限界に達してるかもしれない
どこも保証しない
実行して失敗なら失敗 鉛筆の数をチェックしてあまり1本あっても自分が使うまでのわずかな間に
別のアプリがその鉛筆を使うと自分は使えない いきなり鉛筆をつかもうとする
つかめなかったらwindowsは異常な事態になってるので回復は不能
アプリを落とす
自分で鉛筆を使ってる場合使わなくなったら即座に開放
たったこれだけ c♯固有の話では無いですがインターフェースのファイルとクラスのファイルは一般的に同じフォルダに入れてるのでしょうか?
インターフェース用フォルダ、抽象クラス用フォルダ、クラス用フォルダと分けた方が見やすいとかあるのかなと思いまして c#固有じゃないとは言い切れない
ご自由にというか
その時のルールがあるならそれに従えばいい
c#はjavaのようにフォルダ構造が名前空間じゃないから >>788
普通は名前空間に合わせる
ソースにオリジナリティを出すな >>790
なるほど名前空間で別けるのですね
独学初心者には思いもつきませんでした
参考になります いや、それは単にVSがそういう前提で作ってある(ソリューションエクスプローラから
新規にファイルを作った時のスケルトンの名前空間がプロジェクトの規定の名前空間に
フォルダ階層がくっついたものになる)ってだけの話で、別に必要なら単に分類のために
フォルダ作ってもいいと思うよw
そんなケースはあんまりないとは思うけど そういう前提には作ってないよ
設定があってチェック外せばどのフォルダで作っても同じ名前空間になる >>798
最大で140℃くらいまでしか開かないので、コピー機に入りません(>_<) >>783
昔、GDI+とMFC or Win32APIから.netに移行する表とその説明があったけど、検索で調べきれないわ。
さかのぼると、WM_PAINT, BeginPaintとか古典的な描画APIとかの話になるから
今、ディスプレイドライバーのソースを見てるけど、なかなか説明が難しいわ
ごめんなさいね デバイスコンテキストの説明になんでドライバまで降りるねん。 非常に単純化した話として
windowsは特定のリソースを数字で管理してるけど
その数字の上限が決まってる
管理してる空きがないと確保できない
単純な話
出来ないものはできない
それだけ
何も難しくない だから使わなくなったらすぐに解放しておけばいい
それだけ
何も難しいことはないけど馬鹿がこねくり回して難しい難しい言ってるだけ
サンプルソースで開放してないのは1個ぐらいもれてても実害はないから
実装する際は自分で実装したらいい 実はウンコもちょっとくらいもれてても実害はない。お前のパンツは飾りか? パンツに漏れてるウンコなら気にしちゃうけど
公園の片隅に置いてあるウンコは無視しちゃう WinFormsの自作Componemtでデータをネットから取得するメソッドで、完了と失敗のイベントを実装するのは普通ですか? 問題ないと思うが、今の流行りならasync Task<Hoge>等で結果返すパターンかな >>801
ごめんね。
低レベルでアロケータがどうなってるのか気になって。
( ノД`)… U+2028/2029に初めて遭遇したんだが
文字列を1文字ずつ走査して IsSeparator が true だったら削除して詰める、って関数ない? 秒で書けるのによくそんな事質問する気になるな
気が長いやつだ 区切り文字を削除したいシチュエーションなんか普通はないしな
知らんけど ところで拡張メソッドって参照されないんだっけ?
public static System.Data.SqlClient.SqlCommand CreateCommand(this System.Data.SqlClient.SqlTransaction SqlTransaction)
{
var SqlCommand = SqlTransaction.Connection.CreateCommand();
SqlCommand.Transaction = SqlTransaction;
return SqlCommand;
}
BeginTransaction した後のトランザクションを使って CreateCommand すると
トランザクションの内側に入る、的な糞メソッドを作ったんだけど
どうやら、トランザクションの外側になっちゃうっぽいんだ。
→ Rollback しても戻らない
→ ブレークポイントしながら見てると、トランザクション自体が開始されていない
ref this で解決するかと思いきやクラスはダメで使えない
VB.NET だと普通に出来ちゃうと聞くが コードでコントロールのプロパティを規定値(DefalutValue属性の値)にリセットする方法はありますか?(>_<) PropertyDescriptor(ctrl).GetProperties()[nameof(ctrl.Property)].ResetValue(); c#っぽい独自言語の解析をしてるんですが
コメントの「//」や「/*」「*/」の解析って
ダブルコーテーション内と外ってどうやって判断したらよいでしょうか? >>824
やり方次第
作ったことあるのでわかりやすいのは文法をのままコードにする
頭から呼んでって状態を覚えておく
文字リテラル内は解析しないでエスケープルールや”の監視だけする
//や/*コメントの時は行末まで読み捨て >>826
それがわからない
文字列リテラルなのかコメントなのか判断できない
ダブルコーテーションから判定するとそれがコメントだったとき駄目
コメントから判定するとそれが文字列リテラルだったとき駄目
っていうパラドックス >>829
それは変なやり方してるからだろ
おおかた正規表現などで判定してるんだろう
コードを頭から読んでできないのは
文法がおかしいかパースのやり方がおかしいからだ 急がないならどれかの言語のコードでもじっくり読んで勉強したらいい
大体の言語はオープンソースなので好きなのをやればいい
ただしc++の知識ぐらいはいる
急ぐならテストパターンを十分に用意して手あたり次第やればいい >>830
やけっぱちで
解析のコメント削除時に「//」か「/*」見つけたら同じ行の前側みて
文字列リテラル中かどうかみる処理入れて乗り切ってみた >同じ行の前側みて
うん、かなり無茶苦茶だな
先頭から順に読んでいって、「今は文字列リテラル中」とか「今はコメント中」とかの状態を保持しておけよ 独自言語の解析してるんだろ?
他の部分が出来てるなら
普通に頭から読んでって "が出たらリテラルフラグオンにして
//が出たら行末まで読み捨て
/*だったら次の*/がでるまで捨てるだけ
何も難しくない 文字が抜けた
"が出たらリテラルフラグオンにして仕様通りリテラルを最後まで読み切るだけ もしかして、1文字ずつじゃなく1行ずつ読み込んでるんじゃないだろうな >>836
逐次実行じゃなくても、頭から順に読むのは同じだよ
読んだ物を構文木に積んでいって、評価・実行は最後にやれば良いだけ >>829
難しく考えすぎでしょう。
>>826が言ってるのはたぶん単純なステートマシン。
enum State
{
トークン探索中,
文字列検出中,
インラインコメント検出中、
....
}
stateを表すenumを定義して、stateの値に応じて動作を変えるだけ。
文字列リテラルの始め「"」やコメントの始まりを検出するのはstate = State.トークン探索中の時だけ。
素朴すぎるやり方だと思うが、少なくともこれでそんなパラドックスには陥らない >>832
本当にめちゃくちゃだな
前方見ても意味ない
確定するためには本当に最初までさかのぼることになる >>834-835で答えが出てるのでこれ以上はスレの無駄遣い >>840
大丈夫だよ
文字列リテラルって2行続かないじゃん確か >>845
ぎゃああああ
出来やがった
既存コードが解析の初っ端でコメント削除からやってるから
弄りたくなかったけど
いよいよ駄目だな 知らんかったんかいw
コメントは削除するんでなく、「読み捨てる」んだ >>848
いや、似非c#だからそんなことできんだろと ヒアドキュメントを除いたとしてもしソースの先頭の/*をどうやってみつける?
状態を持たないならソースの頭までさかのぼるしかない >>850
いや、今のルーチンはコメントの削除からやってるのよ コメントも文字列も先に始まったほうが勝つからどうしょうもない 質問しといて聞かないパターン=成長しない初心者パターン ただ悩みを聞いて欲しかったんじゃないですか
女の相談事みたいなw
まあ、どうせ人も減ってるしそれもありでしょう >>853
いや、アドバイス通り
頭から読んでいくしかないっぽいっすね
クレームが来てるところがまさにそこなので誤魔化しが効かない >>854
お姉さんが聞いてあげるわ。
今夜、川口駅リリア側の出入り口で待ってる swich() { case xxxx: ~
xxxxに変数をつかいたいのだが、switchに変わるものってなに? >>857
xxxが数値か文字列なら変数だろうと使えたはずです。オブジェクトの場合、同値の判定が基本型のように単純じゃないから無理。 switchi( (button)sender) ){
case Button1: ~
case Button2:~
case Button3:~
}
こんな感じのことがしたい。
〜はMethod()でいいので、
void switch_tb()= {
{Button1, Method1}
{Button2, Method2}
{Button3, Method3}
}
switch_suru((button)sender);
こんなことできんか? C#はメソッドの中のローカルメソッドってできへんの? >>860
素直にButtonのNameプロパティ使え メソッド内メソッドは無くてもいい機能
メンバー封じ込めの方法はいくらでもあるし
ないほうがエラー見つけやすいと個人的には思う >>864
言語の変化についていけないやつの糞化な >>860
Buttonと関数のDictionaryでできそう
試してないけどこんな感じでメソッド取ってくれば…
Dictionary<Button, Func<T, TResult>> メソッド内メソッドはjavaでずっと使ってたけど
クラスを小さくしていくと使う場面は限られていく 初心者っぽくていいじゃん
「この機能が存在する意味が分からないんですけど、何の役に立つんですか?」
って定番の質問じゃん 使ってる奴も糞ばっかになったな。新しい機能一つ覚えただけでマウンティングしだすアホとか。
なぜその機能が糞かが理解できない脳みそ。取り巻きからして残念な言語になってしまった。 >>860
上は>>862に追加して
if (sender is Button) switch ((sender as Button).Name)
{
case "button1":
case "button2":
}
isの判定とasのキャストはControlとかToolStripMenuItemでも状況に合わせて 今後も言語仕様はどんどん拡張されるよ
他の言語の有名なのどんどん取り入れてってカオスになっていく
個人的には範囲指定が欲しい
1..5か1:5みたいなの foreach(var i in Enumerable.Range(1,5))
foreach(var i in 1..5)
どっちがいい? >>860
ButtonのTagにやりたいこと突っ込んどけ いい方法
buttun1.Click=>{Method1();}; 証左、難しい言葉をしってるね。
>>881
エラー 2 '=>' は無効です。
ってなるが、、、 >>874
こういう実装を参考にして欲しくないな
コントロールのプロパティを自由に修正できなくなるじゃん var aa = ((Button)sender).Equals(button1) ? func1() :
((Button)sender).Equals(button2) ? func2() :
func2();
これどう? >>884
ButtonのName変更ってどんな実装に必要なんだよ・・・ >ButtonのName変更ってどんな実装に必要なんだよ・・・
最初はBUtton1だろ。出来上がって綺麗に整理するときにbtnSetParamとか分かりやすく書き換える。 >>885
それならEqualsじゃなくてsender==button1?でいいよ。キャストもいらない Button.Nameをつかうくらいなら、Tagに書き込んだ方がまし。 実装後にスペルミスに気付いた、他の画面との兼ね合いで名称を統一することになった、仮の名前をちゃんとした名前に置き換えた、とか色々あるだろ
リフレクションでデータ取得する方針のせいでガチガチに名前が決められている画面を作らされたときの面倒さったらなかったわ キャストしないとインテリセンスがでないから、キャストしたほうがいいよ。 こんなの考えたが、
public class CaseAction
{
public CaseAction(object @object, Action action)
{
Object = @object; Action = action;
}
public Action Action { get; private set; }
public object Object { get; private set; }
}
public static class Extensions
{
public static void Switch(this object o, params CaseAction[] caseActions)
{
caseActions.FirstOrDefault(x => x.Object == o)?.Action();
}
}
やっぱり使いづらそうだなw
ところで書いててちょっと思ったけど、==演算子の動作って隠蔽(new)と同じように変数の型に
依存するのか、それともオーバーライドと同じようにオブジェクトの型に依存ずるのか、どっちだっけ? ふと思ったが、ふつうにそれぞれのボタンのイベントに実装したらダメなの >>894
ほとんど共通でボタン毎にちょっとだけ処理が違うとかじゃね グループボックスにボタンを貼り付けて、それをコピーして貼り付けると、イベントが同じところになるだろ。
だからエディット都合だな。
イベントで分けるのが一番いい方法かもしれない。w 再表示するために tabPage1.Controls.Add(grp);で追加したgrpだけをクリアするにはどうしたらいいの?
tabPage1.Controls.Clear(); やるとボタンが消えてしまう。 Controlsプロパティの型はControl.ControlCollectionで
そのクラスのドキュメントを見ましょう。
Remove(Control)というのがあったのでそれで削除できそうです。 Removeを使うのはわかるんだが、要するになにがしたいのかというと
Linqを使ってControlsにAddしたGroupBoxだけを選択して、クリアしたいということ。
その書き方がわからない。ということ。 再表示とかクリアとか俺様な用語法されても何言ってるのか分からないよw tabPage1に貼り付けたコントロール群をLinqを使って選択的に消去したいということ。これでもわからん? 煽って悪かったけど
その書き方じゃ誰にもつたわらないよ
意味がわからないけどgrpを消したいならgrpをどこかに記録しておけばいい
終わり
はい次の方〜 >>904
よかったね
言葉遣いや表現力だけ見ると小学生かなって思うけど >903
Keyになる言葉の意味がわからないと解らないと思うよ。それが解る人にはわかる。 var toRemove = tabPage1.Controls.Cast<Control>().FirstOrDefault( .... );
if (toRemove != null)
tabPage1.Controls.Remove(toRemove);
これを1行にしたいってことだったのかな?
拡張メソッド使ってControl側に自分を包含するコンテナのControlCollectionを
引数に撮るメソッドを定義しないとできない気がする
何でもいいけど、冗長でもいいから分かるように書いて欲しいよね >>897
これでスタートして答えをもらおうとして失敗
次に >>899 要するにと言ってるけど何も要してないどころか条件を追加してる
そして これ >>901 への流れ
トンチンカン
最初のレスでなぜ伝わると思ったのかが分からない 無理矢理だなあ
Action<Control> removeMe = x => x?.Parent?.Controls.Remove(x);
removeMe(
tabPage1.Controls.Cast<Control>().FirstOrDefault( .... )
); private void button3_Click(object sender, EventArgs e)
{
var grps = tabPage1.Controls.Cast<Control>().Where(c => c is GroupBox );
foreach (var grpB in grps)
{
tabPage1.Controls.Remove(grpB);
}
}
これで一回で消えないのは何故だろう? grpsには全部のグループボックスが
入っている。しかしforeachでところどころ飛ばしてしまう。 ケツから消していくとうまくいくんだろきっと。
まえからでもこうやるとうまく行く。
private void button3_Click(object sender, EventArgs e)
{
var grps = tabPage1.Controls.Cast<Control>().Where(c => c is GroupBox );
List<GroupBox> gg = new List<GroupBox>();
foreach (var grp in grps)
{
gg.Add(grp);
}
foreach (var grpB in gg)
{
tabPage1.Controls.Remove(grpB);
}
} さて、原理は分ったが、これを1行で書くにはどうするのか? 逆にグループボックス以外を抽出してからパネルの中身全消去からの追加とかはどうかな(>_<) >>918
>>916のLinqにReverse()追加すれば >>919
なんで1行にこだわってるの?
どれだけ読みにくいソースにできるか研究でもしてんの? >920 それ、俺もちょっと考えた。
>921 それは最終手段にとっておいたのに。
Reverse()ってあるんか? それだ!! もう気が済んだかもしれんけど、無理に何でもインラインで書こうとして
可読性落とすなんて愚の骨頂で、普通にメソッドに外だし(別に拡張メソッドじゃなくてもいいけど)
した方がいいと思うけどね
public static class Extensions
{
public static void RemoveChildren(this Control control, Func<Control, bool> predicate)
{
var controls = control.Controls;
controls.Cast<Control>().Where(predicate).ToList().ForEach(x => controls.Remove(x));
}
} https://qiita.com/taigaaa2/items/7f05ad950a57033892ae
この方法で値を保存しているのですが
cドライブに保存されている様でプログラムを他のPCに移すなどすると値が保持されていません
どうすれば他のPCでも記憶した値を使える様になるでしょうか 真面目に答えるならサーバーやクラウドストレージのSettingsを読み書きするSettingsProviderを自作することだが
初心者にはひと月ふた月かかるだろうしはっきり言って時間の無駄 真面目な答の方が愚策という変な人、というかおそらくバカ >>926
ユーザー共通になっちゃうけど、スコープをユーザーからアプリケーションに変更すればexeと同じディレクトリに保存するよ 例えば.net 4.7で作られたプログラムを4.5しか入ってないPCで動かすとどうなりますか? >ユーザー共通になっちゃうけど、スコープをユーザーからアプリケーションに変更すればexeと同じディレクトリに保存するよ
アプリケーションじゃ動かんかったな。動くこともあるんだろうな。意味がわらかんし、マニュアル読んでも書いてないし
それにビルドで設定値が消えるから、、、最初から打ち直し。w
こんな意味の解らん機能はつかわない方がいい。JSON.NET使った方が遥かに楽。というのが俺の感想だ。 >>932
開発環境が4.7でも対象フレームワークを4.5に設定してビルドすれば、4.5が入ってるPCでも動く。
ただし、4.7でないと動かない機能は使えなくなる。 public static void RemoveChildren(this Control control, Func<Control, bool> predicate)
{
var controls = control.Controls;
controls.Cast<Control>().Where(predicate).ToList().ForEach(x => controls.Remove(x));
}
これは非常にスマートだという感じだが意味わからんなー。
predicate: 対象となるコントロールの場合はTrueを返す関数?
ToList() :predicateで判定したコントロールのListを作る。
ForEach:ToListからひとつづつコントロールをとりだしてxにセット、Removeする。
という意味だろうか?
Funcって初めて見た。いま調べてみるとよく使う標準デリゲートらしい。であれば
controls.Cast<Control>().Where(ラムダ式).ToList().ForEach(x => controls.Remove(x));
で一行でできる筈だな。
つまり
controls.Cast<Control>().Where(x=>x is GroupBox).ToList().ForEach(x => controls.Remove(x));
で実験してみると
tabPage1.Controls.Cast<Control>().Where(c => c is GroupBox).ToList().ForEach(x => tabPage1.Controls.Remove(x));
わーいうまく行ったぞ。 >>936
>.net4.7で作られた
をどう解釈するかだな Castを無くすために
tabPage1.Controls.OfType<GroupBox>().ToList().ForEach(x => tabPage1.Controls.Remove(x));
これでも動くのに、
tabPage1.Controls.OfType<GroupBox>().ForEach(x => tabPage1.Controls.Remove(x));
これは動かないのはなぜ? 実装してないものが使えるわけないだろ
魔法じゃないから そもそも列挙してる最中のものを削ると列挙に失敗する可能性が高い
最初から何番目の要素を取り出す
次はそれプラス1の要素としてるのに
1番目から消すと何番目というのがずれるだろ?
一番目を取り出すそれを消す
○×▼
↓
×▼
二番目を取り出すそれを消す
×▼
↓
×
三番目は取り出せない ToList()で控えを作る
できたList ○×▼ をみて対象を消していく
こちらは消し終わってList内容はそのまま >>941
いやまあそうなんだが、疑問というのは
var grps = tabPage1.Controls.OfType<GroupBox>();
varじゃわからないのだが、この型は何なの? Listじゃないよね。 可能性が高いと書いたのは列挙の方法がちがうかもしれないから ここは個別指導スレじゃないだろ
いい加減にわきまえろ
質問じゃなくて誰かに教えてもらいたいなら金を払って個人指導受けろ IEnumerableやyield returnの動作知らずにLINQ使うのって怖くないのかな var grps = tabPage1.Controls.OfType<GroupBox>();
var ggg = tabPage1.Controls.OfType<GroupBox>().ToList();
IDEでみるとgrpsは
{system.Linq.Enumerable.OfTypeIterater<GroupBox>}
gggは
count=10
と出る。 >IEnumerableやyield returnの動作知らずにLINQ使うのって怖くないのかな
何故怖いの?
IEnumerableとEnumerableの違いを端的に説明すると、どういうこと? キーワードがわかってるなら聞かないで自分で勉強したらいいのに
勉強したり努力してわからないならここで聞けばいい Enumerable.OfType <GroupBox > grps = tabPage1.Controls.OfType<GroupBox>();
これはできないよ。エラーになる。
List<GroupBox > ggg = tabPage1.Controls.OfType<GroupBox>().ToList();
これはOK >Enumerable.OfType<TResult> メソッド
あっと見落としてた、型じゃないのか。メッソドか。 >>936
ありがとうございます。
ターゲットフレームワークが4.7、動かそうとしているPCが4.5、プログラムの内容が4.5までで実現できるwinformsの場合でも起動すらできないですか? >例えば.net 4.7で作られたプログラムを4.5しか入ってないPCで動かすとどうなりますか?
4.7が動作しないPCはない(筈だ)から、4.7をダウンロードしたらいいだけだよ。
4.7をシステムに追加すれば問題なしに完璧に動作するよ。 >>960
クライアントがターゲットフレームワーク未満の場合は、起動時にエラーダイアログが出て終了する。
その内容だったら、ターゲットフレームワークを4.5に変更すれば良いのでは。
厳密には、4.5はサポート切れてるから、4.5.2に設定した方が良いと思うけど。 >>961,962
よく分かりました。ありがとうございます なんとなくpublicならプロパティ
privateならフィールドにするように
しているんだが
public なフィールドやprivateなプロパティって使うことある? >>951
> IEnumerableやyield returnの動作知らず
そいつらは実装者には必要だけどLINQ使う側には必要ないだろ そもそもこんな疑問でちゃう時点で機能としての出来が良くないんだから
使わない俺の大勝利 >>930
スコープがアプリケーションだと書き込みができない様で、書き込みのできる方法はありますでしょうか?
アプリケーションでいじった値をアプリケーションのあるフォルダなどに保存する方法が知りたいです
visualstudioで生成したDebugフォルダをコピーするだけで同じ設定のものがコピー出来る様になりたいです >>824
そんなレベルの疑問を自力で解決出来ないのに独自言語なんて作れるのか? >>970
>>930を真に受けちゃダメ
MSはバイナリをProgram Files以下のディレクトリにインストールして使うのが
標準的な使い方だと考えているので、アプリケーション設定も当然バイナリと同じフォルダに
保存する方法は用意されてない。(言うまでもないけど、Program Files以下のディレクトリに
ファイルを書き込むには特別な権限が必要)
バイナリをUSBメモリに入れて持ち歩くような使い方を想定しているようなアプリなら
当然バイナリと同じディレクトリに設定ファイルを保存するのもありだけど、
そういう場合は自分でそういうコードを書くしかない .netの前はアプリなどがシステムフォルダににDLLを入れていた
それでアンインストールなどを繰り返すとどれがどれに依存しているかわからなくなった
これをDLLヘルという
これを教訓にしてアプリではdll依存を極力避け
アプリの配布はビルドしたものを適当な場所にxcopyしただけで可能なように設計された ApplicationSettingsみたいなゴミを使うの止めればいいんじゃないの
何でこだわってるの?
ApplicationSettingにこだわらなければ10分で済む話だよね?
なんで半日も一日も掛けてるの?
不死身で時間が無限にあるの?
無職で時間が余ってるの?
休日ぼっちで暇なの?
ねえなんで? そもそもアプリケーション設定の解説なんていくらでもweb上に存在するのに
どうしてまずそれらを読まずに最初からできもしないことをできるはずだと思い込んでるのか、
そこが不思議。 アプリケーション設定には特にこだわりはありません
保存さえ出来れば構いません
出直してきます
申し訳ないです >>980
自分で貼ったリンクに保存場所書いてあるし
プロジェクト名がHogeのとき
C:\Users\{User名}\AppData\Local\Hoge\...\1.0.0.0\user.config
でProperties.Settings.Defaultって書いてあるんだからググったら
パスの取得の仕方は
https://dobon.net/vb/dotnet/programing/mysettings.html
に書いてある
このパスを必要な場所にコピーしたらいいだけ
俺の場合はこれの使い方を把握できなかったんで自分でパーサー書いた方が早かったなw >>985
プログラムを別のマシンに移しても設定が保存されるようにしたいのです
でも保存場所を変えることは出来ないんですよね? >>986
最近の流行りだと、設定を捨ててjson.netってやつで管理する
上記のそれはクラスオブジェクトをテキストにする(シリアライズと言う)ソフトなので
コレを普通のテキストファイルとして読み書きするだけです >>987
何の会社かよくわからないし
MSのCSV読み込みにしといた方が良くない? >>984
Excelでの編集が必要なほどデータが大量ならDB使えよ >>988
JSON.NET知らないのはさすがにモグリやろwww >>986
一番簡単なのは、永続化(保存)したい情報だけをまとめたクラスを作って
シリアル化/逆シリアル化する方法。
シリアル化/逆シリアル化のための機能は.NETの標準ライブラリにも用意されてるので
わざわざサードパーティーのを使うことない
しかし、意地悪なのかマジなのか知らんけど、
なんか人を惑わすようなこと書く人ばっかりで質問者も大変だなw >>992
普通にappsettings.json使えばいいのにね >>991
えー、知らない
すぐ死ぬことがない根拠ある? CSV:一般的でシンプルで扱いやすい。
INIファイル:以前の標準、いまでも使えるがCOMオブジェクトロードする必要がある。フォーマットは直観的で使いやすい。
Json:上記に比べると、オブジェクトをそのまま保存可能というメリットがある。フォーマットは上記よりわかり難いが特に問題はない。
XML:汎用性があるが、直観的なフォーマットではないのでわかり難い。普通はこんなものをたいそうに使う必要はない。
などがあって、基本はCSVが標準だろうと思う。しかしクラスをそのまま保存するような場合はjsonがおすすめだ。例えば
カラーコードやフォントを保存する場合にはCSVだと、いちいちテキストなどに変換する必要があるが、jsonのシリアライズを
使えば何にも考えずに保存できる。MSもJnonのIFを用意しているが、Json.netの方が優れているのでそちらの方を使った方がいい。 >>995
json.netは俺が信用できないし
エクセルで編集できないしやめたほうがいいよ >>994
Microsoft自身もJSON.NETを製品に使ってる(.NET Core CLIとか) >>996
お前が信用してなくてもMicrosoftは信用してる このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 67日 2時間 33分 53秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。