X



ふらっと C#,C♯,C#(初心者用) Part134
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ワッチョイ 0f9a-KsIq)
垢版 |
2017/11/29(水) 19:23:58.05ID:GNLsbK4F0
「どんなにくだらない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
0003デフォルトの名無しさん (ササクッテロレ Spbd-CjLb)
垢版 |
2017/12/05(火) 12:25:34.83ID:cln+gySGp
今年の夏くらいからプログラミング勉強し始めたけど結局なーんも身についてなくて笑えない
ちょっと応用すれば出来るはずのことも全く同じサンプルがないと何も出来ないし頭の悪い奴ってのはほんとに必要ないなと実感したわ

こんなの身についてるってみんなすげーよ
ほんと尊敬する
0004デフォルトの名無しさん (ブーイモ MM0a-bGuk)
垢版 |
2017/12/05(火) 12:44:40.61ID:WFyLCtnzM
趣味なら続けてればそのうちできるようになるよ
もし仕事にするつもりだったなら今すぐ考え直したほうがいい
向いてない人が業界入っても生涯最底辺確定だよ
0011デフォルトの名無しさん (ササクッテロレ Sp8b-1eZt)
垢版 |
2017/12/07(木) 08:25:05.89ID:AtZ2X5K5p
VS2015を用いてC#でアプリを作っています
現在テストを行う中でスタブを使おうと考えたのですがどういうものかの記述はしてあっても実装の仕方が見つけられないのでどう実装するべきものなのかアドバイスをお願い致します
なにか決まった構文などがありますか?
スレ違いなら申し訳ありません
0013デフォルトの名無しさん (ブーイモ MMbb-/Bld)
垢版 |
2017/12/08(金) 08:21:40.76ID:PpC6VnTrM
>>11
普通に実装するんだよ
たとえばリポジトリクラスをモックするなら、DBの変わりにListやファイルを使うように実装する
Moqみたいなアドホックなモックに頼るのは都合のいい脳内彼女状態になりやすいからお勧めしないな
0016デフォルトの名無しさん (ワッチョイ ff9a-StTJ)
垢版 |
2017/12/08(金) 20:43:50.51ID:0wYNAdO30
>>11
言語以前の問題だから板違いではないがスレ違いだな
「デバッグに何か決まった手順はありますか」って聞くようなもの
そして「使おうと考えた」のではなく「使えと指示された」と邪推
0017デフォルトの名無しさん (ワッチョイ 5723-/Bld)
垢版 |
2017/12/09(土) 09:15:02.44ID:BBiO47QN0
>>14
その賢い利用というのが、テストが正しいかどうかはともかく、
なんでもいいからとにかくテストをパスさせて仕事から逃げることを意味するなら積極的にMoqを使うべきだな
プロダクトの機能に対して責任を持つのか、コーディング作業員として単体テストのレビューが通るところまでの責任なのか
プログラマの立場次第であり、絶対的にどちらが正しいとはいえない
0020デフォルトの名無しさん (ワッチョイ 5723-/Bld)
垢版 |
2017/12/09(土) 11:59:32.42ID:BBiO47QN0
>>19
xunit見てみたけど、内部的な依存関係の差し替えには全く使われてないね
テストツールをテストするという特殊な事情ゆえ、テストには(ユーザーにとっての)テスト対象コードが必要になる
その代わりとして極一部でMoqやNSubstituteが使われてるようだ
賢い使い方の一つだとは思うけど、リポジトリクラスやサービスクラスを差し替えたりするのとは全くの別物と考えるべきかと
0022デフォルトの名無しさん (ブーイモ MMbf-/Bld)
垢版 |
2017/12/09(土) 12:17:46.40ID:awJ9eWLVM
んな大袈裟な
俺は自分の経験(個人・チーム含む)からアドホックなモックは上手くいかないと思ってるけど、
実際に効果的に使われてるケースがあるならぜひ知りたいよ
xUnitのテストなんて超特殊な例じゃなくてもっと適切な例をplz
0024デフォルトの名無しさん (ワッチョイ 97a5-fvxL)
垢版 |
2017/12/11(月) 20:41:46.07ID:f/7OfSkR0
ワイクソ馬鹿
そもそも何のためにスタブとかモックとかがあってどういう時に有用なのか分からない
足りない所を補うみたいなイメージなんだけどプログラムが全部完成してからのテストなら必要ない?
0026デフォルトの名無しさん (ワッチョイ 9fd2-SaVx)
垢版 |
2017/12/11(月) 21:02:58.97ID:xzgxDEt/0
>>24
たとえばあるメソッドをテストするとして、テスト目的の箇所以外の依存関係をモック/スタブで差し替えれば、目的のロジックに集中できるしパフォーマンス的にも有利
0028デフォルトの名無しさん (ブーイモ MMcf-/Bld)
垢版 |
2017/12/11(月) 21:38:59.51ID:Y2G40TozM
>>24
テストしてて、ここ触りたくねえなあデータ用意すんの面倒臭えなあと思うことあるだろ?
正しいかどうかは別にして、とりあえず臭いものに蓋をしたまま手っ取り早くテストを終わったことにして帰宅できる
0037デフォルトの名無しさん (ワッチョイ 97a5-1g/A)
垢版 |
2017/12/12(火) 22:16:10.60ID:TlJgX2b/0
プログラミング始めたてなんだけど、CSVファイルの先頭何行を無視してそれ以外のデータをデータベースに入れたいって状況になったんだけど、経験者の人はめっちゃ簡単だよって言ってて、
でも俺には全く想像もつかなくて、プログラミング出来る人の頭の中はほんとどうなってるんだ…
やっぱみんなもこれくらいのコード書くのは楽勝なの?
0041デフォルトの名無しさん (ワッチョイ 9fd2-LLtl)
垢版 |
2017/12/12(火) 23:21:09.16ID:5Qo60rlq0
いっぺんに全部やろうとするんじゃなくて、小さい作業に分解して考えるんだよ
今回なら「先頭数行を無視してテキストファイル読み込む」にCSVは関係ないでしょ?まず欲しい分だけ読み込んで、CSVとしてパースするのはその後に考えればいい
ググって出てくるくらいまで分解すれば、あとは組み合わせておしまい
0042デフォルトの名無しさん (ワッチョイ ff9a-StTJ)
垢版 |
2017/12/12(火) 23:28:56.01ID:CW11BSat0
>>41
>今回なら「先頭数行を無視してテキストファイル読み込む」
要素内に改行がある場合(めったにないが)を想定しなきゃならないので先にパーサーを通す必要がある
元の要件が「CSVファイルの先頭何行を無視して」だから
0045デフォルトの名無しさん (ワッチョイ 3703-ZqID)
垢版 |
2017/12/13(水) 07:25:32.55ID:Iqcr0fg80
どうせ読み飛ばすんだからどっちでもええやろそんなもんw
0051デフォルトの名無しさん (ワッチョイ 9306-buzn)
垢版 |
2017/12/22(金) 09:55:25.36ID:oR3DRk2W0
会計システムはクラサバが最低限の要件なので、計算はDBでやるからクラス分けなど何の役にも立たないし却って邪魔だ
彼はクラサバと無縁なスタンドアローンの世界に住んでいるのかもしれんね
0052デフォルトの名無しさん (ブーイモ MM27-bebx)
垢版 |
2017/12/22(金) 10:08:25.66ID:2CqGXpCvM
スタンドアロンだとして、どういうデータ設計したら費用項目ごとにクラスができるんだろうね
日付, 費用種別コード, 金額
まさかこんなタプルで管理してるんだろうか
0054デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/22(金) 10:23:52.41ID:lyRs/gAjM
そ、ギョーミーな戦場ではオブジェクト指向などと言う玩具の武器は役に立たない
0056デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/22(金) 10:32:48.81ID:lyRs/gAjM
何をいっておる、LinqもLambdaも戦場の小火器として使えるが腐ったオブジェクト指向など使えぬわ
0058デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/22(金) 10:59:19.90ID:lyRs/gAjM
腐ったオブジェクト指向脳で単純なものを複雑にするヤツが大嫌いなだけ
0061デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/22(金) 11:11:28.05ID:lyRs/gAjM
オブジェクト指向は過去の遺物
0068デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/22(金) 19:32:54.21ID:w6Zu6k6M0
ボタンを押すと処理を緊急停止するプログラムを作りたいのですがどのような方法がありますでしょうか?
0070デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/22(金) 19:46:47.55ID:w6Zu6k6M0
今はbackgroundWorkerで処理を実行しているのですが
CancelAsync()で停止させても
if (backgroundWorker1.CancellationPending)
{
e.Cancel = true;
return;
}
というコードに到達するまで停止しないので停止までに時間があるのを改善したいです
このコードをたくさん差し込むしかないのでしょうか?
0072デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/22(金) 19:53:12.14ID:w6Zu6k6M0
どういうことでしょう
あらゆる処理をForm1に書いていまして
killの仕方がわからないです
0073デフォルトの名無しさん (ワッチョイ cf9a-RBuR)
垢版 |
2017/12/22(金) 19:59:46.81ID:Ta4DCaCP0
backgroundWorker以外の処理は生かしておきたいって話なら分からないな
>>70
というかキャンセル用のフラグ作って止めなきゃならないところに停止処理差し込むのがそんな大変だとも思えないけど
楽したいってのはわかるけど、それは他の人に聞いて
0075デフォルトの名無しさん (ワッチョイ ff19-vkjg)
垢版 |
2017/12/22(金) 20:10:01.65ID:HDUqSz1r0
>>68
Application.Exit();
0078デフォルトの名無しさん (ワッチョイ 03c9-buzn)
垢版 |
2017/12/22(金) 20:39:08.36ID:kA+szNzE0
>>77
Unhandledで拾ったは良いものの、例外詳細見たらスタックトレースに他の発生行が無くてその例外行だけだったのよ
どこかでthrowし直してたとしてもその行が表示されるのにな
0080デフォルトの名無しさん (アウアウエー Sadf-HQem)
垢版 |
2017/12/22(金) 20:47:43.11ID:G9MI+OvKa
>>70
なんか先週ぐらいも同じ質問してた人がいたけどw

だからさあ、メソッドを外から強制的に止めようって発想が間違ってる。
メソッド自身が何かをポーリングして自分で止まるように作る
0081デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/22(金) 21:17:12.68ID:w6Zu6k6M0
>>80
それ自分です!
0087デフォルトの名無しさん (ワッチョイ 6f76-5z/u)
垢版 |
2017/12/22(金) 22:41:34.49ID:Iyc/J/sJ0
BackgroundWorkerはレガシー
0088デフォルトの名無しさん (ワッチョイ 138d-6js8)
垢版 |
2017/12/22(金) 23:26:00.99ID:vOV0CWVO0
>>81
ここで2回も聞くぐらいなら
やりたいことを英語にしてGoogleで検索した方がいいよ
ここにいる人が知らないか教えないだけで
やり方はちゃんとある
ポーリングとか今どきダサすぎるからやめとけ
0095デフォルトの名無しさん (ワッチョイ cf80-fDvV)
垢版 |
2017/12/23(土) 08:12:59.96ID:FPRjmoIB0
>>70
Async が付いている関数は、非同期処理だから、コンテキストが異なる。
だから、処理が実行される順番が確定しない

Sync なら同期処理だから、順番が1つに決まる。
つまり、ソースコードの上から下へ、順に実行される

コンテキストが異なるもの同士が通信するには、プロセス間通信(IPC)を使う。
基本的には、相手のキューに、投入することしかできない

1. 依頼する。A プロセス → OS → B プロセス
2. B が届いたメッセージを処理する
3. 返事する。B プロセス → OS → A プロセス

これを同期処理にすると、1〜3 の処理中、
アプリが止まる(ストール)から、GUI では嫌われる。
50ms 以上掛かる処理は、非同期処理にすべき

逆に、CUI では同期処理にして、コンソールが止まる
0097デフォルトの名無しさん (ワッチョイ 2323-bebx)
垢版 |
2017/12/23(土) 08:23:33.88ID:ti8BrBts0
句読点箇条君はすぐわかるな
そして必ず間違ってる
スレッドが違うだけならIPCなんか使う必要ない
普通は単にメモリを共有する
FormsのBeginInvokeなどで使われているSynchronizationContextのキューも普通にメモリを共有してるだけだ
009895 (ワッチョイ cf80-fDvV)
垢版 |
2017/12/23(土) 08:24:22.31ID:FPRjmoIB0
つまり、1〜3 は、OS が行っている事だから、何もできる事が無い。
OS レスのマイコンとかなら、自分でプログラミングするけど

何かをしようとしても、OS がCPU のタイムスライス、
プロセスの優先度・実行順番を決めているから、何もできない

それがOS。
OSレスなら、それらを自分でプログラミングしないといけないから、無理
0099デフォルトの名無しさん (ワッチョイ 2323-bebx)
垢版 |
2017/12/23(土) 08:45:11.75ID:ti8BrBts0
このアスペは>>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つのキャラクターの間でやり取りしたい、
でも直接メソッドを呼ぶと長くなるとか、間にウェイトを入れたいとかで一旦処理をゲームループに戻したい、なんて時にも使える
0100デフォルトの名無しさん (ワッチョイ 6f9f-M1U4)
垢版 |
2017/12/23(土) 10:27:32.58ID:AW7swrGi0
オレオレキューなんぞつかわずにTaskを使え
バックグラウンドといえどインプロセスで長大な処理を発生させるな
そういうのはジョブ管理サービスを使えHangfireとかな
0106デフォルトの名無しさん (ワッチョイ 8f33-9Igo)
垢版 |
2017/12/23(土) 13:21:31.65ID:kNBZIa630
自分のBackgroundWorker使ってるソース見てみると、
処理単位でループして1処理終った後と、長い処理の途中でwk.CancellationPending == trueで抜けるか判定してる
イベント待ちはタイムアウト設定して一旦抜ける
という感じだった
Task使っても同じだろう
0107デフォルトの名無しさん (ワンミングク MM9f-Px6h)
垢版 |
2017/12/23(土) 13:24:28.81ID:eJOJ1LQ5M
@Abortはしたくない
Aメインループのフラグチェックでは頻度が足りない
Bでもフラグチェック処理を書き足すのは嫌だ

要件はこれでいいか?
真面目に考えるとメタプログラミングの領域だな
チェック頻度とパフォーマンスのトレードオフも考えなきゃならん
初心者スレ民の実力では難しいんじゃないか?
0110デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/23(土) 13:46:44.49ID:suzKftpB0
たくさんレスありがとうございます。
わからない言葉がたくさんあるので調べてまた来ます。
0111デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/23(土) 14:02:46.78ID:suzKftpB0
キーボードを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;
}
}
}
0113デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/23(土) 14:19:46.07ID:suzKftpB0
キーボードをa,b,c,dと順番に5秒置きに押していってすぐ途中で止められるプログラムを作るには
どういう方法があるんでしょうか?BackgroundWorkerにはこだわりません。
play_abcd()メソッドには押したボタンをtextBoxに表示する機能もあってBackgroundWorkerを使うと
プログラム実行中でもきちんと表示されるのでBackgroundWorkerを使っています
0114デフォルトの名無しさん (ワッチョイ 6f9f-M1U4)
垢版 |
2017/12/23(土) 14:42:50.03ID:AW7swrGi0
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;
/**//**//**/}
/**//**/}
/**/}
}
0119デフォルトの名無しさん (アウアウエー Sadf-HQem)
垢版 |
2017/12/23(土) 16:17:28.04ID:Nxx0V5wTa
>>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

それ、タイマーで十分実現できると思うんだけど...
0127デフォルトの名無しさん (ワッチョイ 8f9f-9TLc)
垢版 |
2017/12/23(土) 19:47:21.47ID:PvZdk9430
>>113
そもそも、なんで提示したコードがdまで実行しないとキャンセルされないか理解できてる?
理解出来てればBackgroundWorkerを別の手法に変えても意味がないことは分かると思うんだけど
0133デフォルトの名無しさん (ワンミングク MM9f-Px6h)
垢版 |
2017/12/23(土) 21:29:55.10ID:eJOJ1LQ5M
>>131
推測でしかないが質問者のやりたい事ってAPIが提供されてないアプリのGUIオートメーションだと思うんだ
やってみるとわかるけど、等間隔キー入力の繰り返し、のような単調な操作のほうがむしろレアケースだよ
0138デフォルトの名無しさん (ワンミングク MM9f-Px6h)
垢版 |
2017/12/23(土) 21:42:59.27ID:eJOJ1LQ5M
ちなみに>>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の列挙ではなく式木にしたら記述が楽そうだな、とかインタープリターパターンで実装したらユーザー目線で便利そうだな、とか発展していく
0141デフォルトの名無しさん (ワッチョイ cf80-fDvV)
垢版 |
2017/12/23(土) 22:36:15.16ID:FPRjmoIB0
非同期処理は、コンテキストが異なるから、処理の実行順番は確定しない

ビジーループするのは、もってのほか。
ビジーループは同期処理

非同期処理は、コールバック関数を使う。
相手の処理が終わったら、コールバック関数を呼んでもらう

コンテキストが異なるものは、マルチスレッド・マルチプロセスでも、
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから、
プログラマーができる事は無い

複数のスレッド・プロセスは、無関係に同時に、異なるCPU で動く(並行処理)から、
処理時間が短くなるが、処理の実行順番は、OS が決めるから確定しない

同期処理とは異なる
0144デフォルトの名無しさん (ワッチョイ cf80-fDvV)
垢版 |
2017/12/23(土) 23:31:47.43ID:FPRjmoIB0
そもそも、ビジーループ(ポーリング)しても意味がない

例えば、スレッドA から、10ms 毎にポーリングしても、
スレッドB の処理が10秒掛かれば、千回のポーリングは無意味

ポーリングしても、異なるスレッドの処理を速めることはできない。
OS がCPU のタイムスライス、スレッド・プロセスの優先度・実行順番を決めているから

プログラマーにできることは、コールバック関数を登録することだけ。
スレッドBの処理が終われば、それを呼んでもらうだけ
0147デフォルトの名無しさん (ワッチョイ 8f9f-mmj6)
垢版 |
2017/12/24(日) 07:08:55.16ID:kiz3NtEj0
play_abcdって雑な作りから察すると5秒おきってのはaの動作が終わってから5秒なんじゃね?
本当に5秒感覚でキーを押したいならタイマーがいいけど、各動作を5秒感覚で実行したいならタイマーは使わない方がいいかな
0150デフォルトの名無しさん (アウーイモ MM67-1kTE)
垢版 |
2017/12/24(日) 14:33:03.85ID:WF18n6kNM
2〜3台のPCだけで使う小規模なアプリケーションで、不変で追加もしない500×3列程度のデータを扱いたいです。EXCELでいうvlookup関数みたいな参照を行いたいのですが、EntityFrameworkだとSQLserverのインストールが必要?なため別の方法を模索中です。
csvやtxtファイルを実行ファイルと同じフォルダにいれて参照するのがいいか、もしくは別の方法があればご教示いただきたいです
0172デフォルトの名無しさん (ワッチョイ 2323-bebx)
垢版 |
2017/12/25(月) 08:12:45.88ID:W15ZQhn00
>>169
XML比なら、
人間にとって扱いやすい
サイズが小さい
読み書きが速い
属性と要素の使い分けをしなくていい
JSON SchemaはXML Schemaより圧倒的に分かりやすく書きやすい
配列、マップ、数値、論理値、文字列という最低限の型付けがあるので、
プログラミング言語のデータ構造とのマッピングがしやすい(XMLは属性やXML Schemaで明示的にマッピングしてやらないと使い物にならない)
0178デフォルトの名無しさん (ブーイモ MM27-vkjg)
垢版 |
2017/12/25(月) 12:20:28.09ID:sz9H2GSPM
美容番長だっけ?
0183デフォルトの名無しさん (ワッチョイ b303-G8t+)
垢版 |
2017/12/25(月) 18:59:27.21ID:8wInAEQh0
だから上手なDBとか使えばcsvの方より良いんだろ
0185デフォルトの名無しさん (ワッチョイ b303-G8t+)
垢版 |
2017/12/25(月) 19:15:27.15ID:8wInAEQh0
設定ファイル的な話だとしたらjsonって微妙だけどxmlはクソ
xmlはどんな用途向けにもクソ
0188デフォルトの名無しさん (アウアウカー Sac7-Vzer)
垢版 |
2017/12/25(月) 20:07:35.17ID:y0MybC9Za
>>179
ぶっちゃけこれだろ
0189デフォルトの名無しさん (ワッチョイ b303-G8t+)
垢版 |
2017/12/25(月) 20:13:26.84ID:8wInAEQh0
>>186
嫌なのではなくクソだと言っとるのだが?
0192デフォルトの名無しさん (ワッチョイ b303-G8t+)
垢版 |
2017/12/25(月) 20:24:10.15ID:8wInAEQh0
>>190
何が気にいらんのか知らんけど変な絡み方するのやめてもらえんかな?
0196デフォルトの名無しさん (ワッチョイ b303-G8t+)
垢版 |
2017/12/25(月) 20:35:26.95ID:8wInAEQh0
>>194
同じって事はないよ
どの形式でも必要十分な機械可読性を得られるなら
選択の決め手になるのは速度などではなく人間可読性
ヒューマンリーダビリティ
xmlはこれが壊滅的にクソ
0198デフォルトの名無しさん (ワッチョイ 6f9f-M1U4)
垢版 |
2017/12/25(月) 20:55:38.22ID:HvFCkquc0
バックエンドだと設定ファイルは.csがベスト
貧弱なインテリセンスで間違えやすい設定なんか書きたくないっすわ
テストまで考えるとビルドなしで変更可能である意味がほとんどないしな
0199デフォルトの名無しさん (ワッチョイ b303-G8t+)
垢版 |
2017/12/25(月) 21:26:28.09ID:8wInAEQh0
今日は特別に俺からのクリスマスプレゼントの言葉を贈ってやろう

お前らはもう少し自分の無知無能と真剣に向きあった方が良い
0211デフォルトの名無しさん (ワントンキン MM9f-OPDc)
垢版 |
2017/12/26(火) 09:02:34.41ID:4/m6WkoIM
初心者なので教えてください。
xml ならDataSet.ReadXml()でお手軽に扱えてたんですが、jsonはどう読み込んで使うのですか?
ちょっとググったら、jQueryとか、webっぽいのが目についたのですが、ローカルexeでも使えるんでしょうか?
0212デフォルトの名無しさん (ブーイモ MM1f-vkjg)
垢版 |
2017/12/26(火) 09:11:46.70ID:x+COpgJUM
>>211
NuGetでJson.NETを拾ってくる
0215デフォルトの名無しさん (アウアウウー Sa67-bqMz)
垢版 |
2017/12/26(火) 12:28:40.93ID:OUkXE0b1a
XML最高って言う奴がいるけどDTDとかちゃんと理解して使ってるのか疑問
俺はさっぱりわからなないので放置してる

XMLは賢い人が集まって俺って賢いだろを連発してクソ企画になったって本で読んだ
0219デフォルトの名無しさん (スッップ Sd1f-9TLc)
垢版 |
2017/12/26(火) 18:42:54.83ID:k2JgsGmBd
>>218
じゃあ折角だし
ListviewItemCollectionやCollection<T>をソートするいい方法ってなんかある?
別インスタンスにするのはNG
並び替えたやつをループしてRemoveとAddを繰り返しやる方法以外思いつかなかった
0224デフォルトの名無しさん (ワッチョイ 8f9f-9TLc)
垢版 |
2017/12/26(火) 20:24:15.51ID:0luiAFcJ0
>>219
分かりづらかったんで質問を変える
private readonly Collection<string> hoge
のhogeを文字列順にするとき
foreach(var s in hoge.orderby()){
hoge.Remove(s);
hoge.Add(s);
}

でできたんだけど理由があってaddは使いたくなかった
add使わないで並び替えってできる?
0227デフォルトの名無しさん (ワッチョイ 8f9f-9TLc)
垢版 |
2017/12/26(火) 20:46:11.62ID:0luiAFcJ0
>>225
Sortがあったら楽だったんだけどね

>>226
https://msdn.microsoft.com/ja-jp/library/ms132397(v=vs.110).aspx
読み取り専用だから代入できない
ICollectionは継承してるクラス
ToListした時点で別インスタンスだからそれに対してSortしても意味無い

>>223
気持ちは分かるんだけど使ってる先を修正できずこちら側で並び替えないといけない状況があってな
インデクサー定義されてるんだから並び替えできても良さそうなのに見つけられなかった
0228デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/26(火) 20:58:13.89ID:YcrPMu9B0
point(1,1)

axis(1,1)
に正規表現で置換したいのですがどうすればいいでしょうか?
visualstudio2015です
0229デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/26(火) 21:01:11.62ID:YcrPMu9B0
point\({.*}\)
axis(\1)
とやっても出来ないので悩んでいます
0233デフォルトの名無しさん (ワッチョイ 6f9d-FmKA)
垢版 |
2017/12/26(火) 21:10:38.80ID:cWcYrW8d0
もし元インスタンスにさわりたくないなら、元のコレクションとは別に
ソートした結果のインデックス位置をもつコレクションつくってそっちから引っ張るけど
0235デフォルトの名無しさん (ワッチョイ 8f9f-9TLc)
垢版 |
2017/12/26(火) 21:20:16.36ID:0luiAFcJ0
>>232
IListも継承してるクラスだからインデクサ持ってんじゃないかな

元インスタンスに触りたくないというよりは元インスタンスにも反映させたい
別クラスで作られたオブジェクトのインスタンスを渡してもらっていて、それをreaonlyにセットこっちのを並び替えたら同じ様に元のデータも並び替えられるって感じ

ここら辺の構成は弄れない
本当に勘弁してほしいわ
0241デフォルトの名無しさん (ワッチョイ f3f7-fDUi)
垢版 |
2017/12/26(火) 21:43:23.19ID:YcrPMu9B0
>>239
(にして$にしたらできました!有難う御座います!
0243デフォルトの名無しさん (アウアウエー Sadf-HQem)
垢版 |
2017/12/26(火) 22:15:00.14ID:Nu277XVha
車輪の再発明感全開だな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);
  }
}
0249デフォルトの名無しさん (ワッチョイ f3d5-EmoC)
垢版 |
2017/12/27(水) 17:55:28.81ID:LR8quwCc0
C#はメモリ不足でコンパイルできないことはありますか?
0256デフォルトの名無しさん (ワッチョイ f3eb-tmg3)
垢版 |
2017/12/27(水) 22:08:35.73ID:RcFlfCwd0
自前のクラスに、作成済みオブジェクトを探してオブジェクトを返すメソッドを作るにはどうすれば良いんですか?
Xamarin Androidにいうfindbyname()、UnityでいうGameObject.Find<T>()のようなものを自前のクラスにもつけたいんですが・・・・
0260デフォルトの名無しさん (アウアウウー Sa67-bqMz)
垢版 |
2017/12/27(水) 23:50:53.96ID:INWFuiTDa
>>256
Dictionaryに名前でオブジェクト登録という方法があるけど
わざわざそんな無意味なことをする意味が分からない

UWPやWPFやwindows forrmsでは
xamarinのfindbynameみたいなものわざわざ使わないでもいいのに
0262デフォルトの名無しさん (バットンキン MM93-ZbzW)
垢版 |
2017/12/28(木) 07:08:39.80ID:THqyhi+6M
データにメソッドをチェーンするのが関数型言語の特徴なのかなと解釈してるんですけど、c#は関数型言語も内包してると考えて良いのでしょうか?

で、F#は関数型専用言語という位置づけで
0265デフォルトの名無しさん (アウアウカー Sacb-ab5z)
垢版 |
2017/12/28(木) 07:43:07.29ID:yMSttuCfa
>>262
まず大前提としてメソッドチェーンと関数型プログラミングは何にも関係ない
下手にオブジェクト指向とのマルチパラダイムから入るより、まずはML系とかHaskell, Schemeみたいなちゃんとした関数型言語を触って特徴を掴むのがいいと思う
0270デフォルトの名無しさん (ワッチョイ 5fd5-7ecw)
垢版 |
2017/12/28(木) 11:30:41.15ID:MTDYAVo/0
>>249
>>251
パソコンのメモリは十分に余裕があると仮定してプログラム的な容量の限界が知りたいです。
C#は無限にコードが書きこめるということですか?
0274デフォルトの名無しさん (ワッチョイ 5fd5-7ecw)
垢版 |
2017/12/28(木) 13:29:50.10ID:MTDYAVo/0
>>271
VB6は数百万行で限界が来てコンパイルできなくなりました。
>>272
コードを千万行単位で書き込んでも大丈夫か知りたいです。
0277デフォルトの名無しさん (ブーイモ MM27-QRIm)
垢版 |
2017/12/28(木) 14:28:23.21ID:4EMpIOJ0M
>>271
コンパイラーの上限値を明記してる処理系はあるけどc#の見つからんな。
何処かにあるはず。
0278デフォルトの名無しさん (ブーイモ MM27-QRIm)
垢版 |
2017/12/28(木) 15:01:10.61ID:4EMpIOJ0M
コンパイラエラーCS1033の記述に
/debugオプションを指定した場合は16,707,556行。しない場合は268,435,454行って書いてある。
1つのソースコードファイルにそんな行数を想定してるんだw
0280デフォルトの名無しさん (ブーイモ MM27-QRIm)
垢版 |
2017/12/28(木) 15:02:46.82ID:4EMpIOJ0M
>>274
そんなサイズのVB6なんて見たことないw
0281デフォルトの名無しさん (ブーイモ MM27-QRIm)
垢版 |
2017/12/28(木) 15:06:16.70ID:4EMpIOJ0M
>>279
リンカーに上限値があるかもね。
0283デフォルトの名無しさん (ブーイモ MM27-QRIm)
垢版 |
2017/12/28(木) 15:26:24.91ID:4EMpIOJ0M
Visual Studioのエディタがハングするだろ
0290デフォルトの名無しさん (アウアウエー Sac2-LEnz)
垢版 |
2017/12/28(木) 16:52:34.19ID:BvK/JshZa
コンパイラなんて自分で書いたことも理論勉強したこともないけど、
扱える識別子の数の上限とかは当然あるんだろうなあ

もっとも、恐らく全部がオンメモリで動いてるはずのインテリセンスの限界ですら
普通のプログラマはたぶん経験してないはずで、必要ならディスクも使えるはずの
コンパイラの限界なんて実用上は無限と想定してよいんじゃないかしら
0292デフォルトの名無しさん (アウアウカー Sacb-ab5z)
垢版 |
2017/12/28(木) 17:51:47.90ID:Ub6XmzY9a
>>289
実装として問題ない性能が出たかは別として、関数型パラダイム自体は大昔からある
ラムダ計算も提唱された時期はチューリングマシンとあまり変わりなかったはず
関数型なんて要は文より式を多用する書き方ってくらいの認識でいいよ
初期Lispだって十分関数型といえる
0293デフォルトの名無しさん (ワッチョイ 1bf2-YrVP)
垢版 |
2017/12/28(木) 21:01:15.87ID:0+I+cwib0
>>256
>作成済みオブジェクトを探してオブジェクトを返す
という点だけで反応するけど、シングルトンのオブジェクトを共有したいみたいな話なら
MEFとかUnity(ゲームじゃない方)とかのDIコンテナ利用すればいいんじゃないかな。
0306デフォルトの名無しさん (ワッチョイ 460f-2YEI)
垢版 |
2018/01/02(火) 20:06:46.76ID:c6AfmmkU0
ファイル、新しいプロジェクトを選びます
Windowsフォームアプリケーション
を選択したいのですが、見当たりません

visual studio 2017インストールし、C#の勉強をしようとしています
背景が真っ黒で白地にしたいですが、表示(V)を左クリックしても背景を変更する設定が分かりません

c#本を2010年に買って、8年かかってやっとインストールする気になり…当時はvisual studio2010をインストールしてね、でしたが…
2017をインストールしました
0308デフォルトの名無しさん (ワッチョイ 460f-2YEI)
垢版 |
2018/01/02(火) 20:33:51.04ID:c6AfmmkU0
スタートボタンからblend for visual studio 2017を起動してました

vのvisual studio2017から起動したら、白背景、Windowsフォームアプリケーション(.net flamework)ボタンがありました

.NET Frameworkは外したいけと、外せないようですね
0315デフォルトの名無しさん (ワッチョイ 460f-2YEI)
垢版 |
2018/01/02(火) 23:53:32.38ID:c6AfmmkU0
まったりとした雰囲気ありがとう、皆さん
自分は古く融通が利かないタイプです

フォルダ作ってコンパイラとリンカ放り込み、パスを通してbat作ってコンパイル
エラーが出たら、エラーリストをテキストエディタで読みタグジャンプ、エラー修正…
開発環境はFD1枚で持ち運び

だから今の開発環境インストール50GBに驚愕、ソースバックアップどうするの??開発環境はノーパソごと持ち運びか?とか
visual studio2000いくつかを過去にインストールした時はOSごと落ちてOS再インストールを味わって困惑してました

奮起してゆっくり覚えます
0327デフォルトの名無しさん (ワッチョイ 9ff7-57r9)
垢版 |
2018/01/03(水) 21:40:35.60ID:4IoSL1o20
int a=2;
int b=3;
int c=9;
int d=11;
このうち10より小さいもののうちで一番大きいものを選択する(アルファベットを返す)コードはどういうふうに書けばよいでしょうか?
0329デフォルトの名無しさん (ワッチョイ 9ff7-57r9)
垢版 |
2018/01/03(水) 21:52:22.30ID:4IoSL1o20
ありがとうございます。
0331デフォルトの名無しさん (ワッチョイ 9ff7-57r9)
垢版 |
2018/01/03(水) 22:08:04.88ID:4IoSL1o20
何度もすいません
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の中のもので一番大きいものを選択する(アルファベットを返す)コードはどういうふうに書けばよいでしょうか?
0333デフォルトの名無しさん (アウアウウー Sa2f-FiVz)
垢版 |
2018/01/03(水) 22:26:46.45ID:wQKC+m+qa
処理内容を変数の名前に依存するのは悪いやり方

int aがbool a_fragに関連していると決めているのはコードを書いてる人間だけ

プログラム上は関連づけられてない
とんでもない愚かなコード
0339デフォルトの名無しさん (ワッチョイ 9ff7-57r9)
垢版 |
2018/01/03(水) 22:43:09.66ID:4IoSL1o20
ありがとうございます
自分のコードにあてはめて書いてみます
また来ます
0348デフォルトの名無しさん (ワッチョイ 9ff7-57r9)
垢版 |
2018/01/03(水) 23:59:11.68ID:4IoSL1o20
var list = new List<bool> { true, false, true, true, true, true };
Console.WriteLine(list.Count(true));

trueの数を表示させたいのですがこの場合ラムダ式はどのように書けばいいでしょうか?
0350デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/04(木) 00:08:30.14ID:dskbzAHG0
すいません…
LINQ触るの初めてなもので…
0352デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/04(木) 00:28:30.17ID:dskbzAHG0
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)
0353デフォルトの名無しさん (ワッチョイ 3bb5-CJXz)
垢版 |
2018/01/04(木) 00:36:28.14ID:uPERGx+M0
質問です
わたしはパッパラパーなりにC#を勉強してきて、自分用の初歩的なGUIアプリを作れる程度には覚えれたんですが
Pなんとかのほうが良かったんですか?
それがパッパラパーに向いてる理由をふくめて教えていただけるとありがたいです
0356デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/04(木) 00:44:43.18ID:dskbzAHG0
>>354
Tostringの後の;で
型 'System.NullReferenceException' のハンドルされていない例外が LINQtest.exe で発生しました
追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません。
と出ます
0359デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/04(木) 00:49:07.59ID:dskbzAHG0
>>358
https://ideone.com/mDt50q
こちらになります
お手数おかけしますがよろしくお願い致します。
0360デフォルトの名無しさん (ワッチョイ cb75-rVxj)
垢版 |
2018/01/04(木) 00:52:04.58ID:T+TxDQDt0
>>359
Form1メソッドはForm1クラスのコンストラクタなんだが、ここじゃなくてform1_Loadの中に書かないといけない。
デザイナーでフォームのウィンドウをダブルクリックすればform1_Loadが作成されるからその中に。
0362デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/04(木) 01:01:20.45ID:dskbzAHG0
>>361
出来ました!
有難うございます。
助かりました。
0363デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/04(木) 04:02:02.66ID:dskbzAHG0
>>334
同じ値の時はあらかじめ決められている優先順位を取りたかったのでこのコードが非常に参考になりました
有難う御座います。
優先度が高いものを上にすればいいんですね

var flaggedList = list.Where(data => data.Flag);
これだけよくわからないのですがif(true)とかと同じ様な書き方でtrueのものだけソート出来るんでしょうか?
0364デフォルトの名無しさん (ワッチョイ 4f9f-b4Jt)
垢版 |
2018/01/04(木) 05:47:57.28ID:+aPSEg6K0
上は下の省略形で下の括弧内で好きに条件をかけばいい
data => data.Flag
data => {return data.Flag;}
勿論ifも使えるしこんな感じで書きかえることもできる
data =>{
if(data.Flag){
return true;
}
else{
return false;
}}
0367デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/04(木) 16:11:37.44ID:dskbzAHG0
レス有難う御座います。
>>334
でFlagが全てfalseだった場合止まってしまうので、mavValueOwnerKeyに空である表示をしたいのですがどうすればいいでしょうか?
0368デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/04(木) 16:14:27.34ID:dskbzAHG0
list.Countで場合分けしてみます
0370デフォルトの名無しさん (ワッチョイ ef9b-uQO5)
垢版 |
2018/01/05(金) 14:35:10.83ID:vfHtPi/n0
ある文字列に特定の文字列が含まれていれば別の文字列に置換する、という処理を行いたいんですが
だぜ→です
ですわ→です
といった感じの置換したい文字列が数百パターン存在する場合はひとつひとつ置換を試していくしかないのでしょうか…?
0372デフォルトの名無しさん (ワッチョイ ef9b-uQO5)
垢版 |
2018/01/05(金) 14:51:45.66ID:vfHtPi/n0
>>371
基本的にはreplaceを使うことになると思うのですが、例えば
'今日はほんといい天気だぁ〜〜〜!!'
という文字列に対して
だぜ→です
だぁ→だ
ほんと→ほんとうに
といった変換ルールが複数ある場合は
ひとつひとつreplaceをかける(あるいはループで変換ルールすべてを試す)しかないのかなぁと思いまして

要するに実行速度が気になっているのです
0384デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/08(月) 18:15:27.77ID:N8MhEzoU0
"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)
の様な結果を返すメソッドを作りたいのですが
引数の数が決まっていないメソッドを作るにはどうすればいいのでしょうか?
0390デフォルトの名無しさん (ワッチョイ fb03-wNfw)
垢版 |
2018/01/08(月) 19:00:26.28ID:Jvqg6B4Y0
質問するより前にまず自分で一通り勉強した結果がお前らなのだから
俺は自分で勉強するより前に質問する方を選ぶよ
0399デフォルトの名無しさん (ワッチョイ 9fd2-Gfid)
垢版 |
2018/01/08(月) 21:45:51.25ID:O8jIltI+0
ここは
>「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
て、ことだからねえ。
>>1 が気にいらないなら自分で自分の主義にあるスレを立ち上げればいいだけ。

検索するにも適切なキーワードを思いつけなくて1日悩み続けた挙げ句に、聞いたら一瞬で終わるなんて事もあるし。
今回のは簡単な方だったみたいだけど。
0400 ◆QZaw55cn4c (ワッチョイ 1f60-1EiW)
垢版 |
2018/01/08(月) 21:55:49.50ID:F+Qn6y7R0
>>399
「VS2017 のプロジェクト(P)→プロパティ(E)のスタートアップオブジェクト(O) に相当する
eclipse や intelliJ のメニューってなんですか」
と、今も探しているが、そもそも適切なキーワードが思いつかない

自分の話ですまん‥
0401デフォルトの名無しさん (アウアウエー Sa3f-iSeT)
垢版 |
2018/01/08(月) 22:07:40.25ID:fM4iC4afa
(1) 勉強して理解できなかった疑問点や調べても解決しなかったことを質問する
のと

(2) 面倒くさいからとにかくお前ら手取り足取り教えてくれ

では全然違うと思うよw

誰でも変な思い込みや勘違いをすることがあるから、(1)であるならくだらない質問でも問題ないと思う。
でも(2)は見ててあんまり気分がよくないなと思う人もいると思うけどね。

っていうかそういう道徳的話はともかく、それって学習効率悪いよね絶対。
優しさ云々はそういう意味
0402デフォルトの名無しさん (ワンミングク MMbf-vnDV)
垢版 |
2018/01/08(月) 22:11:51.21ID:4Iuopxo1M
くだらない調査に時間かけるより聞いた方が良い
答える方もグダグダ言わずに知ってることを教えてやれ
そういうネットワークができれば社会全体の生産性が上がるんだよ
日本にはなくて外国には当たり前のようにあるシステムだ
日本人は性格が排他的すぎるからITに向いてない
だから負けるんだ
0403デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/08(月) 22:29:20.81ID:N8MhEzoU0
>>385
>>386
>>387
有難う御座います。
後でやってみます。

入門書は一冊終わらせてはいるのですが作りたいものを作ろうとした時、その本に載っていないことの方が多くて…
ここのスレの方々のおかげで今作っているプログラムもだいぶ形になってきました
非常に助かっています
可変長引数についても一応事前に調べて存在は知っていましたが説明を読んでもいまいちわからなく
もっと簡単な方法があるかも…と思って聞いてみました
でもやっぱりparamsと答えられたのでそれがベストなんだなと知ることが出来て
説明をもう一度読み直したらなんとか理解出来ました
0404デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/08(月) 22:32:02.44ID:N8MhEzoU0
>>394
ありがとうございます。
参考にします。
0405デフォルトの名無しさん (ワッチョイ 9fb3-TPPA)
垢版 |
2018/01/08(月) 22:34:04.87ID:7hYpzMEE0
くだらん質問だと思うならスルーするなり他のスレに行けよ
ここは

> 「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。

だよ
0406デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/08(月) 22:40:28.65ID:N8MhEzoU0
ちなみにこういう書き方はできるのでしょうか?
int keisan(params string[] xs,int x)

int keisan("one","two","three",2)
0408デフォルトの名無しさん (ワッチョイ 4f9f-b4Jt)
垢版 |
2018/01/08(月) 22:45:14.32ID:zg3P5Xfz0
>>406
paramsは最後のみ
エラーでるから試してみるといい

>>405
スルーも何も質問は2分後に解決してる
その後はこういったプログラミング初心者対して別アプローチをした方がって話で質問とは関係ないと思うんだが
0409デフォルトの名無しさん (ワッチョイ fb03-wNfw)
垢版 |
2018/01/08(月) 22:51:04.77ID:Jvqg6B4Y0
>>407、408
よう初心者クン
で何を教えて欲しいのかね?
0414デフォルトの名無しさん (ワッチョイ bbf7-k1u0)
垢版 |
2018/01/09(火) 05:02:51.20ID:A/ESCl++0
可変長は一種類だけで、最後に定義しないといけないみたいですね
無事に機能を実装できました。
質問に答えて下さった方有難う御座いました。
0417デフォルトの名無しさん (ガックシ 067f-rVxj)
垢版 |
2018/01/09(火) 08:58:27.18ID:jhkCquMi6
>>416
hoge(arg=1, args=2, arcs=3, n=2)

argsの配列感がない上に1,2,3っていう順番付けが曖昧

hoge((arg=1, 2, 3,) n=2)

こんな文法を作ったとしても、もう配列で良いよねってなる

説明させんなよメンドくせえな
0420デフォルトの名無しさん (ブーイモ MM0f-jqvb)
垢版 |
2018/01/09(火) 12:48:02.08ID:xZogmC5hM
>>419
同意する
0422デフォルトの名無しさん (ガックシ 067f-rVxj)
垢版 |
2018/01/09(火) 12:59:33.58ID:jhkCquMi6
>>421
無理矢理でもやってるやつもあんだな。

ま、>>407
「ちょっと考えれば分かるだろ質問すんな」じゃなくて、
『は?なんで可変長だけ順番変えねえの?キモッ。』って思われるかもしれないから、納得できるように付け加えただけな。
0424デフォルトの名無しさん (ワッチョイ bbeb-nOrU)
垢版 |
2018/01/09(火) 18:29:21.69ID:TMj71yN00
async/awaitを使った際の実行の流れの図があったら誰か見せてくれんかな
0427デフォルトの名無しさん (ワッチョイ bbeb-nOrU)
垢版 |
2018/01/09(火) 18:57:43.08ID:TMj71yN00
ありがとうございます
図はよくわからなかった点も多いので、ゆっくり記事を読んできます
0431デフォルトの名無しさん (アウアウエー Sa3f-iSeT)
垢版 |
2018/01/10(水) 01:37:54.23ID:9VtjyWrsa
↑の人はたぶんコードと図で1セットになってることに気付かずに
図だけ見てそう言ってるか、あるいはなんか思いっきり勘違いしてるだけだと思うから
安心して参考にしていいと思うw
0433デフォルトの名無しさん (アウアウウー Sa8f-aKZ8)
垢版 |
2018/01/10(水) 01:55:51.66ID:rjHbKDY9a
>「メソッドを一時中断し、awaitされた処理の完了を待って残りの処理を再開する」
非常にグレーな表現

>@に続けてAの処理が別スレッド上で開始される
非常にグレーな表現

HevyWork()の中身が必ずすべて別スレッド上で行われてるわけではない
0439デフォルトの名無しさん (ワッチョイ 9f7c-Ogju)
垢版 |
2018/01/10(水) 05:30:31.38ID:t7WvUySz0
UnityってC#どのくらい使えると触れるの?
0440デフォルトの名無しさん (ワッチョイ 0f80-41Gj)
垢版 |
2018/01/10(水) 07:12:09.78ID:8FRtzSYP0
初めてのJavaScript 第3版、オライリー、2017

JS には、async/await が無いから、
この本では、generator runner の仕組みを説明している。
co, Koa というライブラリを使う

非同期処理は異なるコンテキストで、
別のスレッド・プロセスだから、どこを実行しているのか分からない。
実行順番も制御できないし、例外処理も使えない

generator runner は非同期処理を、yield で待つように作る。
これにより、非同期処理を同期処理のコンテキストに当てはめるから、
実行順番を制御できるし、例外処理も使える

try{
yield promise 非同期処理
} catch {
}
0441440 (ワッチョイ 0f80-41Gj)
垢版 |
2018/01/10(水) 07:52:38.82ID:8FRtzSYP0
異なるコンテキストとは、同じソースコードに書いていても、
OS から見ると、別のプロセス・スレッド・実行単位になる

OS は、1秒間に数万回も、実行単位を切り替える(コンテキストスイッチ)から、
今、別の実行単位の、どのコードが実行されているかは、全く分からないし、制御もできない

別の実行単位に対してできることは、
タスクの終了を待つか、タイムアウトするか、タスクを止めてもらうかだけ
0446デフォルトの名無しさん (アウアウカー Sa4f-Sycn)
垢版 |
2018/01/10(水) 15:47:45.43ID:0NEBj+IAa
C#始めて1カ月程度の初心者です

trackbarの値をBackgroundWorkerに渡して、その値を使って別スレッドで画像を生成して、whileとReportProgressでtrackbarの変更に合わせて画像を表示していくプログラムを作っているんですが、

trackbarの値をBackgroundWorker_DoWorkに渡すのってどうやるんですか?

別スレッドなので、trackbar.Valueでそのまま使う事ができなくて…
デバッグ無しの実行ならよく分からないですが、そのまま使っても実行できて上手く画像表示されている事が確認できたので、
スレッド間でtrackbarの値を渡すのだけが上手くいかなくて悩んでます
0447デフォルトの名無しさん
垢版 |
2018/01/10(水) 15:54:42.58
トラックバーの値変更イベントのイベントハンドラでフォームのフィールドにトラックバーの値を保持しておく
それをバックグラウンドワーカーで読み取る
0448デフォルトの名無しさん (ガックシ 067f-Sycn)
垢版 |
2018/01/10(水) 16:15:46.81ID:+iIpBJgq6
>>447
それって両スレッド共通の変数を作っておいてトラックバーが動いた時のイベントハンドラでその変数に値を保存していくって事ですよね?
それも試したんですが、よくわからないエラーが発生して動作が止まってしまいました
0449デフォルトの名無しさん
垢版 |
2018/01/10(水) 16:16:37.99
それか、Invokeでアクセスする



// コントロールが破棄されてないかチェック
if (trackbar.IsDisposed)
return;


var value = 0;

// Invokeが必要かチェック
if(trackbar.InvokeRequired) {
Invoke((MethodInvoker)(() => {
value = trackbar.Value;
}));
} else {
value = trackbar.Value;
}
0450デフォルトの名無しさん
垢版 |
2018/01/10(水) 16:19:33.71
>>448
じゃあ、値変更イベントハンドラ内でトラックバーの値をフィールドに設定するところと、バックグラウンドワーカーでそのフィールドから値を読み出すところを、lock{...}で囲む
0451デフォルトの名無しさん (ブーイモ MM7f-jqvb)
垢版 |
2018/01/10(水) 16:24:33.20ID:yZjeHBZDM
その処理は別スレッドでないと出来ないのか?
という身もフタもない突っ込み
0453デフォルトの名無しさん (ガックシ 067f-Sycn)
垢版 |
2018/01/10(水) 16:33:27.10ID:+iIpBJgq6
>>450
ちょっと用事ができたので今は試せませんが、両方試してみます

>>451
割と重い処理なので、同じスレッドのトラックバーのイベントハンドラで処理を行うと、トラックバーの動きがかくついてしまったので、分離したいんです
0455デフォルトの名無しさん (ガックシ 067f-Sycn)
垢版 |
2018/01/10(水) 17:01:05.31ID:+iIpBJgq6
>>454
課題でバックグラウンドワーカー指定されてたので、
それ初めて聞いたんですが、同じような事が出来るんですか?
0457デフォルトの名無しさん (ガックシ 067f-Sycn)
垢版 |
2018/01/10(水) 17:17:37.84ID:+iIpBJgq6
>>456
それってバックグランドワーカーを開始する時に値を渡す事ですか?
WhileとReportProgressで画像表示していて、バックグランドワーカーは止まらないので開始時の値を引き渡すのだけでは、トラックバーの値変更に対応できなさそうですが、できるんですか?
的外れな事言ってたらすみません。
まだ学び始めたばかりでわからない事だらけなので

ちなみに画像生成に使うトラックバーは7本あります
0459デフォルトの名無しさん (ワッチョイ 0f9a-+W2v)
垢版 |
2018/01/10(水) 17:42:20.90ID:8CBJwk4h0
>>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
>トラックバーの値変更に対応できなさそうですが
リアルタイムに反映は理屈から言うと無理
処理量が少なければそう見えるようにも作れるから画像が大きければトラックバー動作中は縮小画像で
0460デフォルトの名無しさん (アウアウエー Sa3f-iSeT)
垢版 |
2018/01/10(水) 17:43:56.21ID:ZlAR0fHNa
>>455
>>446と同一人物?

仕様の詳細が分からんので断定はできないけど、
断片的な情報から判断すると

(1) 無限ループでTrackbar.Valueをポーリングして

(2) 変化を検出したら画像生成を開始

(3) 完了したらBackgroundWorkder.ReportProgressを呼んで
UIスレッドで画像を表示

こういうこと?
もしこうなら、スレッドで無限ループ回すって発想がたぶん間違ってる。

諸事情でBackgroundWorkderを使う必要があるにしても
Trackbar.ValueCangedイベントでBackgroundWorker.RunWorkerAsyncを
呼んで都度画像生成処理を開始するようにした方がいいんじゃないの?

それならTrackbar.ValueはRunWorkerAsyncの引数で渡せる
0462デフォルトの名無しさん (アウアウエー Sa3f-iSeT)
垢版 |
2018/01/10(水) 17:54:40.44ID:ZlAR0fHNa
ただこの場合でも、ValueCangedはたぶんユーザーがつまみを動かかしている間は
逐次的にイベントが発生しちゃうと思うから、BackgroundWorker.RunWorkerAsyncを
コールするのは、例えばValueCangedが発生しなくなってから1秒後、みたいな工夫がたぶん必要になるのかな

知らんけど
0463デフォルトの名無しさん
垢版 |
2018/01/10(水) 18:00:54.81
>>459
起動時にRunTaskWorkerを呼び出す。

doWorkでは無限ループでトラックバーの値の変更を監視

こういうことだと思う。
知らんけど。
0464デフォルトの名無しさん (ワッチョイ 39f7-RcqZ)
垢版 |
2018/01/11(木) 01:51:14.39ID:fK8uCW920
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";を実行しない
というプログラムを作りたいのですが
0465デフォルトの名無しさん
垢版 |
2018/01/11(木) 02:26:04.02
これじゃダメ?
―――――――――
...
var error = testB();
if(error) return;
...
―――――――――
public bool testB(){
var error=false;
error=true;
if(error) return true;
retrun false;
}
―――――――――
0466デフォルトの名無しさん (ワッチョイ 39f7-RcqZ)
垢版 |
2018/01/11(木) 02:53:49.75ID:fK8uCW920
>>465
やはりtestBメソッドの後で判定するしかないですよね。
ありがとうございます。
0470デフォルトの名無しさん
垢版 |
2018/01/11(木) 09:58:05.61
あと、多分FullRowSelectプロパティをオンにしないと行をクリックしたときに一列分しか色が付かない
0472デフォルトの名無しさん (ワッチョイ 4a0f-nl4B)
垢版 |
2018/01/11(木) 18:47:50.43ID:9ePH9NvT0
>>469,>>470
ありがとうございます
1つのコントロールで実現できるのですね
作るときにFullRowSelectも意識してみます
0473デフォルトの名無しさん (ワッチョイ 9ee7-p0TQ)
垢版 |
2018/01/12(金) 02:16:04.35ID:gpUPMxg50
今ってC#なら何でもできる時代か?webページもゲームもWindowsアプリもandroidも
0477デフォルトの名無しさん (ブーイモ MMc9-XZ0y)
垢版 |
2018/01/12(金) 09:23:53.14ID:4yLgM4ukM
アプリ開発言語としてはWebのフロントエンドを除けばほぼ何でもできるので
目下最も万能な言語であることには違いないが、道具を前提にして物事を考える癖がつくと頭悪くなるから一つに拘るのはお勧めしないな
0481デフォルトの名無しさん (ブーイモ MM0a-EosG)
垢版 |
2018/01/12(金) 09:54:47.82ID:1+438Ej9M
>>477
WebのフロントエンドはhtmlとJavaScriptという道具を前提とするしか無いが。
0482デフォルトの名無しさん (ブーイモ MM0a-EosG)
垢版 |
2018/01/12(金) 09:58:40.77ID:1+438Ej9M
>>480
騙されたと言うかJavaScriptの進化が速くてJavaアプレットもオワコン
0484デフォルトの名無しさん (スッップ Sd0a-6CSh)
垢版 |
2018/01/12(金) 12:34:17.17ID:OH7R1+qFd
でぇじょうぶだ。wasmがくる。
0487デフォルトの名無しさん (ワッチョイ 9ee7-p0TQ)
垢版 |
2018/01/12(金) 14:42:53.15ID:VxcDYdZu0
職につくために限定的な開発だけじゃあ厳しいなってC#なら何でも作れるようにならないとなって思って
0490デフォルトの名無しさん (ササクッテロラ Spbd-euJe)
垢版 |
2018/01/12(金) 16:00:59.66ID:C/maxB41p
スタブってのがほんとに分からん…
どんな知識が必要でどんな風に使うのかイメージ出来ん
DAO?とかの概念が自分になくてSQLを扱う部分とロジックがごっちゃになってるとそもそもスタブでなんとかしようってレベルですらないのかな
なにか猿でも分かるような記事とかないですか…
0491デフォルトの名無しさん (ブーイモ MM81-EosG)
垢版 |
2018/01/12(金) 16:11:30.81ID:mLvyYLexM
>>490
スタブってテスト用のダミーの事?
0492デフォルトの名無しさん (アウアウウー Sa21-53ns)
垢版 |
2018/01/12(金) 18:24:00.26ID:C2fpfp9ga
>>490
スタブはテストのためのダミーだよ

完成まで一時的にいれておいてビルド通したり
テストで実際の環境に影響をおよぼさないために使う

テストしない
完成まで途中で実行しない
ならいらない
0498デフォルトの名無しさん (ワッチョイ 4aa2-UJUP)
垢版 |
2018/01/13(土) 01:59:49.10ID:zim/eiwV0
sqlserverからレコード取得する処理で、dataReaderを別関数に渡して、
そっちでdataReader.Iten("hogehoge")するのってありですか?

一部のカラム名だけが異なる類似レコードの取得処理をまとめたいなあと
0503デフォルトの名無しさん (ワッチョイ 66e8-QpsD)
垢版 |
2018/01/13(土) 15:48:07.46ID:J9QLRP4o0
ItemItemって考えてるとあいてむってなんだっけ?ってなるよね
0508デフォルトの名無しさん (ワッチョイ 969c-zueB)
垢版 |
2018/01/13(土) 18:22:41.37ID:2EuaVelH0
一時期ORMが流行ったがメモリ食いすぎと重すぎて今じゃBI以外で使う機会がない
軽量wrapperを挟んでクエリ直書きの負担を軽減するというのが最近のスタイル
有名なのはDapper、Massive、PetaPocoとか
0511デフォルトの名無しさん (ワッチョイ 5e20-y5e1)
垢版 |
2018/01/14(日) 11:58:36.30ID:6wMaD5Pe0
質問させてください
まず、やりたいことは以下です
@c#からネイティブライブラリの関数を呼び出す
A引数としてマネージ側で実装した関数を渡し、ライブラリ側でその関数を呼び返す

Aでマネージ関数と一緒にマネージドオブジェクトを渡したいのですが、そのオブジェクトをGC対象から除外する方法が分かりません
GCHandle.Alloc では blittable なオブジェクトでないとダメだと怒られます
List<int> とかを渡したいのですが…… どうしたらいいでしょうか?
0512デフォルトの名無しさん (ワッチョイ 3d23-XZ0y)
垢版 |
2018/01/14(日) 12:44:23.20ID:DNkTPWoH0
>>511
普通にデリゲートをマーシャリングして渡す
呼び出す先が同期的な関数ならGCは考慮不要
非同期的にコールバックしてくるならデリゲートをフィールドに入れておいてGCを防ぐ
デリゲートのマーシャリングは非常に優秀で、メソッド内から外のローカル変数を参照してたりインスタンスフィールドを参照してたりしても問題ない
だからList<int>とかをわざわざ渡す必要はない
0513512 (ワッチョイ 3d23-XZ0y)
垢版 |
2018/01/14(日) 12:45:29.88ID:DNkTPWoH0
補足
メソッドから参照されてるオブジェクトはデリゲートが生きてる限りはGCされないので、
GC対策としてはデリゲートだけフィールドで保持しとけば十分
0514511 (ワッチョイ 5e20-y5e1)
垢版 |
2018/01/14(日) 13:56:18.92ID:6wMaD5Pe0
>>512
ありがとうございます!
解決しました。変数をキャプチャしてるラムダ式でもOKなんですね
これって実行時にコードを生成してるんでしょうか?
0515デフォルトの名無しさん (ワッチョイ 39f7-RcqZ)
垢版 |
2018/01/15(月) 08:04:36.45ID:wzT+kwGj0
visualstudio2015でifの条件式の部分が
if(a>1&&
b>1&&
c>1&&
d>1)
となっているのを
if(a>1&&
b>1&&
c>1&&
d>1)
ときれいに揃える方法はないでしょうか?
ctrl+k,ctrl+dではこの部分だけきれいにならず困っています
0516デフォルトの名無しさん (ワッチョイ 39f7-RcqZ)
垢版 |
2018/01/15(月) 08:05:35.73ID:wzT+kwGj0
if(a>1&&
b>1&&
c>1&&
d>1)
となっているのを
if(a>1&&
__b>1&&
__c>1&&
__d>1)

_はスペースです
0518デフォルトの名無しさん (ワッチョイ 39f7-RcqZ)
垢版 |
2018/01/15(月) 08:34:59.05ID:wzT+kwGj0
条件式がたくさんある場合はどうすれば見やすく書けるのでしょう…
横に伸びると見にくくて
0519デフォルトの名無しさん (ワッチョイ 6681-/vYA)
垢版 |
2018/01/15(月) 08:44:15.19ID:6fJ2ahWY0
自分にあったフォーマッタを
自分で開発すればいいんじゃないの?
出来合いで我慢できないならそれしかないでしょ
幸いにもあなたはプログラマーだ
頑張れ
0520デフォルトの名無しさん (ワッチョイ aad4-1Ifv)
垢版 |
2018/01/15(月) 09:00:59.11ID:vPE1QZCU0
if(a>1&&
b>1&&
c>1&&
d>1)
となっているのを
if(a>1&&
__b>1&&
__c>1&&
__d>1)

_はスペースです
0521デフォルトの名無しさん (ワッチョイ aad4-1Ifv)
垢版 |
2018/01/15(月) 09:02:06.54ID:vPE1QZCU0
if(a>1&&
b>1&&
c>1&&
d>1)
となっているのを
if(a>1&&
__b>1&&
__c>1&&
__d>1)

_はスペースです
0523デフォルトの名無しさん (ワッチョイ 39f7-RcqZ)
垢版 |
2018/01/15(月) 09:34:40.52ID:wzT+kwGj0
522

それでもいいんですが
____if(a>1
&&b>1
&&c>1
____&&d>1)
貼り付け繰り返してるうちにこうなっちゃったりしてるんですよね
0526デフォルトの名無しさん (ワッチョイ 39f7-RcqZ)
垢版 |
2018/01/15(月) 14:27:32.00ID:wzT+kwGj0
すっぱい葡萄
手に入れたくてたまらないのに、人・物・地位・階級など、努力しても手が届かない対象がある場合、その対象を「価値がない・低級で自分にふさわしくない」ものとみてあきらめ、心の平安を得る。
フロイトの心理学では防衛機制・合理化の例とする。
また、英語圏で「Sour Grapes」は「負け惜しみ」を意味する熟語である。
wikiより
0527デフォルトの名無しさん (ワッチョイ 39f7-RcqZ)
垢版 |
2018/01/15(月) 14:28:13.93ID:wzT+kwGj0
誤爆
0533デフォルトの名無しさん (アウアウエー Sa52-UnGo)
垢版 |
2018/01/15(月) 23:51:57.61ID:NNVQY+KWa
もう書いてる人いるけど、こういうのは結局自分の(ほとんどの場合はくだらない)
こだわりの方を修正する方が早い。

っていうか頭を揃えたら見やすいって感覚はちょっと理解不能
間違いなくただの思い込みだと断言できる
0542デフォルトの名無しさん (ブーイモ MM0a-EosG)
垢版 |
2018/01/16(火) 16:15:22.10ID:CjJlQTmDM
それはスタティックおじさん誕生じゃないのかと突っ込む
0544デフォルトの名無しさん (ワッチョイ 2ab3-1I1E)
垢版 |
2018/01/16(火) 22:11:32.35ID:augwvgTX0
string型の文字列を配列で持ちたいときはlistboxに
文字列をコピーしていく方法よりカッコいい方法ある?
0546デフォルトの名無しさん (ワッチョイ 11cc-6CSh)
垢版 |
2018/01/16(火) 22:21:16.14ID:6G3H5uZu0
stringの文字列を配列で持ちたいというのはstring[]ってこと?

listboxに文字列をコピーしていくとは?もうちょっと詳しく。

カッコいい方法というのはC#のコードの書き方という意味で?
0550デフォルトの名無しさん (ブーイモ MMc9-EosG)
垢版 |
2018/01/17(水) 12:22:20.17ID:kFuDYWJQM
エスパーはよ
0552デフォルトの名無しさん (ブーイモ MMc9-EosG)
垢版 |
2018/01/17(水) 12:30:08.90ID:kFuDYWJQM
みんなで使える優れたフレームワークはオレオレフレームワークと呼ばれない
0555デフォルトの名無しさん (アウアウウー Sa21-53ns)
垢版 |
2018/01/17(水) 13:07:25.77ID:WDfY9ZKSa
>>549
何について言ってるのか理解しづらいけど
SQLを外に出すのは悪いことなのでそういうライブラリやフレームワークはない

SQLってただの文字列でしかなくてコンパイル時に間違いがわからない
それを埋め込んでテストを繰り返すことでバグの可能性を限りなく低くしてる

でもORMなどを使っても必ずバグを洗い出せるわけじゃない
0558549 (バッミングク MMb1-TP79)
垢版 |
2018/01/17(水) 17:56:42.19ID:hVz/jIKcM
質問が下手ですみません

javaのibatisのようなxmlでクエリを外部ファイルに置くようなフレームワークはC♯にあるのでしょうかという質問でした

自分は文字列でコード上に直接クエリを書いており、悪手をやっているのではと不安になり質問しました

ご教示よろしくお願いします
0563549 (ワッチョイ 5e76-TP79)
垢版 |
2018/01/17(水) 18:33:33.76ID:2pD1HrQI0
むしろクエリを外部ファイルに書き出すのは古いのですね
参考になります
0564デフォルトの名無しさん (ワッチョイ 25b3-hYQh)
垢版 |
2018/01/18(木) 15:36:13.66ID:UDaQCIW60
すみません。この場を借りて質問させていただきます。
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 親子の縁はどのように切ったら良いのでしょうか?
よろしくお願いいたします。
0567デフォルトの名無しさん (ワッチョイ 25b3-hYQh)
垢版 |
2018/01/18(木) 19:23:42.55ID:UDaQCIW60
ぜんぜんわかりまへん。。
0568デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/18(木) 19:44:28.00ID:64hUXuXa0
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すると落ちるが、何とかならないものだろうか?
0570愛知人
垢版 |
2018/01/18(木) 19:54:23.83ID:9519fNi8
知らんけどusingステートメントでよくね
0572デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/18(木) 20:15:34.43ID:64hUXuXa0
あっそうか Nullで検出できたのか。ありがと。Useingってのもあるんだね。

開発モードではエラーしないのに、Setupファイルでインストールすると、書き込み禁止がかかっているような
エラーになるんだがなにが原因だろ。
System.UnauthorizedAccessException: パス 'C:\Program Files (x86)\test14\あああああ.ini' へのアクセスが拒否されました。
0575デフォルトの名無しさん (ワッチョイ 25b3-GP+B)
垢版 |
2018/01/18(木) 20:29:36.57ID:YPPczFY+0
フォームのデザイナが以下のエラーを吐くのですがどうすればいいですか。

"***.dll"を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E)

プロジェクトは以下の4つです。
MainForm(C#)
MainView(C#) (MainFormの中でNewされる。DLLsを利用する。)
DLLs(C#) (DLLImportする。)
Drawer(C++) (DLLExportする。dllファイルはビルド後に実行ファイルがある場所にコピーされる。)

コールスタックでは、MainViewのDLLsを使用しているところでエラーがでており、
それをコメントアウトすると、デザイナが表示されます。
0576デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/18(木) 20:50:42.63ID:64hUXuXa0
>WindowsフォルダやProgramFilesフォルダに書き込むには管理者権限が必要

ありがとう。
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
をいれたら動き出した。しかし立ち上げ時に毎回「この不明なアプリが実行することを許可しますか?」って
Windowsの確認画面がでるんだが、なんとかならないのでしょうか?
0581デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/18(木) 23:30:22.02ID:64hUXuXa0
管理者権限でいつも立ち上げるようにすると確かにアクセスできるようになった。
しかしインストール先 パス を'C:\Program Files (x86)、これをやめれば管理者権限で立ち上げる必要はないのでは?
0582デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/18(木) 23:33:43.60ID:64hUXuXa0
>コードサイニング証明書取得して、プログラムに署名。

最高だ。これはいい。

とおもったら金がかかるのか? 残念。
0583デフォルトの名無しさん (ワッチョイ 2306-GP+B)
垢版 |
2018/01/18(木) 23:58:27.78ID:x+1bimBw0
>>582
普通はアプリケーションフォルダにデータを置きます
てか、設定ファイルは.iniを使わなくなって10年以上経ちます
[C# 設定]で、普通の設定ファイルの使い方調べた方がいい
0585デフォルトの名無しさん (アウアウエー Sa93-2BHe)
垢版 |
2018/01/19(金) 00:13:18.76ID:S8TUMubta
最近流行らないと思うけど、バイナリと同じ場所に設定ファイルを置くのは
バイナリ自体をUSBメモリに入れて持ち歩くような特殊な用途ぐらいだよね

iniファイルでも悪くないと個人的には思うけど、せっかく便利なシリアライザがいろいろあるのに
わざわざ機能的に劣るiniファイルを使う意味はないわなあ

読み書きするコードも自分で書かなきゃならんし
0586デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/19(金) 00:21:35.85ID:reZAGsN60
AppDataってVsのSetupプロジェクトでは作ってくれないですね。Apllicationフォルダーに設定用のデータも入れています。

「iniをつかわない」ってのがあまり意味がわかりませんがいま使っているのは単なるテキストファイルです。
(*.iniという名前にしていますが、)StreemWriterで書いています。XMLに落とすのが普通なのでしょうか?
 しかし単に改行だけのファイルで十分なのでXMLにはしていません。
XMLは設定ファイルとしてはわかり難いですし無駄が多いように思います。
それにエディターで気楽に追加ができないです。
0587デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/19(金) 00:26:38.77ID:reZAGsN60
>niファイルでも悪くないと個人的には思うけど、せっかく便利なシリアライザがいろいろあるのに
>わざわざ機能的に劣るiniファイルを使う意味はないわなあ

慣れなんですかね。どうも直観的にわかり難いように思います。だからJsonとかを使う人も多いんではないですか?
0588愛知人
垢版 |
2018/01/19(金) 00:30:36.53ID:5Myz+qXq
VisualStudioの機能だが
0589デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/19(金) 00:32:41.68ID:reZAGsN60
”設定”, 20,
とかをStreemReaderで読みこむと何で ””設定””になるんですかね。ストリングにするためにわざわざ「”」をNULLにReplaceしています。
なんかいい方法はないですかね。
0591デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/19(金) 00:45:09.29ID:reZAGsN60
>VisualStudioの機能だが

・AppDataフォルダ:このフォルダは「C:\Users\ユーザー名\AppData」にあります。ほとんどのプログラムの設定ファイル
はここに置かれています(サブフォルダ「Roaming」の中)。プログラム名か開発企業名のフォルダの中に、設定ファイルや
関連データが保存されていますので、フォルダごとバックアップしておきましょう。

こういうもののようですね。だからSetupプロジェクトにはここに入れる設定データのフォルダーがあってしかるべきですがない?みたいですね。
0592デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/19(金) 00:46:26.55ID:reZAGsN60
すいません。ありました。w
0594デフォルトの名無しさん (アウアウウー Sad9-weOF)
垢版 |
2018/01/19(金) 01:25:20.86ID:LT72Z3Kia
バイナリと同じフォルダにiniファイルだと…

アプリケーション1つにつき設定が一個しかないのでユーザーが複数いると困る
たとえば年賀状ソフトで差出人が全てのユーザーで一つしか設定できない
0597デフォルトの名無しさん (ワッチョイ 3deb-v7nw)
垢版 |
2018/01/19(金) 05:47:10.29ID:FgdJ6DNZ0
すまんが、列挙型って関数の引数の型に指定することはできないの?
enum A {B, C ,D};
void E(A a){}//ここでエラー
これを書く事ができれば、エディタのアシストが効きまくってミスが減る気がするんだけど・・・・・
0602デフォルトの名無しさん (ワッチョイ 03eb-x16F)
垢版 |
2018/01/19(金) 15:16:19.49ID:6h+BHP540
Windows Form のコントロールたちって、ここ10年くらい全くもって変わり映えしてない気がするんだけど
もう改善する気がないのかねぇ

グレープシティ壊滅させるまでやらずとも
テキストボックスの縦位置とか枠線スタイルとか複数列コンボとか、そのくらい対応してくれてもいいと思うんだけど
0609愛知人
垢版 |
2018/01/19(金) 23:45:07.67ID:5Myz+qXq
線なんか引くか?
無い物は使わなくてよくね?
0612デフォルトの名無しさん (ワッチョイ 0b81-pCZf)
垢版 |
2018/01/20(土) 00:20:13.00ID:1eaJngIj0
MSがUWPの宣伝しているのを見る度に
ユニバーサルプラットフォームっていうけど
お宅の会社ってPC以外のプラットフォーム持ってましたっけ?
って煽りたくなる
0616デフォルトの名無しさん (ワッチョイ 630f-GP+B)
垢版 |
2018/01/21(日) 06:37:48.04ID:eh2o3Efy0
解像度2560×1440のモニタを使っているのですが、Formアプリの解像度が合いません。
原因はサイズを125%に拡大していることで、通常の倍率に戻すとぼやけません。
FormのAutoScaleModeをDpiに設定してみましたが改善されませんでした。
対策をご存知の方がいましたら教えてください。
0621愛知人
垢版 |
2018/01/21(日) 12:27:01.84ID:w5iluM1L
つまり他のソフトもボヤけてるんだな。
XPExplorerインストールすればいいのに。
0622デフォルトの名無しさん (ワッチョイ 630f-Qwpo)
垢版 |
2018/01/21(日) 19:16:00.62ID:eh2o3Efy0
>>621
さっそくインストールしました
ありがとうございます!
0623デフォルトの名無しさん (ワッチョイ 630f-Qwpo)
垢版 |
2018/01/21(日) 19:17:14.71ID:eh2o3Efy0
早速インストールしたら好調でした
ありがとうございます!
0624デフォルトの名無しさん (ワッチョイ 630f-Qwpo)
垢版 |
2018/01/21(日) 19:18:01.63ID:eh2o3Efy0
>>621
早速インストールしたら好調でした
ありがとうございます!
0625デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
垢版 |
2018/01/22(月) 01:46:46.64ID:B9qWH8zv0
>>621
早速インストールしたら好調でした
ありがとうございます!
0626デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
垢版 |
2018/01/22(月) 01:47:44.83ID:B9qWH8zv0
>>621
早速インストールしたら好調でした
ありがとうございます!
0627デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
垢版 |
2018/01/22(月) 01:48:45.74ID:B9qWH8zv0
>>621
早速インストールしたら好調でした
ありがとうございます!
0628愛知人
垢版 |
2018/01/22(月) 01:49:30.11ID:f1RuTEDX
うっせーよカス
0629デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
垢版 |
2018/01/22(月) 01:50:19.37ID:B9qWH8zv0
>>621
早速インストールしたら好調でした
ありがとうございます!
0630デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
垢版 |
2018/01/22(月) 01:51:06.43ID:B9qWH8zv0
>>621
早速インストールしたら好調でした
ありがとうございます!
0631デフォルトの名無しさん (ワッチョイ a3d4-4jNr)
垢版 |
2018/01/22(月) 01:52:13.61ID:B9qWH8zv0
>>621
早速インストールしたら好調でした
ありがとうございます!
0633デフォルトの名無しさん (ワッチョイ 5bd6-pQa0)
垢版 |
2018/01/22(月) 15:17:28.34ID:rsQqa0Zv0
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で見るには、どのようにすればよいのでしょうか?
0635633 (ワッチョイ 5bd6-pQa0)
垢版 |
2018/01/22(月) 16:09:10.00ID:rsQqa0Zv0
connect.Open();//★
sda.Fill(dt);
connect.Close();
としたら、★マークのところで、またエラーが出ました。
0636デフォルトの名無しさん (ワッチョイ 0306-GP+B)
垢版 |
2018/01/22(月) 16:33:20.49ID:R+95xE7/0
まずコネクション以下全てのオブジェクトはクローズしたら再度newしないと使えません
よってスタティックじゃなくて普通のインスタンスとして管理
使う度にnewで新たに作ります
0637633 (ワッチョイ 5bd6-pQa0)
垢版 |
2018/01/22(月) 16:46:28.18ID:rsQqa0Zv0
そうだったんですね、使いまわせると思ってました・・・
0638633 (ワッチョイ 5bd6-pQa0)
垢版 |
2018/01/22(月) 17:15:57.30ID:rsQqa0Zv0
インスタンス内で、宣言したら、うまくいくようになりました。
ありがとうございます。
0639デフォルトの名無しさん (ワッチョイ 239d-pQa0)
垢版 |
2018/01/23(火) 08:14:55.18ID:y6LiRRs70
デバッグで完全に動作するのにインストールして動かすと、途中で落ちる。多分データベースのアクセスではないかなと
思っているんだが、インストールした実行プログラムのデバッグをやろうとしているんだがどうやるのか不明。

VS2013の「デバッグ」から「インストールされているアプリケーションパッケージのデバッグ」に入ってもリストに何もでてこない。
なにか設定があるのだろうと思うが、どこを設定すればいい?
アタッチするまでが分からない。
0645デフォルトの名無しさん (ワッチョイ bdb8-1VRr)
垢版 |
2018/01/23(火) 09:59:10.73ID:iDuW9Lrl0
mono入れたLinuxでmscでコンパイルした実行ファイルを
WindowsにもってこようとするとMicrosoft Defenderでトロイ扱いされてブロックされます
同じコードをWindowsでcscでコンパイルした場合は問題ありません
WindowsでコンパイルしたものはmonoでLinuxでもちゃんと実行できます
なんでmscでコンパイルしたものがトロイ扱いされるんでしょう?
0646愛知人
垢版 |
2018/01/23(火) 11:14:45.36ID:ZHqgRH1x
どうやって受け渡してる?
zipで渡したらどうなる?
0647デフォルトの名無しさん (ワッチョイ bdb8-1VRr)
垢版 |
2018/01/23(火) 11:48:58.28ID:iDuW9Lrl0
>>646
scp(ssh)とhttp経由でダウンロードしましたがだめで
その後拡張子を変えたりしましたがだめでした
アーカイブは試しませんでしたが
ダウンロードできても解凍するところでアウトと思われます
軽いプログラムだったのでbase64エンコードした文字列を
Windows側でデコードして出力しようとしたのですが
ファイルに出力した時点でウイルス判定され隔離されました
0648デフォルトの名無しさん (ワッチョイ 3d9e-WQmd)
垢版 |
2018/01/23(火) 12:35:41.92ID:IdUgpQhE0
C#アプリからCTRL+V以外のホットキーでSendMessageでWM_PASTEを送っても
ペーストできるアプリとできないアプリがあるのですが
ペーストできない原因とどうすればペーストできるのか
分かる方がおられましたらお教えいただけないでしょうか

自作C#アプリ ○
FireFox ○
ThunderBird ○
IE11 ○
Mery ○
秀丸ファイラ ○
MDIE ○


V2C ×
Chrome ×
Vivaldi ×
Everything ×
0650デフォルトの名無しさん (アウアウカー Sa21-zP08)
垢版 |
2018/01/23(火) 12:43:45.53ID:w7MKK31Na
シリアル通信のプログラムで問い合わせ付のコマンドを送信する場合に、送信結果(bool)とレスポンス結果(string)を取得したいのですが、返り値boolでレスポンス結果をoutで返すといった感じにすればいいでしょうか
0651デフォルトの名無しさん (ブーイモ MM99-4b13)
垢版 |
2018/01/23(火) 12:44:53.41ID:S3NIjRwTM
WM_PASTEじゃなくて直接キーをハンドリングしてるんだろ
最近のメジャーなアプリは開発者がMacをメインで使ってるケースが多かったりして、
ファッキンドザのために必要以上の特殊な対応はしないというスタンスのものが増えてるよ
0653デフォルトの名無しさん (ブーイモ MMe9-VZYS)
垢版 |
2018/01/23(火) 13:01:37.24ID:P/8oxsShM
>>650
送信結果は例外で
0654デフォルトの名無しさん (アウアウエー Sa93-2BHe)
垢版 |
2018/01/23(火) 13:31:40.71ID:+k2ngROKa
>>650
成否だけ分かればいいなら、失敗した時はnullを返せば十分じゃない?

enum Acknowledgement {ACK,, NAK, NoResply, Offline};
みたいなのを返したいなら、

Class Response
{
  public string Received{get; private set;}
  public Acknowledgement Acknowledgement{get; private set;}
}

みたいなのを返すとか
0656デフォルトの名無しさん (アウアウカー Sa21-zP08)
垢版 |
2018/01/23(火) 21:20:31.90ID:doIreqsya
>>652-654
ありがとうございます
試してみます
0657デフォルトの名無しさん (ワッチョイ 25b3-pQa0)
垢版 |
2018/01/24(水) 22:02:38.70ID:pOW1jrho0
classをforeachで回したいのですがGetEnumeratorの書き方はこういう形が一般的なのでしょうか?
プロパティが増える度にGetEnumeratorのyield return追加しないといけないですが
うっかり追加し忘れてバグの元になるから別の書き方があるのかも?と少し気になったので
https://ideone.com/etKQWk
0660デフォルトの名無しさん (ワッチョイ 25b3-zWLY)
垢版 |
2018/01/24(水) 22:21:49.07ID:pOW1jrho0
>>658
すっごい単純なものだと
int id
string name
みたいなものでクラス保持してて、そこに他にも付属品が付いてるイメージです
たまにforeach使えないと不便な時があるのでその為に継承させてるのですが

DBから読み出したデータをそのままforeachで出力させたいって時とかに使います
わざわざ全部の項目を関数で読み出して表示ってのも大変な時があるので
0662デフォルトの名無しさん (アウアウエー Sa93-2BHe)
垢版 |
2018/01/24(水) 22:51:55.14ID:V1Cqs6+da
>>660
質問してるんだから人の言うこと素直に聞いた方がいいと思うよw
少なくとも>>658は正しい。

一般的なのでしょうか?
一般的どころかそんなこと誰もしないよw

どうやったらそんなアホなことをせずに目的の仕様を実激できるかを考えた方がいい
0663デフォルトの名無しさん (ワッチョイ 25b3-zWLY)
垢版 |
2018/01/24(水) 23:04:36.97ID:pOW1jrho0
>>662
すいません、目的の事をしたいのにそうではないと提示してもらったのはありがたいのですが
他の実現方法が分からなかったのでとりあえず現状何をしてるかを更に明確に伝えた方がいいと思ったで

その回答がただ否定してるだけに見えたのなら少し発言が悪かったでしょうか?

>>659
で更に回答いただけたのでTypeの使い方を調べています
とりあえず動くものだけ>>657で暫定で動かしておいて、使い方を理解したら置きかえて行く予定です
個人的に作ってるものなのでとりあえずは手の届く範囲で扱えるので
0668デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 14:20:59.96ID:uboI0CmN0

//描画先とする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()する必要があるの?
0669デフォルトの名無しさん (アウアウエー Saf2-BM8y)
垢版 |
2018/01/25(木) 15:01:28.26ID:rd0qfL0Fa
>>668
Graphics.FromImageもImage.FromFileも直接コンストラクタ呼んでないだけのこと。
中で非公開のコンストラクタが呼ばれてインスタンスが作られてることに変わりないじゃん

お片付けしていいタイミングが分かるのは作った人だけ。
だから作った人がお片付けする責任を負うのが合理的
0670デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 15:12:28.67ID:uboI0CmN0
そういうことなの。
Graphics g = Graphics.FromImage(canvas);
こいつが内部のコンストラクタでNewしてるかどうかなんてどうしたらわかるの? 分からんよな。
マニュアルをみると確かにこいつだけ「Creates a new Graphics from the specified Image.」と
なってるな。わかり難く紛れ込んでるんだね。

しかも
g.dispose()
PictureBox1.Image = canvas;
と御片付けした後に表示するとはまた不思議な気がする。なんで片づけてから表示するん?
どのみちNEWしたCanvasはDisposeしないといけないでしょ。それならそのときに自動的に全部Dispose()する
とかできないのか?
0671デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 15:29:46.72ID:uboI0CmN0
これは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);
}
0672デフォルトの名無しさん (アウアウウー Sa77-W10G)
垢版 |
2018/01/25(木) 15:31:19.68ID:867zoX3ca
別に使い終わってもリソース気にしないなら放置でいいよ
実害は普通の使い方してる限りでない

一個二個リソースが握られただけでは問題ないけど
数千数万とかレベルだと問題がでる
でもわざわざ勘定したり場合わけしながらコード書いているのか?
だったら正しいコードを書こう

newしてるかどうかわからなくても使ってることはわかるだろ?
いつかは自動で解放されるけどタイミングが不明
コード書いてる途中にg,imagを使い終わったと判断できるのは自分だけだから

片づけた後に使うのは当たり前だな
基本的にgなどはつかみっぱなしが良くないので短い範囲で手放してるだけ
0673デフォルトの名無しさん (アウアウウー Sa77-W10G)
垢版 |
2018/01/25(木) 15:35:45.15ID:867zoX3ca
これは基本的にwindowsのGDIという仕組みに乗ってるだけなので
他でも使ってる

c#に文句を言うのは筋違い
でもc++スレに行くのも筋違い

30年近くさかのぼってMSの設計者に文句を言ってくればいい
どうしても嫌ならwindowsの仕組みに乗ってないものを使えばいい
0675デフォルトの名無しさん (アウアウウー Sa77-W10G)
垢版 |
2018/01/25(木) 15:56:14.66ID:867zoX3ca
もう少し説明
>と御片付けした後に表示するとはまた不思議な気がする。なんで片づけてから表示するん?
仮にgをファイル操作に置き換えたとしよう

ファイル開く
ファイル読み書き処理
ファイル閉じる
表示

これを
表示
ファイル閉じる
にした場合、表示がもし5年かかった場合、ファイルは意味もなく5年間開かれっぱなしで他から操作できない
0676デフォルトの名無しさん (アウアウウー Sa77-W10G)
垢版 |
2018/01/25(木) 15:59:37.81ID:867zoX3ca
さらに言えば自動でファイルを閉じる仕組みを作ったにせよ
表示が終わるまで5年間ファイルは閉じられる機会がない

これでもすべて自動でやれという意見は変わらないかな?
0677デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 16:00:10.16ID:uboI0CmN0
そういう話ではなくて意味が解らないという話だね。
例えばこれは何故当たり前なのかが不明。

>片づけた後に使うのは当たり前だな
>基本的にgなどはつかみっぱなしが良くないので短い範囲で手放してるだけ

折角グラフィック表示するためにgを作ったのに、表示する前に解放するというのが意味不明だ。
Msのサンプルコードではまさにこのgに対してDRAWしている。これで表示が機能しているのに
この例では、PictureにCanvasを代入して表示が完了することになっている。表示する前にg
をdisposeしているから、gの役割が二つの例で意味が不明だ。
0678デフォルトの名無しさん (アウアウウー Sa77-W10G)
垢版 |
2018/01/25(木) 16:04:31.21ID:867zoX3ca
gは数が限られている

鉛筆みたいなもの
鉛筆が5本あってみなで共有している
使い終わったらすぐ放棄しないと絵が描けない人がでて困る

必要なくなったのに5年鉛筆を持ちっぱなしが望ましい状態だろうか?
0680デフォルトの名無しさん (ワッチョイ 2706-bSkF)
垢版 |
2018/01/25(木) 16:14:06.03ID:rPbpnmYW0
一つ勘違いがあるけど、newやコンストラクタとDispose()は直接関係ないよ
C#にdeleteは無いし、それに相当するものでもないので、インスタンスを解放する訳じゃない
Dispose()は主にガベージコレクション管理外となるアンマネージリソース等を解放するためのメソッド

そしてGraphicsはBitmapというキャンバスを弄るために用意したに過ぎない、表示するのはBitmapの中身
モノによってはDispose()すると内部バッファとかの書き出しとかもやるし、using等も使いつつ明示的にやりましょう

ちゃんとしたIDispose実装クラスならデストラクタ(ファイナライザ)でもDispose()を呼び出すコードが入ってるけど
タイミングがガベコレ次第になるし高コストなので明示的に呼ばれるとファイナライズキューから外すように設計されてる
0681デフォルトの名無しさん (アウアウエー Saf2-BM8y)
垢版 |
2018/01/25(木) 16:20:19.01ID:rd0qfL0Fa
>>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
0682デフォルトの名無しさん (アウアウウー Sa77-W10G)
垢版 |
2018/01/25(木) 16:22:44.43ID:867zoX3ca
C#でたころにGDIの限界までオブジェクト作ったことがあったな
画面がおかしくなって黒いところがあちこちにできる
リソースがないと怒られる

それともc++だったかないずれにせよ20年ぐらい前かな
0684デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 16:27:14.19ID:uboI0CmN0
要するに
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するからわけがわからない。
0685デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 16:34:42.10ID:uboI0CmN0
あっ、コメントにちゃんと書いてあった。

//画像のサイズを2倍にしてcanvasに描画する
g.DrawImage(img, 0, 0, img.Width * 2, img.Height * 2);
ここですでにCanvasに書いているんだな。
0687デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 16:43:44.03ID:uboI0CmN0
DOBONの例の機序
PictureBox1のサイズで空のBITMAPを作成する。
そのビットマップから描画オブジェクトのGraphics gを作成する。
ファイルからBitmapのImageを作成する。
gでそのImageをBITMAPに描画する。(BITMAPに描画したのでg、imgはいらない)
描画したBITMAPをPictureBOxにコピーする。

こういうことか。わかった。お騒がせしました。ペコリ
0689デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 16:47:36.29ID:uboI0CmN0
>gは数が限られている

それはおかしい。そんなことはどこにも書いてない。
もしそうだとしたら
Graphics g = Graphics.FromImage(canvas);
このコードが間違いってことになる。ここで数量をチェックしないといけない。
0691デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 16:52:18.84ID:uboI0CmN0
>C#でたころにGDIの限界までオブジェクト作ったことがあったな
>画面がおかしくなって黒いところがあちこちにできる 。リソースがないと怒られる

これはどういう意味? メモリーの限界ではなくて、GDI(ハードウエア)がもつレジスタの限界ってこと?
Graphicsって要するにGDIのリソースを確保するという意味なの?
0693デフォルトの名無しさん (ワッチョイ 27e3-5dAg)
垢版 |
2018/01/25(木) 16:56:18.20ID:y1oROuxV0
ユーザフレンドリーと見せかけてウンコの代表みたいなクラスなので
真面目に考えないほうがいい

結局仕組みを理解するにはwin32の描画文化から知る必要がある
0694デフォルトの名無しさん (アウアウエー Saf2-BM8y)
垢版 |
2018/01/25(木) 16:56:28.77ID:rd0qfL0Fa
>>689
しょうもないことに突っかかるなあw
数が限られてるって言い方が気に入らないなら高価な共有リソースって言えば分かる?

例えば巨大な配列とか、通信ポートとか、
そういった類のものを「一人」がずっと占有したら他の人が使いたい時に使えないよね?
0696デフォルトの名無しさん (ワッチョイ 2706-bSkF)
垢版 |
2018/01/25(木) 17:00:16.17ID:rPbpnmYW0
>>691
GDIはハードウェアっつーより…Windowsでの実装が気になるならReference Sourceでも読んで
メソッド内部では色々チェック入ってるし、しくじったら例外ぶん投げるようになってるから
0697デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 17:14:44.08ID:uboI0CmN0
例外ね。それならわかる。
0698デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 17:19:27.46ID:uboI0CmN0
MSの説明はたったのこれだけw
■Graphics クラス
 Encapsulates a GDI+ drawing surface. This class cannot be inherited.

GDI+って要するに、グラフィックコントローラを使うってことでしょ。でも鉛筆5本ってほどしょぼいことはないだろ。
0701デフォルトの名無しさん (ワッチョイ 8783-fPTX)
垢版 |
2018/01/25(木) 18:20:51.02ID:bbltRTAq0
最近のMSのドキュメントはほんと不親切だよな。
幸運なことGDI+は不親切になる前に開発されたものだから、ググればMSも含めて大量にドキュメントが残ってる。
0703デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 19:02:27.22ID:uboI0CmN0
ググってみた。
Application.SetCompatibleTextRenderingDefault(false);
というのが設定されるようになっていて、GDI+は糞だからGDIを使いなさいってことらしい。w
0706デフォルトの名無しさん (ワッチョイ 27e3-5dAg)
垢版 |
2018/01/25(木) 20:28:49.03ID:y1oROuxV0
c#の{ }って中身が1文の場合、省略できるものとできないものってどうやって決まってるんでしょうか?

namespace、class、
for、switch、while、try、checked、fixed、unsafeなど
0707デフォルトの名無しさん (ワッチョイ e39d-1ipv)
垢版 |
2018/01/25(木) 20:53:14.29ID:uboI0CmN0
省略しないこと。それが賢いプログラムスタイル。
0709愛知人
垢版 |
2018/01/25(木) 22:57:58.27
PictureBoxのMouseMoveイベントハンドラ内にInvalidate()を入れるとTimerのTickが止まります。何故ですか?
https://ideone.com/fWNMPP
0711愛知人
垢版 |
2018/01/25(木) 23:02:00.73
マウスの位置をフィールドに入れて間隔の短いタイマーで描画しますか?
0712デフォルトの名無しさん (ワッチョイ 0b9e-ss0X)
垢版 |
2018/01/26(金) 01:44:30.98ID:TUeBIint0
すみません質問です。
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)
0713712 (ワッチョイ 0b9e-ss0X)
垢版 |
2018/01/26(金) 02:02:53.98ID:TUeBIint0
712です。
p.WaitForInputIdle();
の後に、System.Threading.Thread.Sleep(1000);
を強引に追加したら上手くいきました・・。
(うまくいったというのはつまり、
a.xlsxだけが最初に開いてあって、
b.xlsx, c.xlsx, d.xltmをC#で開いた時、a~dまで一つのプロセスにまとまり、
d.xltmも新規ファイルで開いてくれたという事です)
でもこれ、絶対正規の解決方法じゃないですよね?
きっともっといい方法ありますよね?・・
ご教授下さい。お願いいたします。
0714愛知人
垢版 |
2018/01/26(金) 02:18:07.66
長すぎて目が回る
0715デフォルトの名無しさん (アウアウエー Saf2-BM8y)
垢版 |
2018/01/26(金) 02:55:01.83ID:o5aK9JZ1a
>>712
コマンドラインオプションで"/t"でも指定してみるとか
知らんけど
https://support.office.com/ja-jp/article/Microsoft-Office-%E8%A3%BD%E5%93%81%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89-%E3%83%A9%E3%82%A4%E3%83%B3-%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81-079164cd-4ef5-4178-b235-441737deb3a6#ID0EAABAAA=Excel

オートメーションでやった方がいいんじゃないの?
0717712 (ワッチョイ 0b9e-ss0X)
垢版 |
2018/01/26(金) 12:19:07.12ID:TUeBIint0
>>715
オートメーションってつまり、コムオブジェクト使うって事ですかね?
ちょっと調べてみます。
>>716
スリープも効果的に使えば立派なコードですかね!
ミリ秒時間の調整行って、確実に上手くいく範囲で秒数縮めてみようかと思います。
もっといい方法見つかればそれで実装しますが、それまでスリープで対応しようかと思います。
有難うございました。
0718デフォルトの名無しさん (ワッチョイ 56d6-1ipv)
垢版 |
2018/01/26(金) 17:21:24.22ID:YG13MR3r0
Form1のデータから、Form2を呼び起こして、
Form2のPrintDocument1_PrintPageを印刷しています。

Form2を閉じて、2回目にForm1から別のデータを印刷すると、
DrawStringで印刷したデータが重複してしまいます。

PrintDocument1_PrintPageを初期化するような方法はないでしょうか?
0720愛知人!id:ignore (ワッチョイ b375-5Mtj)
垢版 |
2018/01/26(金) 17:36:10.53ID:56XeCPud0
>>718
意味不明
0721愛知人
垢版 |
2018/01/26(金) 17:41:29.04
>>719
ダブルクォーテーションは""に置き換える
スペースの入った文はダブルクォーテーションで囲む
0722デフォルトの名無しさん (ワッチョイ da60-1ipv)
垢版 |
2018/01/26(金) 18:01:50.81ID:SCIRVI+W0
>>719
すいませんかんちがいしました
0724愛知人
垢版 |
2018/01/27(土) 13:34:52.88
pictureBoxに線を引いたり色々描画した後に指定位置のピクセルの値を取得する方法はありますか?
CopyFromScreen?を使うしかないですか?
0725愛知人
垢版 |
2018/01/27(土) 13:48:07.76
>>724は取り消し
0726デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 00:10:09.85ID:fNHvxuhr0
(12345).ToString("D8") = "00012345"
だけど、”    12345"にする方法はないのか?
0728デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 08:12:58.16ID:fNHvxuhr0
なるほど
" 123"
" 123.0"
" 123.00"
~
みたいなのをformat登録しておいて一括処理したいんだが,,,,
PadLeftをつかうには、独自フォーマットを作って解析して分解するひつようがあるな。
"8,D","12,F1","10,F2","10,F3","8,D"
これをSplitで分解して桁と表示にわけるとできる。みんなこんなことをやってるんだろうか?
0732デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 12:35:12.10ID:fNHvxuhr0
>設計ミスだな

ToStringとString.Formatでいちいち仕様を変えるなんざ設計ミスもいいとこだ。
0735デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 13:38:54.52ID:fNHvxuhr0
>>734
残念。VS2013ではそのスタイルは動かんな。
0736デフォルトの名無しさん (ブーイモ MM97-jjF6)
垢版 |
2018/01/28(日) 13:44:27.34ID:AvNbdCpkM
最新のVSって毎週バージョンが上がってて、アップデートしたら突然ビルドが通らなくなったりとか時々あるんだよね
自社開発でパパっと対応できる体制の開発が前提になってて、もうジャパニーズドカタには手を出せない代物
0742デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 14:11:02.89ID:fNHvxuhr0
List<string> a = new List<string> {
"x3" ,
"x4" ,
"x5" ,
"x6" ,
"x7" ,
"x8" ,
};
foreach (string el in a)
{
combox1.Items.Add(el);
}

combox1の初期化ってこんな方法しかないのか? 直接は初期化できんのか?
0743デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 14:12:38.19ID:fNHvxuhr0
>>236
ちゃうちゃう、$”  { valuえ} ”の記述はVs2017しかサポートしとらん。
0747デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 14:43:45.42ID:fNHvxuhr0
Addrange でできた。サンクス。
0748デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 15:01:38.15ID:fNHvxuhr0
int w = (int)((double)pic.Width / (double)(1 + x ) / 1.3);
doubleとintを混在するときにdoubleに自動的に型推論する機構ってないの?
いちいちキャストするのはメンドクサイよな。
0750デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 16:53:15.56ID:fNHvxuhr0
あっ、ほんとだ。いけた。ありがとう。
0751デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 17:12:56.15ID:fNHvxuhr0
Fontをファイルに保存したい。この場合name,style,sizeに分解して保存するのだろうか?
他に何かいい方法は?
0752デフォルトの名無しさん (ワッチョイ e305-5Mtj)
垢版 |
2018/01/28(日) 17:14:48.84ID:WjjZpgjO0
>>745
バーカw
0753愛知人 (ワッチョイ e316-5Mtj)
垢版 |
2018/01/28(日) 17:18:54.87ID:X+CD44G50
>>751
多分VSのアプリケーション設定のところでシリアライズして保存できるようにできる
0755愛知人 (ワッチョイ b375-fuuV)
垢版 |
2018/01/28(日) 18:07:26.86ID:QV+bfV+F0
これな
https://i.imgur.com/ZyRzEn7.png

これで保存
Properties.Settings.Default.*** = font;
Properties.Settings.Default.Save();

これで読み出し
var font = Properties.Settings.Default.***;

ユーザーのアプリケーションデータフォルダの中にxmlで保存されるようになってる
0757デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 20:23:59.60ID:fNHvxuhr0
それがあるのは知っていたけど、Settingsってそんなふうに使うのか。初めて知った。
便利そう。ありがとう。

前に設定してみたけど、ビルドすると直ぐに消えてしまうので、どうやって使うのか
わからなかった。
0759デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/28(日) 21:15:10.28ID:fNHvxuhr0
Properties.Settings.Default.DispFont = lblFont.Font ;
エラー 1 プロパティまたはインデクサー 'Properties.Settings.DispFont' は読み取り専用なので、割り当てることはできません。

フォントはリードオンリーになるので設定は無理ぽい。
0762デフォルトの名無しさん (ワッチョイ e39d-snNQ)
垢版 |
2018/01/29(月) 00:40:38.31ID:YDWVgvG40
>>761
スコープのところをアプリケーションにしたのが間違いだった。ユーザーにしたら
いけた。

でも暫くやって意味がわからなかったので結局はJson.netを使って保存した。
クラスをそのままシリアライズしたらFontもなにもかも一切合切勝手にシリアライズ
してくれた。W
これは分かりやすい。一発でわかった。
0763愛知人
垢版 |
2018/01/29(月) 01:03:38.61ID:pcTu+bOr
だよなぁ〜
0764デフォルトの名無しさん (ワッチョイ 8781-1ipv)
垢版 |
2018/01/29(月) 01:50:11.03ID:0ju9RGha0
class 年齢 {
public string 名前{ get; set; }
public int 年齢{ get; set; }
}
List<年齢> 年齢リスト = new List<年齢>();
このような年齢型の年齢リストがあったとして、
年齢が21のリストだけを抽出したい場合、ラムダ式ではどのように書けば良いのでしょうか?
0765愛知人
垢版 |
2018/01/29(月) 01:56:46.26ID:pcTu+bOr
list.FindAll(x=>x.年齢==21)
0769愛知人
垢版 |
2018/01/29(月) 13:34:43.26ID:pcTu+bOr
メイリオ
0770デフォルトの名無しさん (ワッチョイ 9e9f-eGIS)
垢版 |
2018/01/29(月) 16:33:40.56ID:FA24LoNZ0
配列の要素すべてが0もしくは1000でなかったらという論理式を書きたいのですが
0772愛知人
垢版 |
2018/01/29(月) 17:05:56.81ID:pcTu+bOr
>>770
arr.All(x=>x!=0&&x!=1000)
0774愛知人
垢版 |
2018/01/29(月) 18:26:02.43ID:pcTu+bOr
反射的にレスしてすまん
たしかに2通りあるな
0775デフォルトの名無しさん (ワッチョイ b703-rERY)
垢版 |
2018/01/29(月) 18:58:15.23ID:z90g+lRG0
ねえわwリアルでもこんなアスペばかりで困るけどなw
0776愛知人
垢版 |
2018/01/29(月) 19:04:54.22ID:k6Igz8nX
arr.All(x=>!(x==0||x==1000))
!arr.All(x=>x==0||x==1000)
0779デフォルトの名無しさん (アメ MMaf-Ah9j)
垢版 |
2018/01/29(月) 19:48:59.46ID:4EZh8ZpyM
>>777
なるほど、つまり>>770は、

arr.All(x=>!(x==0||x==1000))
を書きたいのですが

もしくは、

!arr.All(x=>x==0||x==1000)
を書きたいのですが

と質問すべきだったと。
確かにこれなら解釈が割れる心配ないね!
0781愛知人
垢版 |
2018/01/29(月) 21:07:54.20ID:pcTu+bOr
解ってます
0784デフォルトの名無しさん (アウアウウー Sa77-rgA5)
垢版 |
2018/01/31(水) 12:33:39.58ID:Hr5M/E+Xa
初心者だからわからないんだろうけど
そういうリソース系は数量をチェックしても無駄だよ

チェックした時点で大丈夫かもしれないけど
使うとき限界に達してるかもしれない
どこも保証しない
実行して失敗なら失敗
0787デフォルトの名無しさん (アウアウウー Sa77-rgA5)
垢版 |
2018/01/31(水) 12:40:26.06ID:Hr5M/E+Xa
いきなり鉛筆をつかもうとする
つかめなかったらwindowsは異常な事態になってるので回復は不能
アプリを落とす

自分で鉛筆を使ってる場合使わなくなったら即座に開放
たったこれだけ
0788デフォルトの名無しさん (ペラペラ SD3b-LUfI)
垢版 |
2018/01/31(水) 12:51:37.68ID:YgPJ7UgLD
c♯固有の話では無いですがインターフェースのファイルとクラスのファイルは一般的に同じフォルダに入れてるのでしょうか?

インターフェース用フォルダ、抽象クラス用フォルダ、クラス用フォルダと分けた方が見やすいとかあるのかなと思いまして
0792デフォルトの名無しさん (アウアウエー Saf2-BM8y)
垢版 |
2018/01/31(水) 18:51:07.07ID:K5Al/IGma
いや、それは単にVSがそういう前提で作ってある(ソリューションエクスプローラから
新規にファイルを作った時のスケルトンの名前空間がプロジェクトの規定の名前空間に
フォルダ階層がくっついたものになる)ってだけの話で、別に必要なら単に分類のために
フォルダ作ってもいいと思うよw

そんなケースはあんまりないとは思うけど
0796愛知人!id:ignore (ワッチョイ e305-5Mtj)
垢版 |
2018/01/31(水) 19:54:02.69ID:3eBSylxa0
>>795
ありがとうございます!
0800デフォルトの名無しさん (スププ Sdda-La00)
垢版 |
2018/01/31(水) 21:11:48.89ID:uhY/QizFd
>>783
昔、GDI+とMFC or Win32APIから.netに移行する表とその説明があったけど、検索で調べきれないわ。

さかのぼると、WM_PAINT, BeginPaintとか古典的な描画APIとかの話になるから

今、ディスプレイドライバーのソースを見てるけど、なかなか説明が難しいわ

ごめんなさいね
0804デフォルトの名無しさん (アウアウウー Sa5b-+DFt)
垢版 |
2018/02/01(木) 11:30:02.30ID:DhFBeVpNa
非常に単純化した話として
windowsは特定のリソースを数字で管理してるけど
その数字の上限が決まってる

管理してる空きがないと確保できない
単純な話

出来ないものはできない
それだけ
何も難しくない
0805デフォルトの名無しさん (アウアウウー Sa5b-+DFt)
垢版 |
2018/02/01(木) 11:31:56.97ID:DhFBeVpNa
だから使わなくなったらすぐに解放しておけばいい
それだけ
何も難しいことはないけど馬鹿がこねくり回して難しい難しい言ってるだけ

サンプルソースで開放してないのは1個ぐらいもれてても実害はないから

実装する際は自分で実装したらいい
0809愛知人
垢版 |
2018/02/01(木) 22:50:11.02
WinFormsの自作Componemtでデータをネットから取得するメソッドで、完了と失敗のイベントを実装するのは普通ですか?
0812愛知人!id:ignore (ワッチョイ 9775-jUAt)
垢版 |
2018/02/02(金) 00:51:28.62ID:jGftTsx+0
ありがとうございます(>_<)
0816愛知人
垢版 |
2018/02/02(金) 12:29:56.98
>>814
Replace
0818愛知人
垢版 |
2018/02/02(金) 12:37:13.44
区切り文字を削除したいシチュエーションなんか普通はないしな
知らんけど
0819デフォルトの名無しさん (ワッチョイ 1feb-j4Dg)
垢版 |
2018/02/02(金) 12:38:34.03ID:BMFcc+go0
ところで拡張メソッドって参照されないんだっけ?

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 だと普通に出来ちゃうと聞くが
0820愛知人
垢版 |
2018/02/02(金) 19:36:31.54
コードでコントロールのプロパティを規定値(DefalutValue属性の値)にリセットする方法はありますか?(>_<)
0823愛知人!id:ignore (ワッチョイ 9775-jUAt)
垢版 |
2018/02/02(金) 20:50:42.32ID:jGftTsx+0
ありがとうございます(>_<)
0824デフォルトの名無しさん (ワッチョイ f7e3-uppE)
垢版 |
2018/02/02(金) 21:57:28.18ID:Zl28+evz0
c#っぽい独自言語の解析をしてるんですが
コメントの「//」や「/*」「*/」の解析って
ダブルコーテーション内と外ってどうやって判断したらよいでしょうか?
0826デフォルトの名無しさん (アウアウウー Sa5b-+DFt)
垢版 |
2018/02/02(金) 22:38:26.26ID:dT49NCpma
>>824
やり方次第

作ったことあるのでわかりやすいのは文法をのままコードにする
頭から呼んでって状態を覚えておく

文字リテラル内は解析しないでエスケープルールや”の監視だけする

//や/*コメントの時は行末まで読み捨て
0829デフォルトの名無しさん (ワッチョイ f7e3-uppE)
垢版 |
2018/02/02(金) 22:48:59.30ID:Zl28+evz0
>>826
それがわからない
文字列リテラルなのかコメントなのか判断できない
ダブルコーテーションから判定するとそれがコメントだったとき駄目
コメントから判定するとそれが文字列リテラルだったとき駄目
っていうパラドックス
0831デフォルトの名無しさん (アウアウウー Sa5b-+DFt)
垢版 |
2018/02/02(金) 22:56:57.54ID:dT49NCpma
急がないならどれかの言語のコードでもじっくり読んで勉強したらいい
大体の言語はオープンソースなので好きなのをやればいい
ただしc++の知識ぐらいはいる

急ぐならテストパターンを十分に用意して手あたり次第やればいい
0834デフォルトの名無しさん (アウアウウー Sa5b-+DFt)
垢版 |
2018/02/02(金) 23:15:27.28ID:dT49NCpma
独自言語の解析してるんだろ?

他の部分が出来てるなら
普通に頭から読んでって "が出たらリテラルフラグオンにして
//が出たら行末まで読み捨て
/*だったら次の*/がでるまで捨てるだけ

何も難しくない
0836デフォルトの名無しさん (ワッチョイ 7703-skLA)
垢版 |
2018/02/02(金) 23:18:02.29ID:HOyQOl0G0
独自言語が逐次実行される前提で話してるな
0839デフォルトの名無しさん (アウアウエー Sadf-Og17)
垢版 |
2018/02/02(金) 23:24:38.81ID:yHy9QEH1a
>>829
難しく考えすぎでしょう。
>>826が言ってるのはたぶん単純なステートマシン。

enum State
{
  トークン探索中,
  文字列検出中,
  インラインコメント検出中、
  ....
}

stateを表すenumを定義して、stateの値に応じて動作を変えるだけ。
文字列リテラルの始め「"」やコメントの始まりを検出するのはstate = State.トークン探索中の時だけ。
素朴すぎるやり方だと思うが、少なくともこれでそんなパラドックスには陥らない
0846愛知人!id:ignore (ワッチョイ 9775-jUAt)
垢版 |
2018/02/03(土) 00:17:09.98ID:GkUi/Itq0
そのときだけ行またげばいいだけだし
0857デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 09:02:44.63ID:LvTBogUR0
swich() { case xxxx: ~
xxxxに変数をつかいたいのだが、switchに変わるものってなに?
0860デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 10:50:39.85ID:LvTBogUR0
switchi( (button)sender) ){
case Button1: ~
case Button2:~
case Button3:~
}
こんな感じのことがしたい。

〜はMethod()でいいので、
void switch_tb()= {
{Button1, Method1}
{Button2, Method2}
{Button3, Method3}
}
switch_suru((button)sender);
こんなことできんか? 
0861デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 10:52:21.97ID:LvTBogUR0
C#はメソッドの中のローカルメソッドってできへんの?
0866デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 12:24:29.31ID:LvTBogUR0
いい方法をみーつけ
0872デフォルトの名無しさん (ワッチョイ f783-j4Dg)
垢版 |
2018/02/03(土) 12:40:45.58ID:ZFgrbY8z0
使ってる奴も糞ばっかになったな。新しい機能一つ覚えただけでマウンティングしだすアホとか。
なぜその機能が糞かが理解できない脳みそ。取り巻きからして残念な言語になってしまった。
0873愛知人
垢版 |
2018/02/03(土) 12:41:41.35
あらら、怒っちゃった(笑)
0876愛知人
垢版 |
2018/02/03(土) 12:50:20.68
Enumerable.Rangeじゃだめなん?
0882デフォルトの名無しさん (ワッチョイ f783-j4Dg)
垢版 |
2018/02/03(土) 14:17:08.45ID:ZFgrbY8z0
どう書いたらいいか分からないのが糞言語の証左。
0883デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 15:26:42.67ID:LvTBogUR0
証左、難しい言葉をしってるね。

>>881
エラー 2 '=>' は無効です。
ってなるが、、、
0885デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 15:33:25.80ID:LvTBogUR0
var aa = ((Button)sender).Equals(button1) ? func1() :
((Button)sender).Equals(button2) ? func2() :
func2();
これどう?
0887デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 15:39:26.04ID:LvTBogUR0
>ButtonのName変更ってどんな実装に必要なんだよ・・・

最初はBUtton1だろ。出来上がって綺麗に整理するときにbtnSetParamとか分かりやすく書き換える。
0889デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 15:40:45.84ID:LvTBogUR0
Button.Nameをつかうくらいなら、Tagに書き込んだ方がまし。
0890デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 15:41:39.80ID:LvTBogUR0
>888
あ、そうなん?
0891デフォルトの名無しさん (スッップ Sdbf-Ismr)
垢版 |
2018/02/03(土) 15:43:31.84ID:d68F6UhId
実装後にスペルミスに気付いた、他の画面との兼ね合いで名称を統一することになった、仮の名前をちゃんとした名前に置き換えた、とか色々あるだろ
リフレクションでデータ取得する方針のせいでガチガチに名前が決められている画面を作らされたときの面倒さったらなかったわ
0892デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 15:43:52.16ID:LvTBogUR0
キャストしないとインテリセンスがでないから、キャストしたほうがいいよ。
0893デフォルトの名無しさん (アウアウエー Sadf-Og17)
垢版 |
2018/02/03(土) 16:57:11.29ID:Rh9ysymEa
こんなの考えたが、
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)と同じように変数の型に
依存するのか、それともオーバーライドと同じようにオブジェクトの型に依存ずるのか、どっちだっけ?
0896デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 21:11:27.96ID:LvTBogUR0
グループボックスにボタンを貼り付けて、それをコピーして貼り付けると、イベントが同じところになるだろ。
だからエディット都合だな。
イベントで分けるのが一番いい方法かもしれない。w
0897デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 21:13:35.51ID:LvTBogUR0
再表示するために tabPage1.Controls.Add(grp);で追加したgrpだけをクリアするにはどうしたらいいの?
tabPage1.Controls.Clear(); やるとボタンが消えてしまう。
0899デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 21:35:57.81ID:LvTBogUR0
Removeを使うのはわかるんだが、要するになにがしたいのかというと
Linqを使ってControlsにAddしたGroupBoxだけを選択して、クリアしたいということ。
その書き方がわからない。ということ。
0901デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 21:46:23.78ID:LvTBogUR0
tabPage1に貼り付けたコントロール群をLinqを使って選択的に消去したいということ。これでもわからん?
0904デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 21:54:28.34ID:LvTBogUR0
解決した。w
0906デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 21:57:07.86ID:LvTBogUR0
>903
Keyになる言葉の意味がわからないと解らないと思うよ。それが解る人にはわかる。
0909デフォルトの名無しさん (アウアウエー Sadf-Og17)
垢版 |
2018/02/03(土) 22:08:58.48ID:SzFJuxtQa
var toRemove = tabPage1.Controls.Cast<Control>().FirstOrDefault( .... );
if (toRemove != null)
  tabPage1.Controls.Remove(toRemove);

これを1行にしたいってことだったのかな?
拡張メソッド使ってControl側に自分を包含するコンテナのControlCollectionを
引数に撮るメソッドを定義しないとできない気がする

何でもいいけど、冗長でもいいから分かるように書いて欲しいよね
0910デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 22:13:41.72ID:LvTBogUR0
そんな書き方しかでけん?
0911デフォルトの名無しさん (ブーイモ MMcf-+DFt)
垢版 |
2018/02/03(土) 22:16:15.65ID:DOsYwXsiM
>>897
これでスタートして答えをもらおうとして失敗

次に >>899 要するにと言ってるけど何も要してないどころか条件を追加してる

そして これ >>901 への流れ

トンチンカン
最初のレスでなぜ伝わると思ったのかが分からない
0913愛恥人
垢版 |
2018/02/03(土) 22:34:23.85
最初のレスだけで理解できる俺は天才なのか
0916デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 22:54:26.09ID:LvTBogUR0
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でところどころ飛ばしてしまう。
0917デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 23:19:59.77ID:LvTBogUR0
あっ、謎がとけた。けっこう落とし穴だな。
0918デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 23:32:01.66ID:LvTBogUR0
ケツから消していくとうまくいくんだろきっと。
まえからでもこうやるとうまく行く。
    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);
             }
          }
0919デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 23:33:46.33ID:LvTBogUR0
さて、原理は分ったが、これを1行で書くにはどうするのか?
0920愛恥人
垢版 |
2018/02/03(土) 23:40:30.32
逆にグループボックス以外を抽出してからパネルの中身全消去からの追加とかはどうかな(>_<)
0924デフォルトの名無しさん (ワッチョイ 179d-mIUl)
垢版 |
2018/02/03(土) 23:49:22.30ID:LvTBogUR0
>920 それ、俺もちょっと考えた。
>921 それは最終手段にとっておいたのに。

Reverse()ってあるんか? それだ!!
0925デフォルトの名無しさん (アウアウエー Sadf-Og17)
垢版 |
2018/02/04(日) 00:42:43.56ID:OrIb/jt1a
もう気が済んだかもしれんけど、無理に何でもインラインで書こうとして
可読性落とすなんて愚の骨頂で、普通にメソッドに外だし(別に拡張メソッドじゃなくてもいいけど)
した方がいいと思うけどね

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));
  }
}
0926デフォルトの名無しさん (ワッチョイ f7f7-NsDz)
垢版 |
2018/02/04(日) 05:54:59.74ID:vxeWu10H0
https://qiita.com/taigaaa2/items/7f05ad950a57033892ae
この方法で値を保存しているのですが
cドライブに保存されている様でプログラムを他のPCに移すなどすると値が保持されていません
どうすれば他のPCでも記憶した値を使える様になるでしょうか
0928デフォルトの名無しさん (ワッチョイ ff81-CU+w)
垢版 |
2018/02/04(日) 06:38:53.27ID:ldOBh/kr0
真面目に答えるならサーバーやクラウドストレージのSettingsを読み書きするSettingsProviderを自作することだが
初心者にはひと月ふた月かかるだろうしはっきり言って時間の無駄
0929デフォルトの名無しさん (ワッチョイ 7703-skLA)
垢版 |
2018/02/04(日) 08:14:14.99ID:ge7PbLBn0
真面目な答の方が愚策という変な人、というかおそらくバカ
0931愛恥人
垢版 |
2018/02/04(日) 10:35:42.99
>>762でユーザーにしたら動いた原因はなに?
0935デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 13:48:00.41ID:HudK1GnQ0
>ユーザー共通になっちゃうけど、スコープをユーザーからアプリケーションに変更すればexeと同じディレクトリに保存するよ

アプリケーションじゃ動かんかったな。動くこともあるんだろうな。意味がわらかんし、マニュアル読んでも書いてないし
それにビルドで設定値が消えるから、、、最初から打ち直し。w
こんな意味の解らん機能はつかわない方がいい。JSON.NET使った方が遥かに楽。というのが俺の感想だ。
0937デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 14:13:13.77ID:HudK1GnQ0
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));
わーいうまく行ったぞ。
0940デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 14:24:43.87ID:HudK1GnQ0
Castを無くすために
tabPage1.Controls.OfType<GroupBox>().ToList().ForEach(x => tabPage1.Controls.Remove(x));
これでも動くのに、

tabPage1.Controls.OfType<GroupBox>().ForEach(x => tabPage1.Controls.Remove(x)); 
これは動かないのはなぜ?
0942デフォルトの名無しさん (ブーイモ MMcf-+DFt)
垢版 |
2018/02/04(日) 14:30:00.97ID:2sg7PnbOM
そもそも列挙してる最中のものを削ると列挙に失敗する可能性が高い

最初から何番目の要素を取り出す
次はそれプラス1の要素としてるのに
1番目から消すと何番目というのがずれるだろ?

一番目を取り出すそれを消す
○×▼

×▼

二番目を取り出すそれを消す
×▼

×
三番目は取り出せない
0945デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 14:35:11.95ID:HudK1GnQ0
>>941
いやまあそうなんだが、疑問というのは
var grps = tabPage1.Controls.OfType<GroupBox>();

varじゃわからないのだが、この型は何なの? Listじゃないよね。
0953デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 14:50:13.12ID:HudK1GnQ0
var grps = tabPage1.Controls.OfType<GroupBox>();
var ggg = tabPage1.Controls.OfType<GroupBox>().ToList();

IDEでみるとgrpsは
{system.Linq.Enumerable.OfTypeIterater<GroupBox>}
gggは
count=10
と出る。
0955デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 14:53:56.98ID:HudK1GnQ0
>IEnumerableやyield returnの動作知らずにLINQ使うのって怖くないのかな

何故怖いの? 
IEnumerableとEnumerableの違いを端的に説明すると、どういうこと?
0957デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 14:59:19.86ID:HudK1GnQ0
Enumerable.OfType <GroupBox > grps = tabPage1.Controls.OfType<GroupBox>();
これはできないよ。エラーになる。

List<GroupBox > ggg = tabPage1.Controls.OfType<GroupBox>().ToList();
これはOK
0958デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 15:01:43.20ID:HudK1GnQ0
>Enumerable.OfType<TResult> メソッド

あっと見落としてた、型じゃないのか。メッソドか。
0961デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 15:12:42.24ID:HudK1GnQ0
>例えば.net 4.7で作られたプログラムを4.5しか入ってないPCで動かすとどうなりますか?
4.7が動作しないPCはない(筈だ)から、4.7をダウンロードしたらいいだけだよ。
4.7をシステムに追加すれば問題なしに完璧に動作するよ。
0962デフォルトの名無しさん (ワッチョイ bf7f-qlLX)
垢版 |
2018/02/04(日) 15:17:08.79ID:CmrmETVT0
>>960
クライアントがターゲットフレームワーク未満の場合は、起動時にエラーダイアログが出て終了する。
その内容だったら、ターゲットフレームワークを4.5に変更すれば良いのでは。
厳密には、4.5はサポート切れてるから、4.5.2に設定した方が良いと思うけど。
0970デフォルトの名無しさん (ワッチョイ f7f7-NsDz)
垢版 |
2018/02/04(日) 16:12:44.65ID:vxeWu10H0
>>930
スコープがアプリケーションだと書き込みができない様で、書き込みのできる方法はありますでしょうか?

アプリケーションでいじった値をアプリケーションのあるフォルダなどに保存する方法が知りたいです
visualstudioで生成したDebugフォルダをコピーするだけで同じ設定のものがコピー出来る様になりたいです
0973デフォルトの名無しさん (アウアウエー Sadf-Og17)
垢版 |
2018/02/04(日) 16:27:27.66ID:iJJ2KKb9a
>>970
>>930を真に受けちゃダメ

MSはバイナリをProgram Files以下のディレクトリにインストールして使うのが
標準的な使い方だと考えているので、アプリケーション設定も当然バイナリと同じフォルダに
保存する方法は用意されてない。(言うまでもないけど、Program Files以下のディレクトリに
ファイルを書き込むには特別な権限が必要)

バイナリをUSBメモリに入れて持ち歩くような使い方を想定しているようなアプリなら
当然バイナリと同じディレクトリに設定ファイルを保存するのもありだけど、
そういう場合は自分でそういうコードを書くしかない
0976デフォルトの名無しさん (アウアウウー Sa5b-+DFt)
垢版 |
2018/02/04(日) 17:11:47.67ID:lnA8IzXNa
.netの前はアプリなどがシステムフォルダににDLLを入れていた
それでアンインストールなどを繰り返すとどれがどれに依存しているかわからなくなった
これをDLLヘルという

これを教訓にしてアプリではdll依存を極力避け
アプリの配布はビルドしたものを適当な場所にxcopyしただけで可能なように設計された
0977デフォルトの名無しさん (ワッチョイ 17e6-CU+w)
垢版 |
2018/02/04(日) 18:11:17.96ID:IdDneOZ60
ApplicationSettingsみたいなゴミを使うの止めればいいんじゃないの
何でこだわってるの?
ApplicationSettingにこだわらなければ10分で済む話だよね?
なんで半日も一日も掛けてるの?
不死身で時間が無限にあるの?
無職で時間が余ってるの?
休日ぼっちで暇なの?
ねえなんで?
0978デフォルトの名無しさん (ワッチョイ f7f7-NsDz)
垢版 |
2018/02/04(日) 18:13:05.97ID:vxeWu10H0
無職です申し訳ありません
0979デフォルトの名無しさん (アウアウエー Sadf-Og17)
垢版 |
2018/02/04(日) 18:13:56.88ID:b12ucEdla
そもそもアプリケーション設定の解説なんていくらでもweb上に存在するのに
どうしてまずそれらを読まずに最初からできもしないことをできるはずだと思い込んでるのか、
そこが不思議。
0980デフォルトの名無しさん (ワッチョイ f7f7-NsDz)
垢版 |
2018/02/04(日) 18:17:04.23ID:vxeWu10H0
アプリケーション設定には特にこだわりはありません
保存さえ出来れば構いません
出直してきます
申し訳ないです
0983愛恥人
垢版 |
2018/02/04(日) 18:49:17.79
>>935
バインド出来ないじゃん(>_<)
0985デフォルトの名無しさん (ワッチョイ ff9a-HmOu)
垢版 |
2018/02/04(日) 18:50:55.56ID:YkvE7FF30
>>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
0986デフォルトの名無しさん (ワッチョイ f7f7-NsDz)
垢版 |
2018/02/04(日) 19:03:57.70ID:vxeWu10H0
>>985
プログラムを別のマシンに移しても設定が保存されるようにしたいのです
でも保存場所を変えることは出来ないんですよね?
0987デフォルトの名無しさん (ワッチョイ 9f06-wbgk)
垢版 |
2018/02/04(日) 19:34:44.52ID:RXHjrV0B0
>>986
最近の流行りだと、設定を捨ててjson.netってやつで管理する
上記のそれはクラスオブジェクトをテキストにする(シリアライズと言う)ソフトなので
コレを普通のテキストファイルとして読み書きするだけです
0992デフォルトの名無しさん (アウアウエー Sadf-Og17)
垢版 |
2018/02/04(日) 20:18:09.97ID:rXp7+rpAa
>>986
一番簡単なのは、永続化(保存)したい情報だけをまとめたクラスを作って
シリアル化/逆シリアル化する方法。

シリアル化/逆シリアル化のための機能は.NETの標準ライブラリにも用意されてるので
わざわざサードパーティーのを使うことない

しかし、意地悪なのかマジなのか知らんけど、
なんか人を惑わすようなこと書く人ばっかりで質問者も大変だなw
0995デフォルトの名無しさん (ワッチョイ 179d-jn1r)
垢版 |
2018/02/04(日) 21:48:45.96ID:HudK1GnQ0
CSV:一般的でシンプルで扱いやすい。
INIファイル:以前の標準、いまでも使えるがCOMオブジェクトロードする必要がある。フォーマットは直観的で使いやすい。
Json:上記に比べると、オブジェクトをそのまま保存可能というメリットがある。フォーマットは上記よりわかり難いが特に問題はない。
XML:汎用性があるが、直観的なフォーマットではないのでわかり難い。普通はこんなものをたいそうに使う必要はない。

などがあって、基本はCSVが標準だろうと思う。しかしクラスをそのまま保存するような場合はjsonがおすすめだ。例えば
カラーコードやフォントを保存する場合にはCSVだと、いちいちテキストなどに変換する必要があるが、jsonのシリアライズを
使えば何にも考えずに保存できる。MSもJnonのIFを用意しているが、Json.netの方が優れているのでそちらの方を使った方がいい。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 67日 2時間 33分 53秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

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