2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

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

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

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

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

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

■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured

2 :デフォルトの名無しさん :2018/04/06(金) 17:40:50.10 ID:oKXVP34zM.net
(*゚∀゚)v2get!

3 :デフォルトの名無しさん :2018/04/06(金) 18:51:49.77 ID:+Q3Wd1R20.net
ワッチョイ付きGJ

4 :デフォルトの名無しさん :2018/04/06(金) 22:54:25.33 ID:e2Dy7HRM0.net
前スレ>>993, >>998
例外が発生しないようなコードを書くべきというのはそのとおりだと思いますが、例えば
ファイルパスが適切であることを確認してファイルが存在することも確認して、その上で
オープンしようとしてもそのタイミングでファイルが消されている、といった状況だと例外が
発生しますよね

流石にそういうケースでは例外で止めるべきだというのも一つの考え方ですが、それを
検出して処理を戻したいケースもあるだろう、と思っての質問でした

5 :デフォルトの名無しさん :2018/04/06(金) 23:04:09.92 ID:mLoQW3Pc0.net
>>4
誰かが編集中なときもあるし
そもそもぶっ壊れてるときもあるし
アプリの動作も含めて仕様を決めないとどうしようもないじゃん

6 :デフォルトの名無しさん :2018/04/06(金) 23:16:26.79 ID:5BPKzXhXa.net
まあ、最初から言ってるように、抽象的な質問には抽象的な答えしか返しようがないw

例外に対処するイディオム的な物を教えてくれ、と言ってるように聞こえるけど
そんなものはないとしか...

7 :デフォルトの名無しさん :2018/04/07(土) 04:26:23.93 ID:1UMv7o170.net
なかなか意図するところが伝わってないのですが、「例外処理をループの中に閉じ込めて、
例外が発生しなかった場合だけループを抜ける」という書き方を知りたかったのです
処理の内容とかはどうでも良くて、ループの囲い方とその抜け出し方を

なので、以前レスいただいたように、whileで無限ループを作って、tryブロック内にbreakを
置いてループを抜ける、という回答で私には十分でした

試してみれば一発で分かる話だったのですが、tryブロックから外側のループを直接抜ける
ことができると思っていなかったので、それに気づかなかったということです

皆様お付き合いいただいてありがとうございました
また質問をした際には付き合っていただけると幸いです

8 :デフォルトの名無しさん:2018/04/07(土) 16:14:52.82 ID:XH6L+7hBM
https://ideone.com/lasZ8b
のようなクラスを他プロジェクトやライブラリでICollectionの型として使いまわしたい場合
どのように依存させる構成にすればいいのでしょうか?
インターフェースとかでこの型の実装を強制ってできるんでしょうか?
それかインターフェースは使わないで他の参照方法が望ましいんでしょうか?

9 :デフォルトの名無しさん :2018/04/07(土) 12:22:01.31 ID:mY3UUgcs0.net
困っているわけじゃないんだけどちょっと気になってることがあるので分かる方がいたら教えてください
次のコードを実行すると y に true が代入されますが、これはどういうときに使うのでしょうか

string x = null;
bool y = x is var z; // y に true が代入される

10 :デフォルトの名無しさん :2018/04/07(土) 13:18:31.43 ID:pLXvASH10.net
private void button1_Click(object sender, EventArgs e)
{
if (sender is Button b)
{

}
}

方法: as 演算子と is 演算子を使用して安全にキャストする (C# プログラミング
ガイド)
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/types/how-to-safely-cast-by-using-as-and-is-operators

11 :デフォルトの名無しさん :2018/04/07(土) 15:27:01.26 ID:Uoh/XEtya.net
チラシの裏

C#の構造体にこんな落とし穴が存在することをついさっき知った
http://ufcpp.net/study/csharp/resource/readonlyness/#this-rewrite

12 :デフォルトの名無しさん :2018/04/07(土) 16:25:57.16 ID:jbOaYf+S0.net
public class Test

public int Id{get;set;}
public string Text{get;set;}
public string Other{get;set;}

このようなクラスを他プロジェクトやライブラリで
ICollectionの型として使い回したい場合
どのような依存をすればいいのでしょうか?
インターフェースでこの型実装を強制させるとかでしょうか?
インターフェースを使わないで他の参照方法のが望ましいのでしょうか?

13 :デフォルトの名無しさん :2018/04/07(土) 16:37:35.07 ID:Y4t1vYpsM.net
継承

14 :デフォルトの名無しさん :2018/04/07(土) 18:27:15.12 ID:7KARL849a.net
>>12
悪口言いたくないんだけど、俺様用語が多過ぎて何を言ってるのか全然分からないよw

15 :デフォルトの名無しさん :2018/04/07(土) 19:44:44.45 ID:jbOaYf+S0.net
>>14
List〈Test〉等を他のプロジェクトでも扱いたいのでTest型で返す関数を作成して
それをこれをパッケージした時に他のプロジェクトでも受け取れるようにしたいって事ですね
public Test GetTest();
みたいな関数でTest型を使いまわせるようにしたいです

16 :デフォルトの名無しさん :2018/04/07(土) 19:53:33.05 ID:jbOaYf+S0.net
>>13
Abstractって指摘も入ってるので
型クラス(Test)を実装しておき
これをベースにして
public Test GetTest();
を継承先に実装するようにするのが一番賢い設計ですかね・・・?

機能というよりはC♯を使った設計の質問と少し抽象的な話なのでスレチだったらすいません

17 :デフォルトの名無しさん :2018/04/07(土) 20:14:36.36 ID:7KARL849a.net
>>15
publicな型はそれを含むプロジェクト(アセンブリ)を参照する別のプロジェクトからも
普通に使えると思うけど、そういう話ではなくて?

18 :デフォルトの名無しさん :2018/04/07(土) 20:27:35.94 ID:jbOaYf+S0.net
>>17
dll状態だと戻り値Test型って何?ってならないかと思って構造どうすればいいのか悩んでましたけど
そもそもそういう事を考えること自体がおかしかったかもしれないです・・・

Test型のみを他のプロジェクトに流用させたい時とかも考えていたんですけど
そもそもその設計自体がおかしいと思い至りました

19 :デフォルトの名無しさん :2018/04/09(月) 11:45:33.84 ID:xaQ7bksS0.net
>>12
もうちょっと掘り下げて質問し直します

EntityFrameworkを使ってSQLにTest型の入出力をするクラスと
WebからスクレイピングしてTest型を返すクラスを作りたいのですが
ここでTest型を両方で共通で使いたいと思ってます
Test型はプロパティが減ることは無いですが追加はしたいものとします

この時Test型はどのように実装するのが好ましいのでしょうか?
今だとSQLに接続したい時とスクレイピングする時に読み込むクラスが分けれないので困っています

20 :デフォルトの名無しさん :2018/04/09(月) 11:56:58.59 ID:xaQ7bksS0.net
>>19
これはTestクラスを作成して単独でビルドし
これを参照させたSQLクラスとスクレイピングクラスに継承させて扱うのが正解なのでしょうか?

21 :デフォルトの名無しさん :2018/04/09(月) 23:41:29.92 ID:XPDmd+wz0.net
C#というよりクラスタイプoop全般の話だと思うのですが、クラスを呼んだ時のパラメータは、コンストラクタに与えるのが良いのでしょうか、メソッドに与えるのが良いのでしょうか
両方できるので無造作に使ってるのですがOO的に間違った事をしていそうで

よろしくお願いします

22 :デフォルトの名無しさん :2018/04/09(月) 23:43:55.56 ID:fSLWGn340.net
クラスを呼ぶってなに?

23 :デフォルトの名無しさん :2018/04/09(月) 23:44:42.97 ID:MCzflE3YM.net
場合によるのでその都度考えてください

24 :デフォルトの名無しさん :2018/04/10(火) 06:59:42.37 ID:EnsNk18IM.net
>>22
インスタンスを作るのとメソッドをコールすることと意識が混ざっている素人で失礼しました

インスタンスを作る時にパラメータを渡すのと、メソッドの引数にパラメータを渡すの、oo的にはどちらが正しいのかお聞きしたかったです

25 :デフォルトの名無しさん :2018/04/10(火) 07:04:03.54 ID:EnsNk18IM.net
>>23
oo的にはこう、というのは無く、スマートに記述できる方で良いという感じでしょうか?

今自分は気分や雰囲気で使い分けてるのですが、実はルールがあるのではと心配しておりました

26 :デフォルトの名無しさん :2018/04/10(火) 12:42:18.35 ID:KG4vxU3va.net
>>25
正直何が聞きたいのかよく分からんけど、
いろいろ想像してみると、たぶん本当に聞きたいことはコンストラクタ云々じゃなくて
あるデータをプロパティとしてオブジェクトに持たせるかどうかをどういう基準で決めるか、
じゃないのかな。

例えばSystem.Timers.TimerにはpublicなプロパティIntervalがあるけど、
これをprivateかprotectedにしてユーザーからアクセスできないようにして、
Startメソッドの引数として与える仕様でも同じじゃないのかと

27 :デフォルトの名無しさん :2018/04/10(火) 20:54:09.92 ID:i+408CBT0.net
>>26
理解が浅く説明が拙くすみません
そのような事です

どちらでも出来てしまいますが、使い分けのルールや指標はあるのかなと

28 :デフォルトの名無しさん :2018/04/10(火) 23:02:10.41 ID:IMFDPHVza.net
そのパラメーターが変更可能なのかどうかでやり方がいろいろある

インスタンスを作るときに最初に決めたパラメーターを変える必要がないもしくは変えたくないなら
コンストラクタで渡してしまえばいい

毎回変えるかもしれないならメソッドで渡せばいい

29 :デフォルトの名無しさん :2018/04/10(火) 23:36:50.93 ID:v03YChI+M.net
>>27
そんなもの無い
その時々で苦悩して答えを出すしかない
プログラミングってそういう仕事

30 :デフォルトの名無しさん :2018/04/10(火) 23:44:32.77 ID:yYP5pHxz0.net
>>21
教科書的にはメソッドの引数しかありえない

31 :デフォルトの名無しさん :2018/04/11(水) 00:46:06.20 ID:qa2FEnRqa.net
>>27
基本的には全部引数でも間違いではない
あくまで関数が主であって、オブジェクトは関数のコンテキストに過ぎない、と考えるのが今時のプログラミング
端的に言えば、毎回同じ引数を渡すのが面倒だと思うならクラスにすることを検討するというだけの簡単な話

32 :デフォルトの名無しさん :2018/04/11(水) 00:50:03.90 ID:mkq9MyW9a.net
>>27
いや、プロパティとして持つべきデータかの判断は一般的にはそんなに難しくないはず。
上に例に挙げたTimerだって、Startの引数でIntervalを指定する方式だと
問題や不自然さがあることはちょっと考えれば分かるはず

33 :デフォルトの名無しさん :2018/04/11(水) 01:12:44.96 ID:KJoDibHNM.net
>>32
別に問題も不自然さも無いよ
System.Timers.TimerやSystem.Windows.Forms.Timerのインターバルがプロパティなのは、デザイナで設定できる必要があるからだ
実際、デザイナに貼れないSystem.Threading.Timerはコンストラクタかメソッドで周期を設定する
(ライブラリではなく)アプリケーションの開発に関して言えば、データクラス以外でプロパティを使う必要があるケースは稀だよ
データクラスを除けば、一度設定した値を取り出したくなるのは殆どの場合設計が間違っている

34 :デフォルトの名無しさん :2018/04/11(水) 01:25:13.83 ID:nomvJ3n3M.net
>>21
・コンストラクタで渡す
var a = new Test(1, "A");

・メソッドで渡す
var b = new Test().SetId(2).SetName("B");

・オブジェクト初期化子で渡す
var c = new Test{
 id = 3,
 name = "C",
};

通常はコンストラクタで、メソッドチェーンはファクトリパターンでよく使う
オブジェクト初期化子は閉じてるクラスの可読性を上げたいときに使う
まあ統一性さえ確保出来ていればどれを選んでも大差ないよ

35 :デフォルトの名無しさん :2018/04/11(水) 01:44:35.49 ID:mkq9MyW9a.net
>>33
System.Threading.Timerがプロパティを持たないのは何か意図があると思うが
使ったことがないのでよくわからない。(軽量であることが「コンセンプトだから?
あるいんた単に設計者の頭が古いだけかもしれない}

TimerのIntervalをプロパティとして実装しなかった場合。

(1) タイマー動作時にIntervallを変更するためにはStartを実行することになるが、
OOP的に不自然

(2) そもそもTimerオブジェクトは、少なくとも動作時にはIntervalの値を保持している。
だったらこれをプロパティとして公開する方が自然

36 :デフォルトの名無しさん :2018/04/11(水) 02:01:15.23 ID:nomvJ3n3M.net
>>35
動作中にIntervalの値を変えられると困る場合、
Start時のみ設定可能にするのは別に不自然でもないよ
OOPの目的はメンテナンス性と事前の徹底したバグ潰しだから、値を変更できるルートを予め絞っておくことは理に適ってる

37 :デフォルトの名無しさん :2018/04/11(水) 02:46:11.71 ID:mkq9MyW9a.net
>>36
現実と違う仮定を置いたら何でも言える

38 :20 :2018/04/11(水) 07:04:30.38 ID:Q5HB2TyRM.net
色々とアドバイスありがとうございます
統一性があれば、後はデザパタに従うか等で決定するのが一般的と解釈しました
田舎の中小1人情シスでコードレビューもされないので世間の動向が分からず参考になります

都会の大手の人は切磋琢磨し洗練されたコードを書くんだろうなと憧れます

39 :20 :2018/04/11(水) 07:52:53.54 ID:Q5HB2TyRM.net
>>29
あまり我流過ぎるとチーム開発の時に混乱するという心配がありまして

40 :デフォルトの名無しさん :2018/04/11(水) 11:00:26.66 ID:uvPDHOSBM.net
>>39
対象を無視してオレオレナントナク基準で決めるほうが我流
物事にはそれぞれ特性があり最適な答えはいつも違う
それを導き出すには都度考えて議論を重ね実験を繰り返すしかないんだよ

41 :デフォルトの名無しさん :2018/04/12(木) 20:03:06.85 ID:XQKU/nO90.net
見積り終わってるのに時間かけても無駄
一円の利益にもならない
今回の開発で黒字でなければ2回目はない
よって一番時間がかからない方法が正義

42 :デフォルトの名無しさん :2018/04/12(木) 20:52:33.85 ID:bR5mzWUWM.net
業務系はそれでいいのかもね
保守するのは自分でも自社でもない
ならどんなに汚いコードでも早くしあげたほうが勝ち
ただし納品された顧客はとんでもない借金を背負うことになる
罪悪感ってないのかね

43 :デフォルトの名無しさん :2018/04/12(木) 21:50:50.18 ID:XQKU/nO90.net
>>42
いや
君のやり方だって怪しいもんじゃない?
具体的に○○さんのコードは見易くてわかりやすいですねって言われた実績あるの?
無いのに勝手な妄想で自分のコードを保守しやすいと思い込んでない?

44 :デフォルトの名無しさん :2018/04/12(木) 21:55:35.29 ID:kW0JyjC+0.net
まーた始まった

45 :デフォルトの名無しさん :2018/04/12(木) 21:57:30.18 ID:XQKU/nO90.net
>>44
お前なんか全身elseで強化した俺の敵じゃねぇ

46 :デフォルトの名無しさん :2018/04/12(木) 22:06:57.86 ID:kW0JyjC+0.net
>>45
ナマ言ってすみませんでした

47 :デフォルトの名無しさん :2018/04/13(金) 01:45:08.04 ID:JNl7+QPK0.net
VisualStrudioのC#でPS4を入力を表示するソフトを作りたいんだけども、
どんなライブラリが便利かな?

48 :デフォルトの名無しさん :2018/04/13(金) 06:13:51.49 ID:Om81X5Te0.net
>>47
PS4の入力ってなに?

コントローラの事?

49 :デフォルトの名無しさん :2018/04/13(金) 07:25:42.50 ID:ko86uHhA0.net
日本語でOK

50 :デフォルトの名無しさん :2018/04/13(金) 18:47:05.89 ID:GNeQyvWjM.net
PS4を窓の外に出力する
入力すならまずはアマゾンで注文

51 :デフォルトの名無しさん :2018/04/14(土) 14:59:27.41 ID:x6wpDOBa0.net
作画ソフトを作成したいのですが
解像度より大きな領域を扱うことになりそうです
10%〜800%まで拡大縮小ができて
編集操作を行う必要があるのですが
どのような造りにしたら良いのでしょうか?
自分でスクロールバーを置いて編集領域は自前で描画するのでしょうか?
PictureBoxのようなコントロールでスクロール操作までできてしまうのでしょうか?

52 :デフォルトの名無しさん :2018/04/14(土) 15:03:33.67 ID:A6JgIv/D0.net
ドロー系?
ペイント系?

53 :デフォルトの名無しさん :2018/04/14(土) 15:08:53.93 ID:x6wpDOBa0.net
>>52
具体的には印刷すると模造紙ぐらいの大きさのでっかい回路図を作成します
保存するファイル形式はXmlです

54 :デフォルトの名無しさん :2018/04/14(土) 15:26:50.36 ID:whWbsAFN0.net
>>50
入力酢?

55 :デフォルトの名無しさん :2018/04/14(土) 16:20:27.70 ID:411sIKLXa.net
>>51
自分でスクロールの機能まで実装してもいいけど、
特に理由がないならコンテナ(例えばPanel)の中にPictureBoxを入れて使うのが
普通じゃないですか

56 :デフォルトの名無しさん :2018/04/14(土) 17:09:28.19 ID:D8vt8UcC0.net
>>51
PictureBoxにスクロールバー表示するのは
https://dobon.net/vb/dotnet/graphics/scrollimage.html
例ではコードでプロパティ設定しているけどデザイナで設定しても同じようにできる

57 :デフォルトの名無しさん :2018/04/14(土) 17:16:13.98 ID:A7r7eR+xa.net
模造紙レベルのでっかいpitureboxで画像のまま編集は現実的じゃないけどね
実際は表示部分だけ都度計算して描画することになる

ドロー系にしてもまあ普通は向いてない
C++でやるような内容だよ

58 :デフォルトの名無しさん :2018/04/14(土) 18:55:16.11 ID:A6JgIv/D0.net
論理座標とワールド座標、デバイス座標をよく理解すべき

59 :デフォルトの名無しさん :2018/04/14(土) 19:31:26.26 ID:x6wpDOBa0.net
>>55-58
ありがとうございます
頑張って見ます

60 :46 :2018/04/14(土) 20:40:54.18 ID:iGVhaI1m0.net
すいません、PS4のコントローラをPCに接続して、
入力ボタンを表示したいのです。

61 :デフォルトの名無しさん :2018/04/14(土) 21:18:11.42 ID:whWbsAFN0.net
>>60
https://game.watch.impress.co.jp/docs/series/ggl/637329.html

62 :46 :2018/04/14(土) 23:01:59.31 ID:iGVhaI1m0.net
配置が違うだけなのか。
でも認識させるにはDirectXのラッパーとか使うしか無さそうなのね。

63 :46 :2018/04/17(火) 01:46:03.23 ID:kRrGnVcd0.net
出来ましたー、ありがとうございます。

DirectInput
http://nanoappli.com/blog/archives/4772
Xinput
https://gist.github.com/kb10uy/7368358

64 :デフォルトの名無しさん :2018/04/17(火) 13:28:00.94 ID:NEdohK8t0.net
Task.Factory.StartNew(またはTask.Run)で生成したスレッドの優先度を変える方法はあるのでしょうか。

65 :デフォルトの名無しさん :2018/04/17(火) 14:11:36.85 ID:NEdohK8t0.net
63ですがスレッドプールを使わず、スレッドで対応することにしました。

66 :デフォルトの名無しさん :2018/04/17(火) 16:42:17.15 ID:joazaAE7M.net
なぜレガシィな方向へ走るw

67 :デフォルトの名無しさん :2018/04/17(火) 17:42:06.89 ID:NEdohK8t0.net
>>66
Taskだと処理中に割り込み?が割と入ってきて、処理時間が遅延してしまうのです。
スレッドレベルで優先度を上げたいと思いまして。
結局Threadにして優先度を上げても割り込みは入ってくるのですが、多少マシになったような気がします。

68 :デフォルトの名無しさん :2018/04/17(火) 18:11:29.55 ID:xGjbcgxza.net
どんだけタイムクリティカルな要件なのよww

69 :デフォルトの名無しさん :2018/04/17(火) 21:11:51.39 ID:kHPr9dOS0.net
パソコンぶん投げてPLCにしよう

70 :デフォルトの名無しさん :2018/04/17(火) 23:58:42.15 ID:zXGef27d0.net
picでも使えよ

71 :デフォルトの名無しさん :2018/04/18(水) 00:12:24.46 ID:WXSfEMqB0.net
>>67
それ単にスレッド生成で遅延しているなんてオチじゃないよな?

72 :デフォルトの名無しさん :2018/04/18(水) 10:23:12.22 ID:+D/RfByR0.net
受託案件なのでC#で作らざるを得ないのです。
自分自身はファーム屋なので、マイコンでやりたいんですけどね。

>>71
まだ遅延の原因はわかってませんです
生成時だけの遅延じゃないので、違うとは思いますが・・・

73 :デフォルトの名無しさん :2018/04/18(水) 12:14:14.43 ID:wyULW0oVM.net
プロセスの優先度もあげるといいらしいぞ

74 :デフォルトの名無しさん :2018/04/18(水) 12:31:04.61 ID:WeKuLBkMM.net
糞多い要素群にlinqで遅延実行+ループとか?

75 :デフォルトの名無しさん :2018/04/18(水) 18:10:56.40 ID:jY7uFFSia.net
>>72
Win32で作る

76 :デフォルトの名無しさん :2018/04/18(水) 21:09:40.32 ID:unjr58vW0.net
>>72
GCやJITは対策してる?

77 :デフォルトの名無しさん :2018/04/19(木) 18:59:16.22 ID:Yr3hu/ey0.net
ユーザーコントロールのプロパティをデザイン時のプロパティウィンドウでコンボボックスにしたく
人様のサイトで恐縮なのですが、以下をほぼコピペしました。

http://blog.okazuki.jp/entry/20070207/1170820895

が、テキストボックスのままで選択肢になりません。
公開プロパティに、なにか別の宣言が要りましたでしょうか?

78 :デフォルトの名無しさん :2018/04/19(木) 19:15:06.26 ID:Yr3hu/ey0.net
継承ユーザーコントロールだったのですが、継承元にも
[System.ComponentModel.TypeConverter(typeof(〜 が必要だっただけみたいです。

すみませんでした。

79 :デフォルトの名無しさん :2018/04/19(木) 19:48:23.98 ID:Yr3hu/ey0.net
引き続きすみません。

たとえばユーザーコントロールに
Folder
File
という2つのstring型の公開プロパティを用意します。

IDEのプロパティウィンドウからFolderを設定(通常のテキストボックス)すると
そのフォルダ内のファイルを舐めてFileの選択肢にしたいのです。

TypeConverterで、静的な候補が出て選択できるところまでは出来たんですが
動的に候補を変更する場合、どうするんでしょうか。

IDEのプロパティウィンドウに、どうアクセスしたらいいのか、そこが分かれば何とかなる気がしてるんですが。

80 :デフォルトの名無しさん :2018/04/20(金) 01:01:44.37 ID:xYBhqDqu0.net
>>79
Visual Studio .NET プロパティ ブラウザによるコンポーネントの本格的な RAD 化
https://msdn.microsoft.com/ja-jp/library/aa302334.aspx#vsnetpropbrow_topic04

このドロップダウンでできると思う

81 :デフォルトの名無しさん :2018/04/20(金) 05:10:41.06 ID:OZAtcLZg0.net
初歩的な質問で申し訳ないのですが、
戻り値なしのメソッドと、引数なしのメソッドはどういう状況で使用するのでしょうか?

戻り値なしのメソッドは
その後にどこかに代入したりする予定はなく出力が目的の場合に使用すると
読んだのですがその通りですか?
万が一、後で代入したくなった場合に備えて取り敢えず戻り値は設定しておいたりしないのでしょうか?

引数なしのメソッドは
引数がない(=変数宣言がない?)とそのメソッド自体、動いてくれないイメージがあるのですが、実際は動きますよね
何も値を与えられていないのに動くのはどうしてですか?

宜しくお願いします・・・

82 :デフォルトの名無しさん :2018/04/20(金) 05:52:22.55 ID:6mS8vUfV0.net
>>81
オーバーロードで検索してみると良い

83 :デフォルトの名無しさん :2018/04/20(金) 06:02:00.71 ID:OZAtcLZg0.net
>>81
例えば
int Add(int a, int b) {
int c;
c = a + b;
return c;
}
というメソッドですと、Add(3, 5)ならaとbにそれぞれ3、5が入りc=8となると思うのですが、
abc = xyz,Add()といった風に使用しても、cの値も何も返ってこないのに、
引数なしのコードを見かける様な・・・

84 :デフォルトの名無しさん :2018/04/20(金) 06:29:51.46 ID:wjKqEKEv0.net
>>81
デフォルト引数で統合しなされ

85 :デフォルトの名無しさん :2018/04/20(金) 09:05:47.03 ID:3LwLCVWq0.net
>>81
メソッドってのは別に数値の計算だけするわけじゃない
何かの処理なので、その処理に引数が必要なら引数を渡すし
その処理に結果があるなら戻り値がある

86 :デフォルトの名無しさん :2018/04/20(金) 09:40:55.97 ID:9jg3Q7S00.net
>>85
横からごめん
処理に結果がないならそれはもう何も処理してないのと同じじゃないの?

87 :デフォルトの名無しさん :2018/04/20(金) 09:50:08.64 ID:3LwLCVWq0.net
>>86
君がうまい説明してあげてね

88 :デフォルトの名無しさん :2018/04/20(金) 10:06:30.92 ID:9jg3Q7S00.net
>>87
>>85の説明が間違ってると言いたいんじゃなくて
単純に理解できなかったんだけど誤解させたならごめん

とはいえせっかくだから自分なりに説明を考えてみたんだけど
プログラムを動かすことが目的じゃなくて人間に読ませてアルゴリズムを
分からせることが目的の場合は最終的な結果は必要ないって感じかな?

89 :デフォルトの名無しさん :2018/04/20(金) 11:57:10.77 ID:DKeEixVwd.net
>>81
メソッドは外注さんへの作業手順書みたいなもん

引数は、その作業に必要な情報がある場合に外部から渡すための窓口
情報不要なら省略できる
引数なし=こっちから情報渡さなくても作業できるよね?みたいな感じ

メソッド内で作業が完了したあと、なんか返事してほしい場合は戻り値をつかう
返事不要の場合void
戻り値なし=作業さえしてくれたら結果レポートいらね!

メソッドコール(外注さんへ仕事依頼)したら作業はちゃんとされるので、結果のレポートを使って、さらになんか作業をしたいなら戻り値よこせよ!って作業手順書に書いておけばいいし、仕事さえしてくれたら、返事不要なら戻り値いらない

90 :デフォルトの名無しさん :2018/04/20(金) 11:59:20.85 ID:o6RSJKQdd.net
>>81
コントロールにupdateってメソッドがあるだろ?
これは自身の再描画をするだけのメソッドなんだから引数を取りようがない
また再描画するだけなのに失敗するわけないんだから戻り値もいらない
無理やり成否を返すこともできるが、失敗する可能性があるメソッドに様変わりし、呼び出し元で失敗を意識した実装にしなきゃいけないから負担を強いることになる
って感じかな

91 :デフォルトの名無しさん :2018/04/20(金) 12:23:49.11 ID:9v7e203Yr.net
引数のとりようも戻り値の返しようもなんぼでもあるわ
へんな忖度みたいな真似すんなボケ

92 :デフォルトの名無しさん :2018/04/20(金) 12:38:55.75 ID:9jg3Q7S00.net
>>89
作業が行われればレポートは要らないというのは例えば殺し屋みたいな?
でもコンピューター上でそれを再現するならターゲットもターゲットの生死も0と1のデータなんじゃないの?
だとしたらそのデータはどこに消えるの???

>>90
同じようなことばっかり聞いて悪いんだけど再描画の結果も0と1のデータなんじゃないの?
それがメモリに残らないのに再描画は成功という意味がわからない

>>91
戻り値の返しようがあるというのは返さない選択肢もあるということ???
戻り値を返さないプログラムに人間に読ませる以上の価値があるとすればそれを教えて欲しい

93 :デフォルトの名無しさん :2018/04/20(金) 12:44:06.99 ID:yZlfbYWOM.net
オブジェクトとは何かね

94 :デフォルトの名無しさん :2018/04/20(金) 12:52:07.95 ID:wBOVlPyYM.net
>>92
横からで悪いけどたとえ話がおかしいし
言ってることが伝わらない

もっとまとめてから書くべき

95 :デフォルトの名無しさん :2018/04/20(金) 12:58:41.12 ID:luJyaFhBa.net
>>81
まあ、一言でいうと愚問だねw
そんなこと考えても時間のムダ。

真面目な話、その疑問はそのまま放置して前に進む方がいいと思う。

96 :デフォルトの名無しさん :2018/04/20(金) 13:08:12.31 ID:9jg3Q7S00.net
>>93
オブジェクト指向ってやつか!
オブジェクトを使うと結果がない処理にも意味があるってこと?

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

>>95
詰め込み教育への皮肉だと思うけど正直分かりにくいかも
もし本気で言ってるならさすがに時代遅れだから考え直したほうがいいよ

97 :デフォルトの名無しさん :2018/04/20(金) 13:26:58.95 ID:luJyaFhBa.net
>>96
経験が足りないために起こる疑問は経験を詰むことでしか解決しない。

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

逆にいえば、>>81の疑問は頭の良い人が考えた難しい理論を理解しないと
解決しないような問題じゃなく、誰でも体験すれば自然と分かる程度の話ってこと

98 :デフォルトの名無しさん :2018/04/20(金) 13:48:46.74 ID:o6RSJKQdd.net
>>92
0と1?何を言ってるのかわからん
14時に集合ってメール出して、全員からわかったみたいな返信きてもうざいだろ?
だから、14時集合(返信不要)ってメールをおくる方が受け取る側も返信しなくていいし、送る側も無駄な受信を減らせるしでwinwin
この辺りは経験だったりセンスだろうな

99 :デフォルトの名無しさん :2018/04/20(金) 14:03:32.43 ID:0EVFmTU60.net
>>96
成否の観点では単にフィールドの値を設定するメソッドを鑑みても
メモリに書き込み失敗の概念があっても、代入に失敗の概念はない
設定前の値を返すにしても、わざわざ退避する処理を強制するのか?

想定外の発生は基本的に例外をぶん投げるものだし
常人が気にしない様な事を考えて躓いてそうである

100 :デフォルトの名無しさん :2018/04/20(金) 19:05:49.61 ID:W6WTRmLV0.net
関数型プログラミングの才能があるな

101 :デフォルトの名無しさん :2018/04/20(金) 20:30:59.54 ID:kti4nAgp0.net
>>96
戻り値がないのは常に「成功」を返す関数と考えて良い
C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない

C言語とかgoみたいに例外という概念がない言語は、成功したかどうかが戻り値に入ってることが多い
それでも絶対に失敗しないか、失敗したらプログラムが強制終了するような処理は戻り値がない場合もある

102 :デフォルトの名無しさん :2018/04/20(金) 21:05:01.73 ID:Yi5F0BBw0.net
>C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
えぇ…

103 :デフォルトの名無しさん :2018/04/20(金) 21:14:39.58 ID:7WlEIf700.net
>>101
> C#では失敗した場合は例外を投げるので、成否を戻り値で判定することはない
ケースバイケース。何でもかんでも例外にしちゃ駄目。

104 :デフォルトの名無しさん :2018/04/20(金) 21:42:51.61 ID:9jg3Q7S00.net
>>97
とりあえず>>95が本気なのとそれが思考停止の詰め込み教育信奉じゃないのは分かったよ
偉そうなこと言ってごめん

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

>>99-103
詳しい人でも意見が割れるくらい難しい問題なのね
>>100は皮肉なんだろうけど意味どころか自分に向けられた言葉なのかも分からないから反応に困る・・・

105 :デフォルトの名無しさん :2018/04/20(金) 21:52:31.13 ID:7WlEIf700.net
>>104
元の発言の「結果が無い」って言葉を勘違いしてる。
関数で処理した結果を返り値と言う形で関数の呼び出し元に伝える必要が無いって意味だ。
ちゃんと意味のある結果は発生している。

106 :デフォルトの名無しさん :2018/04/20(金) 22:00:49.23 ID:kti4nAgp0.net
>>102-103
書き方が変だった
C言語やgoと比べて成否を例外で処理することが多いから戻り値がなくても良い場合が多い程度の意味で言った

>>104
メール送信の結果は戻り値ではない方法で返しているというだけ
C#には例外やイベントのように色々な機構があるから、とりあえず細かいことは気にせず先に進んだ方がいい

107 :デフォルトの名無しさん :2018/04/20(金) 22:22:51.74 ID:UaVetxYYM.net
関数という言葉に惑わされてるということかな

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

ほかの言語で戻り値がないものは関数と区別してる言語もあるけど
わざわざ二種類つくるより戻り値なしで共通にしてある

108 :デフォルトの名無しさん :2018/04/20(金) 23:07:04.14 ID:0EVFmTU60.net
>>104
その辺は想定外と書いたように>>103よろしくケースバイケースだよ
十分想定され例外情報すら要らんなら戻り値で成否を返す事もあるし
InvalidProgramExceptionみたいに言語レベルでは処理できない物もある

話が逸れたけどOSレベルでは例外を発生させる余地などが有ったとしても
プラットフォーム次第になったりと言語レベルで突き詰めない場合は多い

109 :デフォルトの名無しさん :2018/04/20(金) 23:38:50.80 ID:iIb0CR1w0.net
いろいろ調べたり考えたりしたのですが、解決出来ないので質問します。
https://dotnetfiddle.net/SoCII1
このようなコードがあって
List<ITest>にいれていったときに
ListのXだけを全て足して返す関数は出来たのですが、今後ITestのプロパティは増える予定で、それぞれに足して返す関数をつけたいです。
そのときに似たようなコードになるので一つに纏めようとしたのですが中々できず困っています。どのような書き方をすればいいでしょうか?

110 :デフォルトの名無しさん :2018/04/21(土) 02:21:21.95 ID:lHgu/nQp0.net
>>109
基本的にはプロパティを動的に指定するのはリフレクションとかDictionaryを駆使とか、何らかの形でコストを払うことになると思う
状況にもよるけど、コンパイル時に確定してるならT4テンプレートとかコード生成とかで対応するのが一番正しいんじゃないかな

111 :デフォルトの名無しさん :2018/04/21(土) 02:34:40.78 ID:m0t/bmNLa.net
>>109
そんなものは自作しなくてもList自身(正確にはIEnumerable<T>だけど)が持ってるw
名前もそのまんまSumだからよくMSDNを見てみ
https://msdn.microsoft.com/ja-jp/library/6sh2ey19.aspx

112 :デフォルトの名無しさん :2018/04/21(土) 03:42:29.63 ID:MaG6OThU0.net
>>111
んー、エスパーだけど、質問者はプロパティをforeachみたいに回して全てにsumするようなのをプロパティの数に限らず1行で書きたいってことじゃね?

113 :デフォルトの名無しさん :2018/04/21(土) 07:59:48.29 ID:z4AHgN+yd.net
>>104
メソッドの戻り値とコンピュータの世界は全く関係がない
低級のマシン語をわかりやすくするための高級言語なんで初心者用スレで〜というよりは見当違いなことを言ってる

っで、結果とは低級レベルでの結果とメソッドレベルの結果のどちらをさしている?
低級レベルでの結果が表に出てこないのは普通のこと
メソッドレベルで見てもメールの送信済マークを含めてないのでメソッド戻り値の返さない

114 :デフォルトの名無しさん :2018/04/21(土) 08:37:04.35 ID:i7kmKmol0.net
>>110
リフレクションについて調べて何とか出来ました!ありがとうございます!
>>111,>>112
もう少し具体的に書いていれば良かったですよね・・・今後質問するときはもっと詳しく書くので、そのときはよろしくお願いします!

115 :デフォルトの名無しさん :2018/04/21(土) 10:09:06.82 ID:XwcbmKc5a.net
連続時間的な関数ってあります?

116 :デフォルトの名無しさん :2018/04/21(土) 10:52:04.99 ID:WnG+wEwt0.net
連続時間 is 何

117 :デフォルトの名無しさん :2018/04/21(土) 11:00:42.32 ID:k3YYD8ov0.net
エポック秒のことかなぁ

118 :デフォルトの名無しさん :2018/04/21(土) 12:09:05.27 ID:Y1+gKOzZa.net
アナログメーター的なやつです

119 :デフォルトの名無しさん :2018/04/21(土) 12:39:56.06 ID:k3YYD8ov0.net
>>118
プログレスバーでググってみてはどうか

120 :デフォルトの名無しさん :2018/04/21(土) 13:49:43.77 ID:gbvJ8fZ/a.net
時空連続体と空目した

121 :デフォルトの名無しさん :2018/04/21(土) 18:22:05.73 ID:V5ZTEj450.net
プログレスバーってもろデジタルメーターじゃないですか

数百〜数千の筋繊維を一本の糸で表現できるような関数はないですかね

122 :デフォルトの名無しさん :2018/04/21(土) 18:29:18.80 ID:LQq77Lfe0.net
you!画像ファイル扱っちゃいなyo!

123 :デフォルトの名無しさん :2018/04/21(土) 18:52:17.79 ID:rKiuu7+10.net
>>121
>>118のアナログメーターも全く関係ないんだけど?
筋線維もよく意味が分からないし、糸の振動の軌跡の描画みたいなことやりたいのなら自分で作るしかないよ

124 :デフォルトの名無しさん :2018/04/22(日) 00:35:03.08 ID:XfnBBJY5M.net
プリンタの印刷設定の縦横を変更したいです。
DefaultPageSettings.Landscape プロパティから変えられるのは確認しましたが
一時的なものではなく、プログラムが終了したあとも変わったままにしておきたいのですが
なにか方法はないでしょうか?
http://bbs.wankuma.com/index.cgi?mode=al2&namber=2377&KLOG=2
このサイトも参考にしてSetHdevmodeなどもやってみましたが、プログラム終了後にもとに戻ってしまいます。
Windows7,10 64bitです

125 :デフォルトの名無しさん :2018/04/22(日) 00:38:42.31 ID:2TRizD7z0.net
筋繊維を糸で表現ってそれもう物理演算じゃん

126 :デフォルトの名無しさん :2018/04/22(日) 01:10:17.94 ID:6eouzp2p0.net
何がしたいのかよう分からん
>数百〜数千の筋繊維を一本の糸で表現できるような関数
が欲しいなら
「アナログメーター」なんて単語は出てこんと思うのだが

なんか特殊な知識が必要なことやってるなら
なおさらキチンと説明しないといかんだろう

127 :デフォルトの名無しさん :2018/04/22(日) 02:16:18.41 ID:I1dKrIqPa.net
>>124
次回そのプログラムを起動した時も同じ設定が適用されるようにしたい、
という意味なら、Landscape を永続化すればいいだけでしょう。

同じ設定が他のプログラムにも適用されるようにしたい、って意味なら、
たぶんそんなことは出来ないんじゃないかと...
よく知らんけど

128 :デフォルトの名無しさん :2018/04/22(日) 07:35:23.33 ID:XfnBBJY5M.net
>>127
後者の方を考えています。
なにか方法があればいいのですが、、、

129 :デフォルトの名無しさん :2018/04/22(日) 09:24:44.12 ID:RctEGmkE0.net
他のプログラムでも同じ設定を使いたいんならプリンタドライバの設定変更以外に方法はない
てかそれってC#関係ないよね

130 :デフォルトの名無しさん :2018/04/22(日) 19:36:51.14 ID:YjWQK7FP0.net
[[['[] ]]] { {] ]][ '[][][] [][] [][][]  [] '[] []

131 :デフォルトの名無しさん :2018/04/22(日) 21:23:13.30 ID:AB//w8nmp.net
c#勉強始めたての者です。
indexofで文字列を検索しようとしているのですが、長文を検索するとエラーが出てしまいます。

MSDNを見ると戻り値がint32とあり、戻り値がintの範囲を超えるとlongエラーになるように推測していますが対応方法はあるのでしょうか。

132 :デフォルトの名無しさん :2018/04/22(日) 21:24:53.81 ID:AB//w8nmp.net
すみません上記文中のlongは誤植ですので読み飛ばしてください。

133 :デフォルトの名無しさん :2018/04/22(日) 21:30:18.18 ID:PsQCMKRd0.net
そう言われるともうlongしか見えない

134 :デフォルトの名無しさん :2018/04/22(日) 21:37:33.88 ID:hhQLBFvv0.net
文字数がintに収まるように文字列を切り出しながら検索すればいいんじゃないか
もちろん切れ目に検索対象の文字列が有るときの対策して切り出さなきゃならんけど

135 :デフォルトの名無しさん :2018/04/22(日) 22:10:29.71 ID:VNNE7LSc0.net
ありがとうございます。
matchメソッドというのを見つけました。
全然見つからなかったのに投稿し出来すぐ見つかるものですね。
matchで出来なかったらint分割にトライしようと思います。

136 :デフォルトの名無しさん :2018/04/22(日) 22:23:25.89 ID:f9F/Sp5R0.net
フォーム上のコントロールを、プログラムから参照するいい方法はないでしょうか

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

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

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

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

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

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

なお、今回のフォームでは、とりあえずチェックボックスの名前は初期値(checkBox1など)に
なっています

137 :デフォルトの名無しさん :2018/04/22(日) 22:25:29.08 ID:tqpEX+7y0.net
>>136
if (Controls[i] is CheckBox)

138 :デフォルトの名無しさん :2018/04/22(日) 22:43:50.37 ID:VtQV/Dmoa.net
>>136
根本的に考え違いをしてると思う。
たぶんありもしないものをあるはずだと勝手に思い込んでる。

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

デザイナには君が欲しいと思っているものを忖度して自動で作ってくれるような
都合のいい機能は存在しない。

139 :デフォルトの名無しさん :2018/04/22(日) 23:18:57.35 ID:f9F/Sp5R0.net
>>137
とりあえずチェックボックスだけを選択することは可能になりました
順番はやはり思っているとおりにいきませんが、これは実行結果を見つつ、デザイナで
並べ替えるしかないかなと思い始めました

>>138
デザイナが忖度してくれるとは思っていないので、プロパティか何かで明示的に選択する
事ができないかな、と思ったのです
以前VBAで似たようなものを作った際は、
Controls("CheckBox" & i).Caption = Cells(i, 1)
こんな選択の仕方ができたので、c#でもなにか方法はあるのではないかと思いました

140 :デフォルトの名無しさん :2018/04/22(日) 23:35:35.52 ID:Kp2niQOT0.net
>>139
コントロールに名前付ければいいじゃん
フォームにあるコントロールをどうやって特定したいと思ってるの?

141 :デフォルトの名無しさん :2018/04/22(日) 23:50:44.34 ID:f9F/Sp5R0.net
>>140
例えば
Panel.Controls.CheckBox[i]
みたいな形で指定できればいいなと思ってるんですが、残念ながらそうできないですね

>>138
が書いている、自分で明示的にテーブルを宣言するというのは、例えば
cbox[1] = CheckBox1;
cbox[2] = CheckBox2;
とかいうコードを予め書いておく、ということでしょうか?

142 :デフォルトの名無しさん :2018/04/23(月) 00:02:33.07 ID:Xa6TKCtV0.net
>>141
意味がわからない
何がしたいの?

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

Aにしか目が行ってないけど@をやらなきゃいけない時点で
Aの方法なんてエレガントにできたってウンコブリブリじゃん

143 :デフォルトの名無しさん :2018/04/23(月) 02:11:14.44 ID:kNAX3uRd0.net
オムツの取り替えまでやって欲しい要介護は大人しくVBやってろ

144 :デフォルトの名無しさん :2018/04/23(月) 03:09:44.29 ID:0OUySOiKa.net
>>141
だから、配列が欲しいなら配列を自分で作ろうよ。

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

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

これ書くのがそんなに面倒?
変な方向に努力する方が余程面倒でしょ
ローカル変数じゃなくてメンバ変数かプロパティとして実装する場合だって手間は大差ないよ

145 :デフォルトの名無しさん :2018/04/23(月) 06:08:01.85 ID:wp3u/AuE0.net
>>144
配列を書くのは別に面倒でもなんでもないです
コピペしてちょっと直せば済むので

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

>>138
が書いてくれたように、「ありもしない物をあるはずだと思い込んでる」のかもしれません

146 :デフォルトの名無しさん :2018/04/23(月) 06:12:48.73 ID:Xa6TKCtV0.net
>>145
それって同じフォーマットの行が並んだ設定ファイルみたいになんでしょ?
どの部分を自動でやってくれると思ってん?

147 :デフォルトの名無しさん :2018/04/23(月) 07:30:25.22 ID:wp3u/AuE0.net
>>146
自動でやってくれると言うか、Controls[n] の n に相当する部分を、何らかのプロパティで
持っているのではないかと思ったのです
それがわかれば、IDEでプロパティを書き換えてやればそれで済むな、と

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

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

みたいな形で指定できないかな、と思っていたのですが、これは無理そうですし

148 :デフォルトの名無しさん :2018/04/23(月) 07:45:09.58 ID:7CTglbRxa.net
配列作って突っ込んどくのが何より簡単だし自由だろ

149 :デフォルトの名無しさん :2018/04/23(月) 08:09:08.34 ID:voecBiJS0.net
>>147
インデクサじゃ駄目なの?

150 :デフォルトの名無しさん :2018/04/23(月) 08:16:30.00 ID:C4a+50u5M.net
>>147
ちがくね?
お前がやりたいのって別のデータとid(?)が一致する項目にデータを入れていきたいんじゃねーの?
でもそれってコントロールを特定する必要があるんだよね?
コントロールとデータを紐付ける何かはあるの?

151 :デフォルトの名無しさん :2018/04/23(月) 08:33:16.26 ID:KdhM7QliM.net
GetAllControlsのカウント取るとかそういう?

152 :デフォルトの名無しさん :2018/04/23(月) 08:37:13.12 ID:+9lDlXeaM.net
Type.GetPropertiesの方かな

153 :デフォルトの名無しさん :2018/04/23(月) 09:14:18.74 ID:y08K2+qf0.net
VB6はコントロール配列があったけどなー。.Netの世界にはないからの。

154 :デフォルトの名無しさん :2018/04/23(月) 12:01:51.66 ID:joGGyVH30.net
ttps://dobon.net/vb/dotnet/control/findcontrolbyname.html
名前で探せばいいのでは?

155 :デフォルトの名無しさん :2018/04/23(月) 12:30:43.09 ID:b1ST+81Ba.net
だから配列に突っ込めば済む話を何でわざわざより面倒な方法で解決しようとするのw

156 :デフォルトの名無しさん :2018/04/23(月) 12:34:22.72 ID:HUKatAJtr.net
>>150
いや、単純にファイルから読み込んだ名前で、チェックボックスの文字を変えたいだけです
例えばファイルの中身が 犬,猿,雉だったら?CheckBox1-3の文字をそれぞれ犬、猿、雉にしてCheckBox4-20は「使用不可」にでもするような
だから機械的に参照できればよかったのです

>>154
これでほぼ解決です、ありがとうございます

157 :デフォルトの名無しさん :2018/04/23(月) 12:39:13.94 ID:HUKatAJtr.net
>>155
まあ一言でいうと、わざわざ自分で配列を作らなくても、それを実現する方法はすでに存在するだろうと思ってたのです
配列作ったら「そんなことしなくてもこう書けば一発で参照できるのに」って言われる方法があるんじゃないかと

158 :デフォルトの名無しさん :2018/04/23(月) 12:39:38.75 ID:+9lDlXeaM.net
>>156
その下にインデクサによる説明もあるだろw

159 :デフォルトの名無しさん :2018/04/23(月) 13:33:10.44 ID:48XgAlPp0.net
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Name ).ToArray();
}

private CheckBox[] checkBoxes;
}

160 :デフォルトの名無しさん :2018/04/23(月) 17:06:56.96 ID:FWk6fNJV0.net
public class B : private A
{

}

みたいなこと C# じゃ出来ないんだっけ?

161 :デフォルトの名無しさん :2018/04/23(月) 17:10:12.77 ID:BY7S8wKYd.net
>>160
継承元をprotectedにすれば継承したクラスからしかアクセスできないようにはできる

162 :デフォルトの名無しさん :2018/04/23(月) 17:25:36.44 ID:b1ST+81Ba.net
>>160
何言ってるのかわかりませんw

163 :デフォルトの名無しさん :2018/04/23(月) 18:05:17.14 ID:BY7S8wKYd.net
そのクラス経由でしかアクセスできないようにしたいってことじゃないの?

164 :デフォルトの名無しさん :2018/04/23(月) 18:18:07.68 ID:CCSIsfHWM.net
ゆとりしか居ないのかなぁ
C#はprivate継承はサポートしてないよ
フィールドに持たせて移譲メソッド書くしかない

165 :デフォルトの名無しさん :2018/04/23(月) 18:31:05.83 ID:VMRJeQmYd.net
>>164
ゆとりなんてもうオッサンやでおじいちゃん?

166 :デフォルトの名無しさん :2018/04/23(月) 18:38:07.42 ID:BY7S8wKYd.net
これ参考にすればいいのかな
http://ufcpp.net/study/csharp/oo_conceal.html

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

private protected (C# 7.2 以降)同一プロジェクト内のクラス内部、かつ、派生クラスの内部からのみアクセス可能
こういうこと?

167 :デフォルトの名無しさん :2018/04/23(月) 18:52:13.60 ID:Xa6TKCtV0.net
>>156
それで解決しねーだろ
バラっバラにくんじゃね?
俺はてっきりコントロールの
座標でソートして名前付けたいのかと思った

168 :135 :2018/04/23(月) 21:02:25.52 ID:wp3u/AuE0.net
皆様いろいろありがとうございました

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

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

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

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

>>167
これで解決しました
158の方法で解決するかと思っていたのですが、やってみたところバラバラの順番でした
皮肉でもなんでもなく、コントロールの座標でソートとか、なぜそういう操作をしたいのだろうと
推測したのか教えていただけると嬉しいです
今後も質問すると思いますので、疑問点がわかりやすい文章を意識する必要があるので

169 :デフォルトの名無しさん :2018/04/23(月) 21:07:14.52 ID:QriAiZTC0.net
今日からC#勉強し始めたけど、
結構ネスト深くなる言語っぽいね、これ。こんな…


namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
try
{
checked
{
sbyte a = 64;
sbyte b = 65;
sbyte c = (sbyte)(a + b);
}
}
catch (OverflowException ex)
{
Console.Write(ex.Message);
}
}
}
}

170 :デフォルトの名無しさん :2018/04/23(月) 21:09:42.34 ID:b1ST+81Ba.net
>>168
いやいやいやcheckBox1 とか checkBox2 とかはリテラルじゃないってw
ただの識別子(フィールド名)

コードにリテラルを埋め込むというか、コンパイル時に誤りを検出できない
(普通の理解では)お行儀の悪いコードになるのはむしろ>>154みたいな方法だってw

171 :デフォルトの名無しさん :2018/04/23(月) 21:09:53.25 ID:QriAiZTC0.net
namespaceとかcheckedがブロックなのが何かなぁ…

172 :デフォルトの名無しさん :2018/04/23(月) 21:27:15.55 ID:wp3u/AuE0.net
>>170
おっと・・・
どうやら根本的なところで間違っていたようです
書いてあるとおりだとすると、質問とレスが噛み合っていない理由がわかりました
わざわざ行儀の悪い書き方を探していたのか

173 :デフォルトの名無しさん :2018/04/23(月) 21:37:46.50 ID:48XgAlPp0.net
>>168
>>159はOrderBy()でチェックボックスの名前(Name)順にソートしてる。
Nameの代わりに、TabIndexかTagを設定してそれを利用しても良い。
というか、Nameだとチェックボックスが10個以上になるとソートが望むようにならないか。

174 :デフォルトの名無しさん :2018/04/23(月) 21:45:21.31 ID:Xa6TKCtV0.net
>>168
おそらく配置したコントロールから欲しい情報は座標とサイズぐらいしかない
それらの特定情報は別ファイルにある
なのでコントロールが上から
もしくは左からか順番に取得できれば
別ファイルに記述した通りの順番で情報を並べることができる
Controlsで取得できる順番はよく知らないけど
作った順かあるいわなんの特徴もなくランダムか何かを保証するものではないのかな?と

175 :デフォルトの名無しさん :2018/04/23(月) 22:10:47.18 ID:48XgAlPp0.net
>>174
Controlsが返す順番は保証されてないけど、自分でソートすれば良い。

(1)TabIndex順 (各CheckBoxにタブオーダー(TabIndex)を設定しておく)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.TabIndex ).ToArray();
(2)Tag順 (各CheckBoxのTagに数値を設定しておく)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Tag ).ToArray();
(3-1)Location順(左から)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Location.X ).ThenBy( x=> x.Location.Y ).ToArray();
(3-2)Location順(上から)
this.checkBoxes = this.Controls.OfType< CheckBox >().OrderBy( x => x.Location.Y ).ThenBy( x=> x.Location.X ).ToArray();

176 :デフォルトの名無しさん :2018/04/23(月) 22:33:20.75 ID:fnmaDcrK0.net
>>156
そういう使い方なら、チェックボックスを先に作っておくんじゃなくて
ファイルから読んだ内容で動的に作っていった方が手っ取り早い
どうせチェックボックスは全部等間隔に並べるんじゃろ?

177 :デフォルトの名無しさん :2018/04/23(月) 22:53:14.98 ID:pYJnxPYX0.net
WPFのサンプルでありそうな話だ

178 :デフォルトの名無しさん :2018/04/23(月) 23:04:57.82 ID:0nhwdYRFa.net
>>127,>>129
>>124です
SetPrinter関数を使用することで実現できました。ありがとうございました。

179 :デフォルトの名無しさん :2018/04/24(火) 00:40:53.09 ID:U7B9av/W0.net
>>169
そのtry意味ないんだけど。。

180 :デフォルトの名無しさん :2018/04/24(火) 00:55:02.77 ID:P/LpDfjz0.net
>>179
ネストのイメージ書きたかっただけだろうよ

181 :デフォルトの名無しさん :2018/04/24(火) 06:02:26.80 ID:PLNFE8AC0.net
>>174
なるほど、コントロールから情報を取得する必要があると思えたのですね
実際はそれ以前の段階でしたが

>>176
それも考えたのですが、デザイナで画面を確認したいので、静的に用意して
おきたいという結論になりました
動的に置くほうが難易度高そうだ、と思ったのもありますが

182 :デフォルトの名無しさん :2018/04/24(火) 11:44:27.10 ID:MJ0NRymv0.net
>>179-180

「意味無い」って、どういう意味?

183 :デフォルトの名無しさん :2018/04/24(火) 12:45:33.19 ID:MJ0NRymv0.net
うぇぇ、C#、goto文使えるし…

184 :デフォルトの名無しさん :2018/04/24(火) 13:15:16.40 ID:MJ0NRymv0.net
うーん、string x = "10"; に対して
x.toString(); するんじゃなくて、int.Parse(x); するのか…。
xオブジェクトにintegerを吐き出させるのではなく、
integerオブジェクトにxオブジェクトを与えてintegerを吐き出させる…。

これは初めての体験だな…。

185 :デフォルトの名無しさん :2018/04/24(火) 13:18:45.32 ID:Ajvhvjmq0.net
何もかも間違っててワロタw

186 :デフォルトの名無しさん :2018/04/24(火) 13:34:52.91 ID:MJ0NRymv0.net
なにゆえ?

187 :デフォルトの名無しさん :2018/04/24(火) 13:45:01.31 ID:MJ0NRymv0.net
expression-bodied関数は、なんかエロいな…

188 :デフォルトの名無しさん :2018/04/24(火) 13:46:08.52 ID:MJ0NRymv0.net
やってる事は違うけど、考え方的にはCのマクロに近いのかな…

189 :デフォルトの名無しさん :2018/04/24(火) 13:50:59.68 ID:MJ0NRymv0.net
LINQ…、エロいな…。

190 :デフォルトの名無しさん :2018/04/24(火) 13:53:53.94 ID:MJ0NRymv0.net
関数名がアッパーキャメルなのは感心せんなぁ…

191 :デフォルトの名無しさん :2018/04/24(火) 14:00:18.73 ID:a0zqzGgA0.net
ここ質問スレなんで日記は他所でな

192 :デフォルトの名無しさん :2018/04/24(火) 14:04:20.23 ID:MJ0NRymv0.net
なんだよ、ToString()メソッドあるじゃねぇかよ…。

193 :デフォルトの名無しさん :2018/04/24(火) 14:05:02.22 ID:MJ0NRymv0.net
>>191

ごめん。

質問です。なんだよ、ToString()メソッドあるじゃねぇかよ…

194 :デフォルトの名無しさん :2018/04/24(火) 14:39:12.39 ID:5gRbnpaG0.net
VisualStudioでC#のフォームアプリを開発するときに
プロジェクトのプロパティから
出力の種類を「コンソールアプリ」にして
デバッグ用のConsole.WriteLineを出力できるようにしてるんだけど
リリースするときは、種類を「Windowsアプリ」にするだけで
コード中のConsole.WriteLineはコメントアウトとかしなくても
大丈夫ですか?

195 :デフォルトの名無しさん :2018/04/24(火) 15:12:41.47 ID:aRAC41/V0.net
>>194
デバッグ用に文字列を出したいなら、using System.Diagnostics;して、Debug.WriteLine()とか使うべき。
これならリリースビルドにするだけで無効になるからコメントアウトも不要。
リリースビルドでも使いたいなら、Trace.WriteLine()。

196 :デフォルトの名無しさん :2018/04/24(火) 17:00:53.50 ID:Le/zmSZT0.net
>>194
パイプで繋ぐとみえちゃうよ

197 :デフォルトの名無しさん :2018/04/24(火) 17:22:41.52 ID:5gRbnpaG0.net
>>195
おお、ちゃんとデバッグ用のがあるんだ
聞いてよかった
ありがとう

>>196
なるほど
別に見られて困るようなものでも無かったけど
無知を晒す所だった・・・

てか、独学でやってると気づかずおかしなことやってそうで怖いわ
たまたま、ネット上で解説見つかるか
質問して教えてもらえるかの
綱渡りで進んでるw

198 :デフォルトの名無しさん :2018/04/24(火) 19:15:00.82 ID:QP8ofl3+M.net
>>193
おまえ出身言語化どこだよw
レヴェルが低すぎるぞ

199 :デフォルトの名無しさん :2018/04/24(火) 20:32:35.47 ID:AF96232m0.net
引数の文字列が、データグリッドに含まれていない場合だけ追加したいんですが、追加されません。
何が原因でしょうか?

void AddToDataGrid(string[] strs)
{
 bool exists = false;

 foreach(string str in strs)
 {
  for(int i = 0; i <= view.Rows.Count; i++)
  {
   if(str == view[0, i].Value.ToString())
    exists = true;
  }
  if(!exists)
  {
   view.Rows.Add(str);
  }
 }
}

200 :デフォルトの名無しさん :2018/04/24(火) 20:43:20.78 ID:Ajvhvjmq0.net
>>199
>view.Rows.Add(str);
これじゃね

201 :デフォルトの名無しさん :2018/04/24(火) 20:48:40.81 ID:AF96232m0.net
>>200
view.Rows.Add(str);
だけだと正常に追加されるので、条件判定かループあたりに原因があると思っています。
フラグの位置がおかしいので以下に修正してもダメでした。
void AddToDataGrid(string[] strs)
{
 foreach(string str in strs)
 {
  bool exists = false;
  
  for(int i = 0; i <= view.Rows.Count; i++)
  {
   if(str == view[0, i].Value.ToString())
    exists = true;
  }
  if(!exists)
  {
   view.Rows.Add(str);
  }
 }
}

202 :デフォルトの名無しさん :2018/04/24(火) 20:53:14.94 ID:ZpST366k0.net
>>201
exist=trueでブレークポイントを置いてデバッグ実行すればわかるのでは?

203 :デフォルトの名無しさん :2018/04/24(火) 20:54:05.17 ID:UZOTbxqf0.net
そもそも exists = true; の行に到達してないというオチな気がする

204 :デフォルトの名無しさん :2018/04/24(火) 20:55:27.49 ID:UZOTbxqf0.net
>>202とかぶってしまった
>>202の方が指摘として親切だからそっちだけ読めばいいよ

205 :デフォルトの名無しさん :2018/04/24(火) 21:00:23.35 ID:PfeXTBpB0.net
>>201
  for(int i = 0; i < view.Rows.Count; i++)//Rows.Count以下じゃなく未満
  {
    bool exists = false;//ここに移動
  if(str == Convert.ToString(view[0, i].Value))//ToString()だとValueがnullのときエラー

206 :デフォルトの名無しさん :2018/04/24(火) 21:12:02.89 ID:UZOTbxqf0.net
>>205はとってもそれっぽい
で、例外が握りつぶされるような場所でAddToDataGridが使われてるせいで気づけてないとか

こういう場合自分はtry{...}catch(Exception exception){throw;}で囲って
throwの直前にブレークポイントを置いたりしてるけどもっとうまい方法があったら誰か教えてちょ

207 :デフォルトの名無しさん :2018/04/24(火) 21:26:25.44 ID:UZOTbxqf0.net
>>205はそれっぽいと言ったけど
よく読むと
bool exists = false;//ここに移動
の部分は自分には理解できなかった
>>205の勘違い?

208 :デフォルトの名無しさん :2018/04/24(火) 21:31:25.92 ID:zd8+57fN0.net
全一
FXきた

209 :デフォルトの名無しさん :2018/04/24(火) 21:36:01.31 ID:PfeXTBpB0.net
>>207
フラグよく見ていないからとりあえず
   if(str == Convert.ToString(view[0, i].Value))
    {exists = true;break}
に変更で

210 :デフォルトの名無しさん :2018/04/24(火) 21:38:44.73 ID:AF96232m0.net
みなさん本当にありがとうございます。
結局原因はわからず仕舞いでしたが、最終的に以下の方法で打開しました。

void AddToDataGrid(string[] strs)
{
 foreach(string str in strs)
 {
  bool exists = false;

  for(int i = 0; i < view.Rows.Count; i++)
  {
   if(Convert.ToString(view[0,i].Value) == str)
    exists = true;
  }
  if(!exists)
  {
   view.Rows.Add(name);
  }
 }
}

211 :デフォルトの名無しさん :2018/04/24(火) 21:49:35.82 ID:UZOTbxqf0.net
>>209
それなら納得
existsの宣言の位置を移動するとif(!exists)がスコープから外れちゃうもんね

>>210
>>205の方法で解決したんなら>>205の指摘が正しかったんでしょうよ
で、それに気づかなかったんならやっぱり例外が握りつぶされてたんでしょ
なら今後のためにも原因は分からずで片付けず例外の名前くらい確認しといたほうが良いと思うよ

212 :デフォルトの名無しさん :2018/04/25(水) 15:12:14.28 ID:lzwohvOS0.net
オブジェクト指向のプログラミングでは
変数じゃなくてプロパティにアクセスさせるべき
みたいな事をよく聞くんだけど
・プログラムの開始時にあるフラグ(true/false)を決めて、その後一切変更されることがない
・そのフラグには、コード中の様々な所からアクセスがある
って場合は、プロパティじゃなくてpublicな変数でフラグを定義してもいいんですか?

オブジェクト指向がよくわかってないせいか
プロパティを経由するのがどうしても遠回りというか
一つ余分な作業を挟んでるように感じてしまう・・・

213 :デフォルトの名無しさん :2018/04/25(水) 15:30:51.28 ID:eqJJBtIM0.net
変数は、公開しちゃダメ

その変数に、誰かが代入するかも知れないと考えると、
その変数に代入しているか、すべての場所を確かめないといけなくなるから、
プログラミングできなくなる

だから、プロパティで代入禁止に設定する

ただし、絶対に代入できない定数なら、公開してもよい

214 :デフォルトの名無しさん :2018/04/25(水) 16:03:36.81 ID:lzwohvOS0.net
>>213
後から書き換えられるのを確実に防止するために
プロパティを使うってことか なるほど
1人でコード書いてるからそういう発想が無かったけど
自分も後から絶対変な値を代入しない保証ないもんな

てことは、>>212の例だと
・引数付きのコンストラクタを使って、フラグの状態をインスタンス化
・そのフラグのプロパティはgetのみ設定
ってすればいいのか?

でもこれだと、そういうフラグを立てるタイミングがたくさんあったら
その分だけクラスを準備しとくことになると思うんだけど
そういうもんなの?

215 :デフォルトの名無しさん :2018/04/25(水) 16:12:23.29 ID:lzwohvOS0.net
あ、いや
クラスを複数準備する必要はないな

>>214の後半の話は無しで

216 :デフォルトの名無しさん :2018/04/25(水) 16:13:38.42 ID:VelEInRI0.net
>>212
212は読まなくていい
フィールドだってreadonly修飾子で代入禁止できるが、212はそんなことも分かってないから

プロパティがフィールドと違う点は大ざっぱに
* 派生クラスでオーバーライドできる
* プロパティから構造体を返すとコピーされる
の2点
この2つの特性が必要ない(または避けたい)場合にフィールドを選択してよい
判断できないならプロパティを選択する

217 :デフォルトの名無しさん :2018/04/25(水) 16:15:28.83 ID:ym3YbVtBd.net
IOption使っとけ

218 :デフォルトの名無しさん :2018/04/25(水) 16:51:44.20 ID:I8kFq/qw0.net
>>212
>>216はどこかのコピペじゃないならすごい分かりやすくて尊敬
一つだけ補足すると、↓のようなこともあるからクラスがpublicの場合は
現状だけでなく将来の変更の可能性も考えてフィールドかプロパティか判断したほうが良い

public フィールドをプロパティに変える (2016/05/16追記)
https://qiita.com/chocolamint/items/f04665ce2db211abb2d2#public-%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E3%81%AB%E5%A4%89%E3%81%88%E3%82%8B-20160516%E8%BF%BD%E8%A8%98

あと>>213も善意で答えてるのは分かるんだけど
代入できるかどうかだけを判断基準にしてる時点でズレてて
定数の説明も参考にならない気がするから割と真面目に>>213は読まないほうが良いと思う
すまぬ>>213

219 :デフォルトの名無しさん :2018/04/25(水) 17:43:22.74 ID:lzwohvOS0.net
>>216
>* プロパティから構造体を返すとコピーされる
これが、全然分からんのだけど
classの代わりにstructを使った場合の話であってる?
今の自分が考えたところで、どうせちゃんと理解出来ない気もするけど

220 :デフォルトの名無しさん :2018/04/25(水) 17:44:09.08 ID:EO6K8yEq0.net
>>213は別に全く問題ないだろ。

>>212の要はカプセル化の質問に対して、>>213はカプセル化の話として一般論として答えただけじゃん。

それに対して>>216>>218はここはC#のスレだからC#特有のreadonlyなフィールドあるよとか言語依存の情報
つけ足してるだけじゃん。

221 :212 :2018/04/25(水) 17:48:51.21 ID:eqJJBtIM0.net
オブジェクト指向では、変数は公開しない。
公開できるのは、処理(関数)だけ

クラス内を開発する人と、そのクラスを使う人は、別の会社・人を想定しているから、
変数にアクセスさせたら、絶対にダメ

クラス内を作っている開発者は、後で付け加えられる処理を予想できないから。
クラス内を開発した後に、別人が変数にアクセスして、動きを変えたらバグる

異なる会社間での開発を可能にする、
オブジェクト指向の大原則・カプセル化

222 :デフォルトの名無しさん :2018/04/25(水) 17:50:35.02 ID:ClmIY1xNa.net
プロパティから構造体を返すとコピーってのは意味わかんないね
コピーされるのは右辺がプロパティだろうがフィルドだろうが同じだよw

>>212
少なくともパブリックなメンバーに関しては、あえてフィールドを使う理由はないって
理解でいいと思うよ。例外はアンマネージドコードの呼び出しで使う型を定義する場合ぐらい。

フォールドのプロパティーに対して優位な点は

(1) 軽量である
(2) 簡潔に書ける

このぐらいしかない。

(1)が重要なケースなんかまずない。
(2)については、古いC#はともかく今のC#は儒分簡潔に書けるようになって来てる。

223 :デフォルトの名無しさん :2018/04/25(水) 17:59:38.62 ID:ClmIY1xNa.net
>>221
カプセル化っていのは、触る必要がないもの、触られては困るものを隠すこと。
この質問にはほとんど関係ない話w

フィールドをプロパティにしようが、触る必要がない文脈で触られることを防げるわけじゃないw
せいぜいセッターで値が適切かどうかチェックできる程度

224 :デフォルトの名無しさん :2018/04/25(水) 18:00:19.55 ID:EO6K8yEq0.net
まぁ、むしろ>>212のカプセル化などの話に対して、考え方説明せずに
初心者にいきなり言語仕様の詳細を羅列する>>216の方が教え方としてははぁーー??だわww

225 :デフォルトの名無しさん :2018/04/25(水) 18:04:12.14 ID:EO6K8yEq0.net
>>223
質問者は
>オブジェクト指向のプログラミングでは
>変数じゃなくてプロパティにアクセスさせるべき
>みたいな事をよく聞くんだけど
で書いて始めてんじゃん。だから、カプセル化の説明した方がまずいいんじゃねぇか??

226 :デフォルトの名無しさん :2018/04/25(水) 18:09:53.61 ID:ClmIY1xNa.net
>>225
何が「だから」なのかよくわかりませんw

質問は外部に見せるデータをプロパティとして実装すべきかフィールドでもよいのか。
カプセル化(余分なものを外に見せるな)は何も関係ないってw

227 :デフォルトの名無しさん :2018/04/25(水) 18:14:14.76 ID:EO6K8yEq0.net
>>225
>オブジェクト指向のプログラミングでは
>変数じゃなくてプロパティにアクセスさせるべき
>みたいな事をよく聞くんだけど
を質問者が引き合いに出した以上、質問者はここからはしっかりわかってなくて、色々ごちゃ混ぜになってると
思われる。だから、そっから説明しなきゃ、おそらく習得できない。

228 :デフォルトの名無しさん :2018/04/25(水) 18:17:11.69 ID:lzwohvOS0.net
自分はオブジェクト指向じゃない言語をちょっとだけやってたんだけど
そういう言語では、コードの最初の方に
public bool JudgFlag = true
って1行書いて、それにどこからでもアクセスするみたいな感じだと思うんだ
(全部独学だからこれも正解なのか知らんけど)
でも、オブジェクト指向ではこれやったらダメなんだよね?
ってのが知りたい

後、俺マジで初心者だから
質問文で聞きたいことが正確に表現できてる保証ないwすまん

229 :デフォルトの名無しさん :2018/04/25(水) 18:20:06.19 ID:EO6K8yEq0.net
>>226だった・・

230 :デフォルトの名無しさん :2018/04/25(水) 18:22:03.13 ID:ClmIY1xNa.net
>>228
別にダメじゃないよw
何度も言うけど、あえてフィールドを使う理由があんまりないだけw

フィールドをプロパティにしたらバグが減らせるとか可読性が上がるとか、
ほとんどの場合そんなことはない

231 :212 :2018/04/25(水) 18:26:03.04 ID:eqJJBtIM0.net
>変数じゃなくてプロパティにアクセスさせるべき

これが異なる会社間での開発を可能にする、
オブジェクト指向の大原則・カプセル化

どの教科書にも書いてある

その理由は、クラス内を開発している会社・人と、
そのクラスを使う会社・人は、異なっているから

オブジェクト指向では、これらの2つの立場からの見方が大切。
君はどちらの開発者ですか?
クラスを作る方・使う方?

クラス内を開発しているのは、過去だから、
そこから未来の、クラスを使う人の動きを予測できない

だから、変数に直接触らせたらダメ。
そこまで予測して、クラス内を作れないから

232 :デフォルトの名無しさん :2018/04/25(水) 18:31:21.63 ID:lzwohvOS0.net
>>230
そうなのか・・・
でも、解説サイト見てると
「ダメ」的な雰囲気で書いてあるとこばっかりじゃない?
俺の理解が間違ってるのかもしれないが
俺的には現状>>230に書いてある事が正解に思えちゃうんだよな

俺が1人で小規模な開発してるだけだから
いまいちオブジェクト指向のメリットを感じる場面が少ないのかな

233 :212 :2018/04/25(水) 18:31:24.51 ID:eqJJBtIM0.net
>>228
>public bool JudgFlag = true

変数を公開したら、ダメ。
カプセル化にならない

理由は、
>>213
に書いてある

234 :デフォルトの名無しさん :2018/04/25(水) 18:36:43.91 ID:Y4/R4Zt40.net
>俺が1人で小規模な開発してるだけだから
>いまいちオブジェクト指向のメリットを感じる場面が少ないのかな
まあこれだな

>>213の言ってる事は、OOPの「思想」としては間違いなく正しい
但し、単独での小規模開発という状況を前提にするなら「現実的なメリット」は無いに等しい

235 :デフォルトの名無しさん :2018/04/25(水) 18:37:15.31 ID:EO6K8yEq0.net
>>228
うん。君のケースだとダメだね。それだと、クラスの内部状態JudgFlagが誰でも自由に書き換えられちゃう。
だから、まずは君は基本、>>221のようなC#とか言語関係ない一般的なカプセル化について勉強しよう。

で、君のケースだと自分で書いてるが
>・引数付きのコンストラクタを使って、フラグの状態をインスタンス化
>・そのフラグのプロパティはgetのみ設定
ってやるか、
getプロパティ書くの嫌なら>>216が書いたようにC#にはreadonlyフィールドというのがあるのでそれで代用できる。

236 :デフォルトの名無しさん :2018/04/25(水) 18:47:02.51 ID:yqUO4I2d0.net
おまえら変数は公開しちゃだめだけど、プロパティやgetter/setterなら公開してもいいって思っとるやろw

237 :デフォルトの名無しさん :2018/04/25(水) 18:48:12.94 ID:ClmIY1xNa.net
>>232
どこの世界でも教条的(思い込みが激しいともいう)人はいるからねw

外部から取得/設定してもらう必要がある値をフィールドではなくプロパティにしたからって
ヒューマンエラーを減らす効果なんかないのは事実

ただ機能がより少ないフィールドをあえて使うことないでしょってだけの話

オブジェクトの公開するデータは必ずしもいつも変数に入っているわけではなく、
何らかの処理の結果を返す場合もあって、その場合はプロパティになるから、
だったら全部プロパティの方が統一感があるという考え方はあるかもしれない

238 :デフォルトの名無しさん :2018/04/25(水) 18:49:19.77 ID:s99z6Kr1M.net
>>234
嘘おしえるなよ

239 :デフォルトの名無しさん :2018/04/25(水) 19:04:09.02 ID:lzwohvOS0.net
まとめると
「1人で小規模なコード書いてるだけなら
public bool JudgFlag = true
を書き換えたらダメなことぐらい自明だから、フィールドに1行書いて終わりでいい
若干雑だけど楽」
って考え方と
「いや、自分で決めたルールを自分で忘れることもあるから
ちゃんとプロパティにして触れない様にすべき
多少面倒でもコストを払うメリットがある」
って考えの対立なのかな

get;set;とか全く意味がわからなかった頃の嫌なイメージのせいで
プロパティを書く事が、「面倒・難しい」って体が拒否反応しちゃうんだよね
自動プロパティとか実装されてる今の時代に
何言ってんだって笑われそうだけど

まあ、でも色々モヤモヤしてた所がスッキリしました
ありがとう

240 :デフォルトの名無しさん :2018/04/25(水) 19:24:43.78 ID:q/XXvHKQd.net
>>237
処理の結果を返すならメソッドにしろよ

241 :デフォルトの名無しさん :2018/04/25(水) 20:11:47.21 ID:ClmIY1xNa.net
>>240
具体例
https://msdn.microsoft.com/ja-jp/library/system.drawing.rectangle.right.aspx

242 :デフォルトの名無しさん :2018/04/25(水) 20:30:49.45 ID:XWOG1WtT0.net
フォーム間のデータ受け渡しのやり方について教えてください

プログラムを起動して、最初にForm1でパラメータなどを設定、次にForm2で設定した
パラメータを元にデータを編集したいとします
(Form1で編集済みのデータをForm2に表示する、でもいいです)

このときにデータを受け渡すのは、program.cs で Application.Run(new Form1()); と
呼び出す前に

1. Form2 のインスタンスを作っておいて、それを Form1 の引数として与えてやる
2. 必要なデータのインスタンスを Main() 内に用意しておいて、そのインスタンスを
 Form1 と Form2 のそれぞれに送る
3. どっちもダメで他の方法がある

のどれが良いのでしょうか。
Form1 の中で Form2 のインスタンスを作成して、Form2 に送るという方法も考えましたが、
そうすると Form1 が不要になったときに Dispose() すると Form2 も落ちてしまいます。

243 :デフォルトの名無しさん :2018/04/25(水) 20:44:39.30 ID:3+niHUT+0.net
【マイトLーヤとPS4】 FFとDQの最新作、VR開発は危険、プレーヤーの日常感覚を損なうおそれ
http://rosie.5ch.net/test/read.cgi/liveplus/1524621704/l50

244 :デフォルトの名無しさん :2018/04/25(水) 21:00:51.62 ID:q/XXvHKQd.net
>>241
それは右座標を計算して返しただけであって処理を実行するのとは違う
面倒だからここ読んで
https://msdn.microsoft.com/ja-jp/library/ms229054(v=vs.100).aspx

245 :デフォルトの名無しさん :2018/04/25(水) 21:06:28.54 ID:XHhjs7vi0.net
>>242
Form2にプロパティを追加
Form1の該当メソッド内でForm2を宣言&インスタンス化してプロパティにパラメータをセット
Show(Dialog)メソッドで呼び出し

246 :デフォルトの名無しさん :2018/04/25(水) 21:09:48.37 ID:ckNZ5jJB0.net
メッセージキューを勉強中なんですが、
MSMQとMessageQueueクラスって何が違うんでしょうか?

247 :デフォルトの名無しさん :2018/04/25(水) 21:17:11.34 ID:XWOG1WtT0.net
>>245
ありがとうございます
この場合、もう二度と Form1 を使わないという状況であれば、Form2 の ShowDialog を
呼び出す前に this.Hide(); で隠しておいて、戻ってきたら this.Dispose(); でしょうか
Hide() だけで処理を抜けるコードを書き忘れて、いつまでもプログラムが残り続けるバグを
やったので、二度と戻ってこないフォームは Dispose() したいのです

248 :デフォルトの名無しさん :2018/04/25(水) 21:18:56.58 ID:XWOG1WtT0.net
今思ったのですが、そういう使い方だとむしろ Form2 を非表示で実行しておいて、
その中で Form1 を呼び出すべき?
で、Form1 を抜けたら this.Show(); とか

249 :デフォルトの名無しさん :2018/04/25(水) 21:20:04.33 ID:ClmIY1xNa.net
>>244
頭悪そうだけど、単にバッキングフィールドの値をそのまま返すのではないケースを
「何らかの処理の結果を返す」と言っている。

処理 = 高価な処理ではない。
重かろうが単なる足し算だろうが処理は処理だ

250 :デフォルトの名無しさん :2018/04/25(水) 22:11:10.02 ID:jHFwiJ5Yd.net
Applicationに共通のパラメータ持って、Form1とForm2で共有しちゃダメなんか

251 :デフォルトの名無しさん :2018/04/25(水) 22:17:09.52 ID:fPsUNFh1a.net
使い方次第じゃないかなとは思う
双方で同時に書き換えたりするならやめたほうがいい

それ以前にタダクソダサイと思う

252 :デフォルトの名無しさん :2018/04/25(水) 22:41:48.50 ID:TqrgnB+10.net
シングルトンの出番だ

253 :デフォルトの名無しさん :2018/04/25(水) 23:10:10.54 ID:Kx9WW2Xx0.net
>>217
これやろ

254 :デフォルトの名無しさん :2018/04/25(水) 23:38:15.43 ID:8cfef6Y0a.net
もう親フォーム作れば?

255 :デフォルトの名無しさん :2018/04/26(木) 14:36:05.39 ID:ooZK6FZP0.net
自作ツールをソースコード付きで公開したいのですが、
パブリックドメインソフトにするのが最善ですか?

256 :デフォルトの名無しさん :2018/04/26(木) 15:37:00.65 ID:s8t3AsxEM.net
.netで簡単に実現できる機能(メールや圧縮、画像処理等)をネイティブCのアプリで利用したいです。VC++6.0の(C++ではなく)C言語で作るコンソールアプリでです。
C#で作っでdllを作って、C++のdllでそれをコールする関数を公開すれば実現可能ですが、もっといいやり方ないでしょうか?

257 :デフォルトの名無しさん :2018/04/26(木) 15:39:07.13 ID:B934JXdmM.net
>>255
今のOSSはMITライセンスでGithubに晒すのが主流

258 :デフォルトの名無しさん :2018/04/26(木) 16:34:09.89 ID:+C2ovlRwM.net
>>256
つ C++/CLI

259 :デフォルトの名無しさん :2018/04/26(木) 17:05:43.31 ID:B934JXdmM.net
>>256
別プロセスにする
Win10のアプリなら WinRT のコンポーネントにすれば言語をまたがって普通に使える

260 :デフォルトの名無しさん :2018/04/26(木) 19:19:32.70 ID:leQJqI/Q0.net
>>256
標準入出力のリダイレクト。
古典的でダサいけどね

261 :241 :2018/04/26(木) 20:39:08.13 ID:8i3JVbEw0.net
皆様ありがとうございました
決まりきった定番の書き方はない、と理解すれば良さそうですね

自分で色々試してみます

262 :デフォルトの名無しさん :2018/04/26(木) 21:03:55.12 ID:8i3JVbEw0.net
今度はインデクサについて教えてください

https://ideone.com/TlRwJS

例として上記のようなコードを書いてみました
これで、インデクサを使って例えば anml["whale"] とすれば1が返ってくるような、
そういうものを作りたいと思います
(classified, lifeの各プロパティはユニークではなく、specificのみユニークとします)

本を紐解きながら書こうとしたのですが、animalsクラスの中ではリストになっていないので
書く場所はなさそうです。でもMainメソッドでは利用したい側なので、ここに実装することも
できない気がします。

多分インデクサの考え方そのものがわかっていません。どなたか教えていただけると
嬉しいです。

263 :デフォルトの名無しさん :2018/04/26(木) 21:18:02.97 ID:i4ujFDqn0.net
ListじゃなくてDictionaryを使えばOK

264 :デフォルトの名無しさん :2018/04/26(木) 21:54:22.87 ID:IFgymZMf0.net
anml.FindIndex(_ => _.specific == "whale")でよくね?

265 :デフォルトの名無しさん :2018/04/27(金) 03:52:18.55 ID:3sBZO5RI0.net
インデクサてのは自作のクラスにつけるプロパティみたいなものだから、List<animals>を内蔵するクラス作って
public int this[string p]{
get{ /* ここに検索して結果を返すコード書く */ }
}
でおkなんじゃねか?知らんけど。

266 :デフォルトの名無しさん :2018/04/27(金) 07:42:26.78 ID:vWqu6ayt0.net
>>263
すいません、理解のレベルが低いので、具体的にどう実装すればよいのかわかりませんでした
var anml = new Dictionary<animals, string>;
としてディクショナリは実装できたとして、要素追加の際 Add メソッドをどう書くのか、理解が
追いついていないようです

>>264
この書き方で、求めている操作は実現できそうです
ラムダ式の理解が怪しいのは勉強するとして、毎回これを書くと面倒&間違えそうなのですが、
これは「十分に簡潔な書き方」なのか、それとも「メソッド等でさらに簡潔に書ける」のか、どちら
でしょうか。

>>265
この場合、各プロパティにアクセスする際は anml[i].specific とかではなくて anml(i, specific)等
メソッドを介してアクセスすることになるのでしょうか?

267 :デフォルトの名無しさん :2018/04/27(金) 07:59:23.04 ID:Ek6IpJbsa.net
>>265は良くないよ
インデクサはループ内で使用されることを想定しておかないといけない
毎回線形検索が走るのは非効率すぎる

268 :デフォルトの名無しさん :2018/04/27(金) 08:18:37.17 ID:3sBZO5RI0.net
番号が欲しいのかanimalsオブジェクトが欲しいのか

269 :デフォルトの名無しさん :2018/04/27(金) 12:24:44.14 ID:/0qPzcyMr.net
>>267
今回の用途では速度は重要でなく、またそもそも実現方法がわからなかったので、アルゴリズムはまだまだ先の話ですね

>>268
今回欲しいのは数字です

270 :デフォルトの名無しさん :2018/04/27(金) 23:13:48.06 ID:9YiDAi7f0.net
Index番号が欲しいなら>>264で十分じゃないか?
見つからなかったとき例外吐くらしいから気をつけろい

271 :デフォルトの名無しさん :2018/04/27(金) 23:15:15.73 ID:9YiDAi7f0.net
まちがえた。例外じゃなくて-1だ。すんまそ。回線で首吊ってくる

272 :デフォルトの名無しさん :2018/04/28(土) 01:50:07.49 ID:E8vnEfND0.net
>>264
アンダーバーはやめとけ

273 :デフォルトの名無しさん :2018/04/28(土) 01:50:20.46 ID:fiFvLr6Y0.net
XAMLファイルからボタンを削除した場合、CSコードの方に呼び出されることのないコールバック関数の宣言が残ってしまます
こういうのを効率よく削除する方法ってないのでしょうか?

274 :デフォルトの名無しさん :2018/04/28(土) 01:54:51.50 ID:E8vnEfND0.net
>>273
WPF?

275 :デフォルトの名無しさん :2018/04/28(土) 02:32:39.82 ID:fiFvLr6Y0.net
>>274
Xamarin.Formsで使っています

276 :デフォルトの名無しさん :2018/04/28(土) 07:22:01.22 ID:bL+b5OsrM.net
>>273
XML解析とリフレクション

277 :デフォルトの名無しさん :2018/04/28(土) 12:46:33.34 ID:5pWODy2i0.net
ここでいいのかわかりませんが、質問させてください。
C#でフレームワーク ASP.Net MVCで作っています。

テーブルのフォームをPOSTしたいのですが、
動的に作成した行をどのようにサーバー側で受け取ればよいのかわかりません。

<td>
<input class="form-control" id="no1" name="no2" type="text" value="" />
</td>
<td>
<input class="form-control" id="no2" name="no2" type="text" value="" />
</td>


このように、複数行があって、noの後ろの数値は、行を追加したら増えるように
javascriptで制御しています。

サーバー側の処理として、引数を
(string no1, string no2, ・・・)と列挙してすべて書けば、
POSTデータを受け取れることは確認済みです。

ただ、ユーザーの操作で行を何行追加するかもわからず、あらかじめ想定する
最大数の引数を列挙するのも現実的ではありません。
すべてのフォームデータを一挙に受け取って、
サーバー内部のロジックで処理する方法はないでしょうか。

278 :デフォルトの名無しさん :2018/04/28(土) 13:53:59.42 ID:Jn+S73+O0.net
>>277
namaに添字をつければList<T>でバインディングできるはず
https://qiita.com/kazuhisam3/items/94542f6d7ccf3acca41c

279 :デフォルトの名無しさん :2018/04/28(土) 14:50:29.57 ID:X/1aPQ6Ma.net
どうせJavaScript書いてるんならJavaScript側でJSONの配列に纏めてからAJAXでポストするのもアリ

280 :デフォルトの名無しさん :2018/04/28(土) 21:58:22.96 ID:4vnB69wL0.net
[[[ ][ ]]]\[[]] [[[]]]],[[[ [][] ]

281 :デフォルトの名無しさん :2018/04/28(土) 22:36:40.95 ID:vp8gWtwG0.net
Entity FrameworkでDBへのselectとかのリトライしたい場合ってどのようにすべきでしょうか
一時的なエラーだったりしたらもう一回トライとかしたいのです
例外全キャッチするのも無駄なのかなぁと思いまして

282 :デフォルトの名無しさん :2018/04/28(土) 23:02:28.71 ID:8LDPRSMfM.net
普通のRDBなら一時的なエラーなんか滅多にないだろ
400でいいよそんなもん

283 :デフォルトの名無しさん :2018/04/28(土) 23:05:27.66 ID:yGhXA9la0.net
Azure相手だと普通にあるで

284 :デフォルトの名無しさん :2018/04/28(土) 23:08:01.89 ID:E8vnEfND0.net
>>281
DbExecutionStrategy

285 :デフォルトの名無しさん :2018/04/28(土) 23:33:01.91 ID:vp8gWtwG0.net
>>284
ありがとうございます
試してみます

286 :デフォルトの名無しさん :2018/04/29(日) 20:34:09.03 ID:My7UiDyw0.net
[[[ []]]]*[[ [][] ][] } } {} [[[

287 :デフォルトの名無しさん :2018/05/02(水) 19:00:22.89 ID:As5kU4Fr0.net
とりあえず、連休ぐらいゆっくりな
オマエラ

288 :デフォルトの名無しさん :2018/05/03(木) 10:44:28.97 ID:9ar3mEaia.net
連休は機械学習でずっと計算させる予定
人間は休む

289 :デフォルトの名無しさん :2018/05/03(木) 13:02:24.11 ID:Nqnp2049M.net
人間はILコードを覚えてハンドアセンブル出きるようになるべき

290 :デフォルトの名無しさん :2018/05/03(木) 13:26:57.92 ID:YEWKmWCr0.net
winformの左辺や上辺をドラッグするとフォームのサイズが変わらずにフォームが移動してしまいますが
サイズを変更するように設定するプロパティなどはありますでしょうか
コードを書く必要がありますか?

291 :デフォルトの名無しさん :2018/05/03(木) 14:32:14.37 ID:hvfEvXXP0.net
>>289
古い脳の感覚でいえば、IL なんてハードウェアの裏づけのない、空想上の約束にしか過ぎないので、覚える気が起きない
x86-64 でおなかいっぱい

292 :デフォルトの名無しさん :2018/05/03(木) 14:41:33.60 ID:Nqnp2049M.net
>>291
情報処理試験のCASLとかも?

293 :デフォルトの名無しさん :2018/05/03(木) 14:46:31.58 ID:hvfEvXXP0.net
>>292
CASL くらいはやったよ、8080、z80/6809/80x86/z8000/r3000、まだ若かったからどんどん覚えることができたんだ…
でも、もうおなかいっぱいだ…

294 :デフォルトの名無しさん :2018/05/03(木) 14:47:30.87 ID:1IvMgmqBM.net
次元が違うだろ
ILは高級なオブジェクト指向言語
そもそも機械語に似せることを意図されていない

295 :デフォルトの名無しさん :2018/05/03(木) 14:51:41.82 ID:hvfEvXXP0.net
>>294
ハードウェアマシン語とプログラム言語との間に、なぜ仮想マシンと仮想的な言語(IL/JVM)が採用されるようになったのか?そこが今でも判然としないのです…

296 :デフォルトの名無しさん :2018/05/03(木) 15:42:16.53 ID:+UDEH62l0.net
>>295
ドライバは何故存在するの?つってる様なもんだぞそれ

297 :デフォルトの名無しさん :2018/05/03(木) 15:45:53.15 ID:hvfEvXXP0.net
>>296
いえいえ、階層性を全否定するわけではありません
「仮想マシンと中間コード」の必要性を問うているのです…

298 :デフォルトの名無しさん :2018/05/03(木) 16:06:28.64 ID:+UDEH62l0.net
仮想マシンに焦点を絞るなら、ハードウェアの差異を吸収する為では
(.netはJavaVMほどあちこちに移植されてないというだけで)

ILに関して言えば、複数の言語(C#、VB.net、F#、他)を共通のフレームワーク上で動かせる様にする為

299 :デフォルトの名無しさん :2018/05/03(木) 16:13:17.79 ID:ioUmuI6x0.net
>>298
それならハードウェアや言語の統一を目指したほうが建設的なのでは?

300 :デフォルトの名無しさん :2018/05/03(木) 16:19:16.65 ID:+UDEH62l0.net
>>299
不可能だろう
収斂進化により表面上似た様な機能を搭載する事はあっても、内部構造は特許なり権利なり絡んで来るから同じに出来ないし
JavaScript+CSS3ですらブラウザベンダ間で足並み揃えられないのに、言語の統一なんて出来る訳が無い

301 :デフォルトの名無しさん :2018/05/03(木) 16:37:31.89 ID:hvfEvXXP0.net
現状、中間言語側でも少なくとも JVM/.net framework にわかれちゃっているからねえ…

302 :デフォルトの名無しさん :2018/05/03(木) 18:59:07.03 ID:OyWVOyw+0.net
>>301
LLVMの中間コードをご存知でない?

303 :デフォルトの名無しさん :2018/05/03(木) 19:06:23.30 ID:hvfEvXXP0.net
>>302
LLVM はコンパイラの中で完結しているのではないかな?

304 :デフォルトの名無しさん :2018/05/03(木) 19:12:34.62 ID:R63QgqLH0.net
?

305 :デフォルトの名無しさん :2018/05/03(木) 19:15:49.37 ID:OyWVOyw+0.net
>>303
コンパイラ開発者はとりあえずLLVM-IRに変換すればいいし最終段で機械語に変換するか直接実行するか他の言語のコードに変換するかは自由
というか最初と最後だけ作ればいいわけだから寧ろLLVM-IRが中心

306 :デフォルトの名無しさん :2018/05/03(木) 19:22:47.84 ID:hvfEvXXP0.net
>>305
うん、それはよくわかる
すべての「構造化」を全否定するわけではないんだよ

307 :デフォルトの名無しさん :2018/05/03(木) 19:24:37.99 ID:R63QgqLH0.net
すまん、途中から意味分からん

308 :デフォルトの名無しさん :2018/05/03(木) 19:27:41.50 ID:kS9rU1V5a.net
.netは仮想マシンなんかつかってないじゃん

309 :デフォルトの名無しさん :2018/05/03(木) 19:42:37.77 ID:hvfEvXXP0.net
>>308
https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AA_(%E5%85%B1%E9%80%9A%E8%A8%80%E8%AA%9E%E5%9F%BA%E7%9B%A4)
仮想マシン VES は定義されているようだ

310 :デフォルトの名無しさん :2018/05/03(木) 19:45:56.40 ID:Vq5AVdhm0.net
おい!初心者の内容じゃねーぞw

311 :デフォルトの名無しさん :2018/05/03(木) 20:04:38.77 ID:kS9rU1V5a.net
>>309
VESは最終段階のコンパイラだよ

312 :デフォルトの名無しさん :2018/05/03(木) 20:12:05.92 ID:OyWVOyw+0.net
JITコンパイルはVMとしては認めない派閥が存在することは認める

313 :デフォルトの名無しさん :2018/05/03(木) 20:31:23.35 ID:GKu15pasa.net
https://www.slideshare.net/ufcpp/ss-34533225
このスライドの67枚目の「良い例」のコードってこれで本当にいいの?

MSDNのParallel.Forの解説には
---
localFinally デリゲートはスレッドごとに 1 回呼び出され、各スレッドのローカル状態に対して最後の操作を行います。 このデリゲートは、同時に複数のスレッドで呼び出される可能性があります。したがって、共有変数へのアクセスを同期する必要があります。
---

と書いてあるから、countはアトミックに操作しないとまずい気がするんだけど
https://msdn.microsoft.com/ja-jp/library/dd783299(v=vs.100).aspx

314 :デフォルトの名無しさん :2018/05/03(木) 21:13:05.22 ID:L6Rknns90.net
>>313
MSDNの使用例にも
localState => Interlocked.Add(ref result, localState)
とあるしそれで正しいと思うよ

315 :デフォルトの名無しさん :2018/05/03(木) 21:46:41.74 ID:GKu15pasa.net
>>314
いやだから、MSDNのサンプル通りにするなら、>>313
localCount => count += localCount
は、

localCount => Interlocked.Add(ref count, localCount)
でないとまずいと思うんですが

316 :デフォルトの名無しさん :2018/05/03(木) 21:48:43.65 ID:ygisZEFQM.net
そうだねだからどうしたの
資料公開してる本人に言えばいいんじゃないの

317 :デフォルトの名無しさん :2018/05/03(木) 22:02:53.69 ID:nzAwdXFB0.net
大して変わんねーよ
そんなに処理分けたきゃ
別exeにしてキックしろよ
後はできるならOSがうまくやるし
OSがうまくできなかったらそりゃできないんだろうよw

318 :デフォルトの名無しさん :2018/05/03(木) 22:05:27.65 ID:WY9OnNQR0.net
どうした発作か

319 :デフォルトの名無しさん :2018/05/03(木) 23:06:32.43 ID:L6Rknns90.net
>>315
いや、>>313の言う通りと言ったつもりなんだが・・・ふらっと怖いな

320 :デフォルトの名無しさん :2018/05/03(木) 23:38:41.22 ID:aADwc6210.net
おバカwebを鵜呑みにしない有望な>>313なんやからもう少し優しくレスしてやれよw

321 :デフォルトの名無しさん :2018/05/04(金) 00:16:38.85 ID:Xm9CVOioa.net
この例だとForよりAggregate使ったほうがいいな

322 :デフォルトの名無しさん :2018/05/04(金) 00:37:22.14 ID:pvqh60Bra.net
>>319
自分の日本語に疑問を持たない君の方が怖いよ

「これ(A)」でいいのか、Bじゃないのかって質問に「それ」で正しいと答えたら
質問した方は普通は正しいのは「これ」の方だと理解する

323 :デフォルトの名無しさん :2018/05/04(金) 02:08:40.41 ID:DbHU5BaK0.net
C♯でJavaScriptで生成されてるチャットサイトからコメントビューアを作りたいのですが、JavaScriptが生成したHTMLを取得するのに適したライブラリってどれでしょうか?
Formアプリで作る予定ですが
webBrowserコントロールが一番手軽でしょうか?

324 :デフォルトの名無しさん :2018/05/04(金) 02:10:39.64 ID:DbHU5BaK0.net
>>323
追記
使う.Net frameworkは4.6.1です
Nugetで公開されてるライブラリ等でも問題ありません

325 :デフォルトの名無しさん :2018/05/04(金) 02:53:44.45 ID:JYHlDWX6M.net
javascriptで生成といっても生成元になるデータを何処かでリクエストしてる筈
そっちを解析して直接的にHttpClientでgetしたほうがええよ

326 :デフォルトの名無しさん :2018/05/04(金) 04:15:13.73 ID:DbHU5BaK0.net
ありがとうございます
単純にセッションが必要っぽそうだったのでHttpClientでもいけそうです
使い方調べ直します

327 :デフォルトの名無しさん :2018/05/04(金) 16:58:55.69 ID:wDfbuSiA0.net
おバカwebと言えば↓みたいに日本語と英語で全く逆のことが書いてあったりする
基本的にwebに書いてあることは疑ってかかったほうが良さそうね

日本語
https://docs.microsoft.com/ja-jp/dotnet/standard/base-types/best-practices-strings#recommendations_for_string_usage
> 比較のために文字列を正規化する場合は、String.ToUpperInvariant メソッドではなく String.ToLowerInvariant メソッドを使用します。

英語
https://docs.microsoft.com/en-us/dotnet/standard/base-types/best-practices-strings#recommendations_for_string_usage
> Use the String.ToUpperInvariant method instead of the String.ToLowerInvariant method when you normalize strings for comparison.
(グーグル翻訳) 比較のために文字列を正規化するときは、String.ToLowerInvariantメソッドの代わりにString.ToUpperInvariantメソッドを使用します。

328 :デフォルトの名無しさん :2018/05/04(金) 17:22:00.73 ID:0gwAiFk4d.net
>>327
X:webに書いてあることは
○:日本語訳は

329 :デフォルトの名無しさん :2018/05/04(金) 19:43:22.77 ID:RYlEGIXb0.net
グラフィックの扱いについて教えてください

panelに複数の画像イメージを貼り付けたいと思います
(トランプのカードを任意の枚数置くような感じです)

WidthとHeightをpanelのサイズに合わせて、Bitmapオブジェクトを
作ってそこに必要な画像を貼り付けて、最後にPaintイベントでその
ビットマップを Graphics.DrawImage で表示すれば良さそうだ、という
認識です

問題はBitmapオブジェクトに画像を貼り付けることで、メソッドを
調べても、Bitmapオブジェクトの任意の場所に任意のイメージを
貼り付けるものはなさそうです
そもそも用意した画像は Image.FromFile で準備しているのですが、
Imageオブジェクトを貼り付けられるのは Graphics.DrawImage
メソッドになるので、そもそも Bitmap オブジェクトを用意すると
いう発想が間違っているような気もします

多分いろいろ間違って認識しているので、どこから考え直せばよいか
教えていただけると嬉しいです

330 :デフォルトの名無しさん :2018/05/04(金) 19:54:32.04 ID:EvkA5vHv0.net
>>329
ベースの画像のいくつかの任意の位置に画像を貼り付ける描画ならそれで間違っていないけど
https://msdn.microsoft.com/ja-jp/library/system.drawing.graphics.drawimage(v=vs.110).aspx
https://msdn.microsoft.com/ja-jp/library/558kfzex(v=vs.110).aspx
どこを勘違いして悩んでいるのかいまいちわからない
とりあえずBitmap オブジェクトはImageオブジェクトの一種
他にMetaFileとかあるから
そしてGraphics.DrawImageメソッドを使って貼り付けてもベースのBitmap オブジェクトはBitmap オブジェクトのまま

331 :デフォルトの名無しさん :2018/05/04(金) 20:25:52.55 ID:RYlEGIXb0.net
>>330
私の認識は、最終的に描画したいビットマップを用意して、それを Paint イベントで
描画するというものです
Panel1_Paint(object sender, PaintEventArgs e) {
e.Graphics.DrawImage(canvas, 0, 0);
}

で、上記の例で Bitmap canvas; とでもして用意したビットマップに、任意の画像を
貼り付ける方法を知りたいのです
例えば256x256ピクセルのサイズで用意したビットマップに、32x32ピクセルの
画像を3個位貼り付けた canvas を用意したいというものです

「そうではなくて、最終的に描画したいものはGraphicsオブジェクトで用意して、
Paintイベントで毎回描画するのだ」というのが正なのかもしれません
Panel1_Paint(省略) {
e.Graphics.DrawImage(image_1, image_1_x, image_1_y);
e.Graphics.DrawImage(image_2, image_2_x, image_2_y);
...
}
といった感じで

でもなんだか、毎回Paintイベントハンドラに描画処理を全部書くのは変な感じがして、
描画したい画像を用意するのと、実際に描画するのは別の処理ではないかと思っている
次第です

332 :デフォルトの名無しさん :2018/05/04(金) 20:30:54.11 ID:Ad2tmUBO0.net
描画したい画像を用意するのと、それを描画するのは当然別の処理だ。
でもアニメーションさせたいとか画像の変更を即座に描画に反映させたいとかなら、用意した足で再描画させるしかないだろ?

333 :デフォルトの名無しさん :2018/05/04(金) 20:36:30.50 ID:EvkA5vHv0.net
>>331
何でイベントでやるのか知らないけど複数の描画を同時にやるメソッドはなかったと思うよ
https://dobon.net/vb/dotnet/graphics/index.html
Bitmap canvas=new Bitmap(x,y);
Graphics g = Graphics.FromImage(canvas);
Graphics.DrawImage(image_1, image_1_x, image_1_y);
Graphics.DrawImage(image_2, image_2_x, image_2_y);

334 :デフォルトの名無しさん :2018/05/04(金) 20:38:50.67 ID:EvkA5vHv0.net
あ、ごめん
Graphics g = Graphics.FromImage(canvas);
g.DrawImage(image_1, image_1_x, image_1_y);
g.DrawImage(image_2, image_2_x, image_2_y);
だった

335 :デフォルトの名無しさん :2018/05/04(金) 20:49:55.24 ID:RYlEGIXb0.net
>>332
アニメーションさせたいとか、そういう意図はないです
単に、描画したい画像を用意するのに、Bitmapオブジェクトにさらに画像を
貼り付ける方法がわからなくて悩んでいます

>>333
イベントでやってるのは、単に参考にしたサイトで「Paintイベントハンドラで
処理する」と書いてあったので、それを鵜呑みにしただけです

https://dobon.net/vb/dotnet/graphics/drawimage.html
これを見て気づきましたが、そもそもパネルに直接描こうとするのが間違いで、
パネルにPictureBoxを貼り付けた上でそこに置けば良いのかな?

336 :デフォルトの名無しさん :2018/05/04(金) 20:54:32.05 ID:EvkA5vHv0.net
>>335
どっちでも同じだと思う
Graphics g = Graphics.FromImage(panel1.BackGroundImage);
でやれば直接パネルに書き込めるし
ただ大きい画像を表示して画像の表示位置をスクロールさせたいのならパネルの上にPictureBoxが基本
とりあえず書いて動かしてみたら

337 :デフォルトの名無しさん :2018/05/04(金) 21:05:17.61 ID:aP3h8uSia.net
>>335
実現したい要件だけを明確に書いた方がいいと思うよw

そこが明確じゃないのに「俺が考えた実装方法」ばっかり詳細に書くから
答える方も何を返答していいのか分からないw

338 :デフォルトの名無しさん :2018/05/04(金) 21:11:39.38 ID:RYlEGIXb0.net
>>337
実現したいことは、「任意の画像を任意の場所に配置したイメージを、panelに描画したい」です
これは明確で、それを実装するための方法でどう悩んでいるかが正しく伝わらないと、答える方も
こちらのレベルがわからなくて困るかと思ってました

実現したいことがちゃんと伝わっていませんでしたか
それ以前の問題でしたね。。。

339 :デフォルトの名無しさん :2018/05/04(金) 21:43:04.80 ID:pJ6Zbbxdp.net
ファイル読んでバインドするだけちゃうのか?

340 :デフォルトの名無しさん :2018/05/04(金) 22:52:54.89 ID:IMcj9GIN0.net
>>338
dobon.netにあるじゃん

341 :デフォルトの名無しさん :2018/05/05(土) 01:53:47.84 ID:US1Viqbq0.net
bmp1が配置先のイメージ、
bmp2がbmp1に配置したいイメージだとしたら以下になる

Graphics g = Graphics.FromImage(bmp1);
g.DrawImage(bmp2, x, y); // bmp1の(x, y)にbmp2を書き込む
g.Dispose();
pictureBox1.Image = bmp1;

これだけでパネルにbmp1が表示される

342 :デフォルトの名無しさん :2018/05/05(土) 01:54:36.93 ID:US1Viqbq0.net
あ、パネルにPictureBox貼ってる前提ね

343 :デフォルトの名無しさん :2018/05/05(土) 05:38:36.94 ID:LRJiKh0v0.net
>>341
ありがとうございます
思っていることが問題なく実現できました

できるようになってみると、一体何を悩んでいたのか、自分でもわからなくなってしまいました
多分、DrawImage で書き込む先がVRAMだと思い込んでいたのでしょう

344 :デフォルトの名無しさん :2018/05/06(日) 01:21:02.23 ID:dl2mQyCb0.net
private void Form1_ResizeBegin(object sender, EventArgs e)
{
  leftEdge = this.Left;
  rightEdge = this.Right;
  topEdge = this.Top;
  bottomEdge = this.Bottom;
}

private void Form1_ResizeEnd(object sender, EventArgs e)
{
 if ((rightEdge < this.Right) && (topEdge > this.Top))
 {
   // 処理に入らない
 }
}

このコードでフォームを右上にドラッグして拡大した場合に処理に入らないのですがどこがおかしいでしょうか

345 :デフォルトの名無しさん :2018/05/06(日) 01:31:51.93 ID:HfMj07lt0.net
右上にってことは事後の方が top の値が小さくなってるからじゃないの?

346 :デフォルトの名無しさん :2018/05/06(日) 01:32:20.44 ID:HfMj07lt0.net
ああ、そう書いてあるのか。失礼。

347 :デフォルトの名無しさん :2018/05/06(日) 01:40:54.74 ID:LGFxrhOP0.net
>>344
イベント有効になっている?
Form1_ResizeEndのメソッドに処理が入っているかそこから確認
  int leftEdge, rightEdge,topEdge ,bottomEdge;
public Form1()
{
InitializeComponent();
this.ResizeBegin += Form1_ResizeBegin;
this.ResizeEnd += Form1_ResizeEnd;
}
private void Form1_ResizeBegin(object sender, EventArgs e)
{
this.Text = "start";
leftEdge = this.Left;
rightEdge = this.Right;
topEdge = this.Top;
bottomEdge = this.Bottom;
}
private void Form1_ResizeEnd(object sender, EventArgs e)
{
this.Text = String.Format("{0}:{1}", (rightEdge < this.Right), (topEdge > this.Top));
if ((rightEdge < this.Right) && (topEdge > this.Top))
{
this.Text = "OK";
}
}
これで動いた

348 :デフォルトの名無しさん :2018/05/06(日) 01:45:28.35 ID:mBsERy4z0.net
private void DataGridViewFilter()
{
BindingSource objBind;
DataTable objData;
string strFilter;
objData = (DataTable)DataGridView1.DataSource;
if (IsNothing(objData) == false)
{
objBind = new BindingSource();
objBind.DataSource = objData;
strFilter = "Color like '%" + txt_Condition.Text + "%'";
objBind.Filter = strFilter;
}
}

349 :デフォルトの名無しさん :2018/05/06(日) 02:05:39.13 ID:dl2mQyCb0.net
>>347
ご回答ありがとうございます
イベントは有効です
左や上や左上への拡大縮小ドラッグは正常なのですが左下や右上がおかしいです
提供していただいたコードを試したのですが、何故かは分からないのですが rightEdge < this.Right がfalseになっています
もう少し調べてみます

350 :デフォルトの名無しさん :2018/05/06(日) 02:22:41.56 ID:xovvhFEya.net
申し訳ないけど、問題を再現できるそのまんまのコードを提示していない時点で
確実に原因はあなたの勘違いにあると断言できる

351 :デフォルトの名無しさん :2018/05/06(日) 05:58:39.10 ID:CBGkbUql0.net
Listを値渡しすべき所が参照渡しになってたせいで
くっそハマったんだけど
こういうのって、C#の解説本1冊読めば
注意しろって書いてあるもんなの?

参照渡し云々って単語はかろうじて知ってて
↓のサイトをたまたま見つけて、偶然解決出来たけど
https://webbibouroku.com/Blog/Article/list-copy

エラーや例外にならないバグが怖すぎる・・・

352 :デフォルトの名無しさん :2018/05/06(日) 06:08:47.32 ID:994JP5I00.net
そんなものここで聞けば3秒で解決するし

353 :デフォルトの名無しさん :2018/05/06(日) 08:39:03.59 ID:j24ysXtO0.net
c#って物体X(?)は全部参照渡しになるよね

354 :デフォルトの名無しさん :2018/05/06(日) 08:48:15.69 ID:6gN3mvyQ0.net
>>351
それ値渡しじゃない

355 :デフォルトの名無しさん :2018/05/06(日) 09:09:18.32 ID:9GXSG5IC0.net
イメージの配置はできるようになりましたが、いろいろ触っていると、チラツキが
気になるようになってきました
テストしてみたところ、下記のレベルでもチラツキが発生します

private void timer1_Tick(object sender, EventArgs e)
{
Graphics g = Graphics.FromImage(canvas);
g.FillEllipse(bg_brush, x, y, radius, radius);
x += 5;
g.FillEllipse(fg_brush, x, y, radius, radius);
count++;
g.Dispose();
pictureBox1.Image = canvas;
if (count == 10)
{
count = 0;
timer1.Stop();
}
}
timer1.Intervalは100msにしてあります
チラつきを押さえるには、フォームの DoubleBufferd を true にすると良いと見ましたが、
true にしても false にしても変わりないようです
そもそも PictureBox は内部処理でダブルバッファリングを行っているとも見ました
まだなにかできることはあるのでしょうか

356 :デフォルトの名無しさん :2018/05/06(日) 09:36:21.79 ID:9GXSG5IC0.net
書いてませんでしたが、bg_brushは背景色の、fg_brushは前景色のブラシです

Brush bg_brush = new SolidBrush(SystemColors.Control);
Brush fg_brush = new SolidBrush(Color.Black);

で定義しています

357 :デフォルトの名無しさん :2018/05/06(日) 09:54:38.21 ID:RTzVBomo0.net
canvasはどんな風に設定しているの?

358 :デフォルトの名無しさん :2018/05/06(日) 10:06:54.11 ID:9GXSG5IC0.net
canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);

として定義しています

359 :デフォルトの名無しさん :2018/05/06(日) 10:36:38.03 ID:RTzVBomo0.net
DoubleBufferdとか触らずともこっちではちらつかないけどなあ
ちらつくってのはどういうふうに見えることを言ってるの?
panelやpictureBoxのサイズやradiusの値もさらしてみては?

360 :デフォルトの名無しさん :2018/05/06(日) 10:50:11.40 ID:IbwjU9Qn0.net
どこで何やってんの不明瞭だから当てずっぽうだが
下手に自前描画してるチラつくなら大体OnPaintBackgroundのせい

361 :デフォルトの名無しさん :2018/05/06(日) 10:55:03.54 ID:9GXSG5IC0.net
https://ideone.com/s4ddqO

これが全コードです
空のWindowsフォームアプリケーションで生成されたフォームに、ボタンとパネル、
PictureBoxを配置しただけの状態です
パネルとPictureBoxは、DockをFillにしてウィンドウサイズに合わせてあります

362 :デフォルトの名無しさん :2018/05/06(日) 10:56:51.16 ID:9GXSG5IC0.net
これで、timer1のIntervalを50msにすると、はっきり分かる程度にちらつきます

363 :デフォルトの名無しさん :2018/05/06(日) 13:14:55.43 ID:gzoDeGmX0.net
垂直同期しろ。

364 :デフォルトの名無しさん :2018/05/06(日) 13:31:21.62 ID:o/aLqSU5a.net
>>362
やってみたけとちらついたりはしないねw
ただフレームレートが低いから滑らかに見えないだけ

365 :デフォルトの名無しさん :2018/05/06(日) 15:35:36.42 ID:MOQB+J+Ha.net
解決のヒントにはならないだろうけど

ちらつきって何かということについて
すでに表示されてるものが一瞬透明に見えるから表示がおかしく見えること

たとえば半径100の円が横に5ドット動くとする
普通に考えたらほとんどの円に背景は隠れたままだけど何も考えないで適当にやると
背景が一瞬見えてしまう

一度円を消してなにもない状態を表示して
次に円を書いてるから問題がある

何もない状態を表示しなければいい

366 :デフォルトの名無しさん :2018/05/06(日) 18:19:28.93 ID:9GXSG5IC0.net
>>364
環境の問題ですか・・・
一応ディスプレイのリフレッシュレートは60Hz、タイマー設定が50msだと20Hzあれば
十分ですので、あまり関係ない気がするのですが
でも私の環境でしか出ないのであれば、環境依存かもしれません

>>365
これを避けるためにダブルバッファリングをするわけですし、書き換えた後のビットマップを
PictureBoxに貼り付けるようにして、描画途中では貼っていません

367 :デフォルトの名無しさん :2018/05/06(日) 18:22:22.08 ID:gzoDeGmX0.net
だからハードの違いだって言ってんだろw

368 :デフォルトの名無しさん :2018/05/06(日) 18:25:15.44 ID:w10wIaHya.net
>>366
いやいや何でそういう話になるのw

たぶん環境の問題なんかじゃなく、あなたが低フレームレートに起因する
カクカクした動きをちらつきだと誤認してるだけだと思うよw

369 :デフォルトの名無しさん :2018/05/06(日) 18:30:35.56 ID:gzoDeGmX0.net
アホばっかり。

370 :デフォルトの名無しさん :2018/05/06(日) 18:55:10.27 ID:9GXSG5IC0.net
>>368
カクカクした動きとチラつきを同一視しているわけではありません
>>365
が書いたように、今回の例だと黒い円が一瞬消えているような感じがします
移動量の x += 10; をもっと少なくすれば目立たなくなりますが、それでも
なんとなく嫌な感じがします
でも言葉で説明するのは難しいですね

低フレームレートの認識を誤解していたようですが、インターバルを100msとか
50msとかだとディスプレイのリフレッシュレート(あるいは人間の認識力)に比べて
低すぎるので、かえって目立ってしまうということでしょうか?
確かに、インターバルを思い切って5msとかにしてみると、チラつきは軽減されてきた
気がします

371 :デフォルトの名無しさん :2018/05/06(日) 19:33:59.43 ID:7/UIZFPx0.net
ちょっと改変して逆にチラツキをわかるようにしてみた
https://ideone.com/3X8oJh
WinFormプロジェクトを新規で作って元のソースを全部消したうえで、このソースを既存の項目として追加
上がPictureBoxで下がPanel
>>370
PictureBoxのダブルバッファがデフォルトで有効なのは知っているのを確認したので
その上でPanelはデフォルトでダブルバッファが有効だというのを念頭に入れてコードを実行してほしい
同じオブジェクトの動きだが、うちで確認する限りは下はあきらかにチラツキがあって上は目立たない
>>365
>何もない状態を表示しなければいい
というわけで先に描画して動いた部分だけを消すという動作を実現してみたつもり
だったんだけど、移動量を大きくするとカクツキがどうしても目立ってしまってうまくいかない。ギブアップw
>>370
もっとGDI+の動作を把握するとかゲームなどでの実装方法を探すかした方がいいと思う
残念ながら俺の知識ではここまで

372 :>>370 :2018/05/06(日) 19:37:36.72 ID:7/UIZFPx0.net
ごめん
>Panelはデフォルトでダブルバッファが有効だというのを念頭に入れて
Panelはデフォルトでダブルバッファが無効だというのを念頭に入れて
の間違い

373 :デフォルトの名無しさん :2018/05/06(日) 20:17:55.74 ID:LW3/RgRJa.net
うーんw

>>361のコード自体がダブルバッファリングの実装なので、
少なくともGDI+を使う限り、これで本当にちらつくなら何をやってもちらつき回避は不可能。

何度も言うけど、少なくとも俺の環境では低フレームレート特有の不自然さはあっても
フリッカーは確認できない

しつこいようだけど、俺は質問者がちらつき(フリッカー)がどういう現象か
理解してないだけのように思う

374 :デフォルトの名無しさん :2018/05/06(日) 20:20:58.90 ID:j24ysXtO0.net
まあ、unity使ってもDirectX使ってもスクロールとかなめらかにならないしね
グラボも汚いってのも考慮に入れる
市販のゲームでもスクロールしてるときはカクカクグシャグシャはデフォ

375 :デフォルトの名無しさん :2018/05/06(日) 20:21:41.45 ID:9GXSG5IC0.net
>>371
ありがとうございます
私が確認しても、確かに上下で明らかにチラつきが違い、下ははっきりとわかります
上はほとんどわからないレベルですね

PictureBoxもPanelも、どちらも出来上がったビットマップを貼り付けているのですから
同じ表示になりそうな気がしますが違いますね
これをちゃんと理解できれば解決できそうです

376 :デフォルトの名無しさん :2018/05/06(日) 20:36:30.01 ID:LW3/RgRJa.net
>>371のコートだとたしかにフリッカーが確認できるねw
>>373は撤回します

377 :デフォルトの名無しさん :2018/05/06(日) 20:39:37.09 ID:9GXSG5IC0.net
>>373
私が「チラツキ」と表現しているのは、>>371が上げてくれたプログラムの
下側、panelで発生している現象です

私の理解では、>>371でなぜ表示に違いが生じるのかがわかりません
どちらも、加工後のcanvasを貼り付けているはずなのに

>>371でやっていることは、ダブルバッファリングではないのでしょうか?

>>371のプログラムを実行してみて、違いはPictureBoxをウィンドウに直接
貼り付けているか、panelを置いてその上に貼り付けているか、です
私のテストプログラムでは、panelを置いてその上にpictureBox1を置いてます
これが影響するのでしょうか

378 :デフォルトの名無しさん :2018/05/06(日) 20:49:20.18 ID:7/UIZFPx0.net
https://ideone.com/PNPIlj
蛇足だろうけどnew BitmapじゃなくPictureBox.Imageを直接描き変えるもの
>>377
370で何をしたかったかというと「ダブルバッファリングではこれ以上改善できない」事の証明
>panelを置いてその上にpictureBox1を置いてます
それは多分関係ない。panelに背景を設定すると話が変わると思うけど
実際に改善するには移動量を少なくして滑らかに見せるくらいしかおもいつかない
消える側の方でなく進行方向側でカクついているんだよなあ・・・

379 :デフォルトの名無しさん :2018/05/06(日) 21:02:31.57 ID:9GXSG5IC0.net
>>378
試してみました
>>371と変わらない感じですね
これまで質問してきた趣旨とは変わってしまいますが、

Graphics g = Graphics.FromImage(pictureBox1.Image);

これでビットマップを書き換えた後に pictureBox1.Image を書き換えていないと
いうことは、いちいち canvas ビットマップを用意して細工しなくてもよかったと
いうことでしょうか

で、本質ですが、ご提供いただいたテストプログラムでは明らかにチラつきの
改善が見られるということはダブルバッファリングは機能している、これ以上
気になるのであれば、それは滑らかさの問題であってチラつきの問題ではない、
と認識するのが良さそうですね

380 :デフォルトの名無しさん :2018/05/06(日) 21:19:50.71 ID:IbwjU9Qn0.net
下PanelはBackgroundImage使ってるのが悪いんじゃねえかなあ

canvasはPanelのPaintで描画するようにして
PanelのDoubleBufferedをtrueにするかOnPaintBackgroundの無効化でチラ付かなくなったよ

あとチラつきとは関係ないけどお行儀的には再描画はTickで
Invalidate(true)呼び出してPaintのタイミングはフレームワークに任せるべし
Tick毎に無駄にImage/BackgroundImageに突っ込んでるから結果的に自分で再描画してるけど

381 :デフォルトの名無しさん :2018/05/06(日) 21:52:55.18 ID:LW3/RgRJa.net
ああ、やっぱり俺の認識で合ってるねw
何だかおかしいと思ったが

>>377
フリッカーを誤解してないのは分かったけど、>>361のコードでフリッカーなんか
発生しないってだから

382 :デフォルトの名無しさん :2018/05/06(日) 23:08:48.35 ID:s/HjZ7Qd0.net
>>351
それは参照渡しになってたわけじゃない
C#の参照渡しはhoge(ref list)のようにrefがつく
あなたがハマったのは参照の値渡しでインスタンスは複製されないということ

ぺらぺらの入門書とかだとわからんが、ジェネリックやクラスをちゃんと学べる程度の本なら載ってるはず

383 :デフォルトの名無しさん :2018/05/06(日) 23:23:27.04 ID:gzoDeGmX0.net
グラボの性能差だから、ちらつき。

384 :デフォルトの名無しさん :2018/05/06(日) 23:49:17.66 ID:5astaXB20.net
>>351
List固有の問題ではなく、classは全て参照型だからだ。
だから、=で代入しても同じオブジェクトを指すだけ。
ちなみにstructは値型。こっちなら=で代入したらオブジェクトが複製される。

385 :デフォルトの名無しさん :2018/05/07(月) 01:29:04.63 ID:inVQGvpaa.net
>>361をFPSと速度を変えられるようにしてみたけど
思ったより面白くもないし動作も滑らかじゃないなw
どっちにしろやっぱりフリッカーは発生しない
https://ideone.com/E3V57h

ところで、タイトルバーをドラッグしたりすると画面の更新が止まる問題を
回避する方法ってなかったっけ?

386 :デフォルトの名無しさん :2018/05/07(月) 01:32:11.28 ID:inVQGvpaa.net
ああ、今思ったけど、FPSは本当は実測した値を表示すべきだねw
>>385はタイマーのインターバルから計算した理論値で実測値じゃない

387 :デフォルトの名無しさん :2018/05/07(月) 01:32:57.05 ID:3karsGmmp.net
グラボやドライバーの違いで発生する問題を自分のところじゃ発生しないからって頭ごなしに否定する奴はどうして生きてるんだろうな?

388 :デフォルトの名無しさん :2018/05/07(月) 01:42:18.83 ID:inVQGvpaa.net
>>387
それは君が勝手にそう思ってるだけw
そんな問題はWin9xの時代だって存在しなかったよ
っていうか、言っちゃわるいけどフリッカーが発生する原因を理解していればそんな間抜けな台詞は
出てこない

389 :デフォルトの名無しさん :2018/05/07(月) 01:43:57.94 ID:inVQGvpaa.net
なんか垂直同期(笑)とか書いてるのもいたけど、
頭の中80年代で止まってるんじゃなかろうかw

390 :デフォルトの名無しさん :2018/05/07(月) 04:32:44.15 ID:S2Y5gzQd0.net
DataGridViewで、複数のカラムを基準にソートするにはどうしたらいいでしょうか。
以下のようなイメージです。

元データ
------
4   2
1   4
2   1
5   4
6   7
1   3
1   6

これを、カラムのヘッダーセルのクリック操作だけで、以下のように出来るようにしたいです。
------
1   3
1   4
1   6
2   1
4   2
5   4
6   7

391 :デフォルトの名無しさん :2018/05/07(月) 06:24:03.69 ID:SlIACPlK0.net
プロパティだけでは無理
各列のSortModeはAutomatic以外にして
ColumnHeaderClickイベントで自分でソートする必要がある
実際にどうやってソートするかはDataGridViewに表示してるデータをどうやっているか次第
ところで下の状態で1番目の方のカラムヘッダをクリックしたらどうなるの?
とか色々場合があってUIというかUX?を決定するのが結構面倒

392 :デフォルトの名無しさん :2018/05/07(月) 06:43:05.39 ID:UbBhnDZYM.net
さすがに垂直同期はネタだろ
釣られる奴がいるとは思わなかったけど w

393 :デフォルトの名無しさん :2018/05/07(月) 07:18:03.31 ID:3karsGmmp.net
ググって事実を知ったんだな。そんなに悔しいのか?

394 :デフォルトの名無しさん :2018/05/07(月) 08:25:49.50 ID:H7YotaIo0.net
>>390-391
複数列でのソートは、Kotlin なら、

配列.sortedWith(compareBy({ 列1 }, { 列2 }))

C# は、よく知らないけど、こういう感じ?

配列.OrderBy(列1).ThenBy(列2)

395 :デフォルトの名無しさん :2018/05/07(月) 14:38:50.30 ID:iApxgodj0.net
教えてください
キャストが上手くできずに困っています
具体的には、VisualStudioでデバッグのウォッチウィンドウに

Enumerable.Empty<int>() is IEnumerable<object>

と入力するとtrueと表示されるので少なくとも条件が整えば
IEnumerable<int> は IEnumerable<object> に
キャストできるとおもうのですが、プログラム上で安直に

Console.WriteLine(Enumerable.Empty<int>() is IEnumerable<object>);

を実行すると画面にFalseと表示されてしまいます

ウォッチウィンドウ上とプログラム上で何か条件の違いがあって
このようなことが起こっているのだとは思いますが、理解が不十分で解決方法が分かりません

そもそもIEnumerable<T>のTは共変なのでintがobjectにアップキャストできる以上
IEnumerable<int>も無条件でIEnumerable<object>にキャストできると
思っていたのですが、この部分に何か誤解があるのでしょうか

VisualStudio15.6.7、コンソールアプリ、ターゲットフレームワーク4.7.1でテストしています
よろしくお願いします

396 :デフォルトの名無しさん :2018/05/07(月) 18:57:27.81 ID:cAXvX5WKa.net
>>395
値型は不変だったような
http://ufcpp.net/study/csharp/sp4_variance.html#value

イミディエイトだとs演算子がtrueを返す理由は分かりませんw
何でしょうね

397 :デフォルトの名無しさん :2018/05/07(月) 21:52:56.92 ID:iApxgodj0.net
>>396
レスどうもありがとうございます。その後色々と試してみると、プログラムで

Console.WriteLine((Enumerable.Repeat(4649, 1) as IEnumerable<object>)?.First() ?? 184);

を実行すると画面には184と表示され、教えていただいとことと辻褄が合うように思います
また、これまでの結果から考えてウォッチウィンドウで

(Enumerable.Repeat(4649, 1) as IEnumerable<object>)?.First() ?? 184

の値を調べれば4649と表示されるのかなと思いきや「メモリを読み取ることができません」と表示されたので、
こちらの挙動はおっしゃる通り分からない(バグ?)と考えるしかなさそうです

ジェネリックでないIEnumerableはLINQが使えないのでこれまで

if (x is IEnumerable<object> enumerableObject)
{
  ...
}

と書く場面があったのですが、これではIEnumerable<値型>が拾えなさそうなので

if (x is IEnumerable enumerable)
{
  var enumerableObject = enumerable as IEnumerable<object> ?? enumerable.Cast<object>();
  ...
}

とでも書いておこうかと思います(今のプログラムではxがジェネリックでないIEnumerableになることはないのですが)
もっと良い方法があれば教えてもらえると嬉しいです

398 :デフォルトの名無しさん :2018/05/09(水) 00:08:06.32 ID:98vw71AM0.net
名前空間A と名前空間A.B がある場合に、A.B内からAのクラスを扱うにはどうすればいいのですか?

399 :デフォルトの名無しさん :2018/05/09(水) 01:14:34.94 ID:KTiGjU5t0.net
>>322
Aをusingすればよい

400 :デフォルトの名無しさん :2018/05/09(水) 01:15:21.71 ID:KTiGjU5t0.net
なんかすげーレス間違えたけど
>>398

401 :デフォルトの名無しさん :2018/05/09(水) 01:47:53.29 ID:lSrhXmV/0.net
そもそも名前空間ってどうやって扱うのが正しいの?

402 :デフォルトの名無しさん :2018/05/09(水) 02:09:09.87 ID:98vw71AM0.net
>>400
クラスとは違って、やはりそうやって使うものなのですか

403 :デフォルトの名無しさん :2018/05/09(水) 02:25:39.99 ID:PD0iDBLsp.net
完全表記しても良いんだよ?

404 :デフォルトの名無しさん :2018/05/09(水) 17:57:38.22 ID:8iDq54Sd0.net
嫌なら全部同じ名前空間内に入れ込んでしまえ
悩まなくて済むぞ

405 :デフォルトの名無しさん :2018/05/09(水) 18:15:06.67 ID:GFIhYWfG0.net
別に名前空間分ける意味ないよな。

406 :デフォルトの名無しさん :2018/05/09(水) 18:19:36.14 ID:nbiQ9nbF0.net
分業の為の仕組み

407 :デフォルトの名無しさん :2018/05/09(水) 19:48:53.19 ID:lSrhXmV/0.net
>>406
逆に無駄な混乱が起きない?
同じ名前のクラスとかあるとちょっと面倒じゃない?

408 :デフォルトの名無しさん :2018/05/09(水) 19:49:33.69 ID:D7X0frHnM.net
C#好きだけどnamespaceでネスト一つ深くなるのはあかんわ

409 :デフォルトの名無しさん :2018/05/09(水) 20:08:50.17 ID:4zjT3ksId.net
>>407
全て自分で書くコードならいいんだけどね。サードパーティのライブラリのクラスと衝突する可能性なんていくらでもあるから。

410 :デフォルトの名無しさん :2018/05/09(水) 20:10:07.14 ID:QZYGN7xi0.net
>>407
書き分けのために命名が歪むのは良くない
NM1.Class/NM2.Class
NM1Class/NM2Class
単にプリフィクス付けるだけなら
名前空間があろうとなかろうとやってる事は同じ

411 :デフォルトの名無しさん :2018/05/09(水) 20:22:37.87 ID:SavMNDDu0.net
>>407
むしろ同じ名前でも被らないようにする仕組みなんだが...

412 :デフォルトの名無しさん :2018/05/09(水) 20:54:59.54 ID:EkWsGx0u0.net
やたら長い名前付けて重複を避けるのさ。
ダイビングがかったるいって?
最初のusingに書くだけだから大丈夫。

413 :デフォルトの名無しさん :2018/05/09(水) 21:00:22.54 ID:EHFfoX53a.net
>>407
自分(同じチーム)で同じ名前の違うクラスが必要になるケースは
少ないが(ないことはない)他人が書いたライブラリで既に使われているのと
同じ名前が必要になるケースなんかいくらでもあるよw

例えばSystem.Drawing.Point以外のPointが使えなかったら困るでしょ

あと、名前空間の目的は名前のバッティングの回避だけじゃない。
むしろ一番の目的は分類と整理でしょ。
名前空間が使えないライブラリは全部のファイルをデスクトップに置くできない人と同じ

適切に命名され適切な階層構造をもった名前空間は索引の機能を持つし、
コードのコンテキストを明確にする。

System.Drawing.PointがPointだけで2Dグラフィックの座標だと分かるのは、
プログラマはそれがSystem.Drawing内の型だと知っているから

414 :デフォルトの名無しさん :2018/05/10(木) 00:36:27.80 ID:yXMj8vMdM.net
using エイリアス ディレクティブ でggr

415 :デフォルトの名無しさん :2018/05/10(木) 01:45:10.65 ID:m/SOSTAZ0.net
>>413
普通にdrawingのcolorとmediaのcolorがバッティングしてるじゃん
それと自作のcolorとこれまた別の奴の作ったcolorがバッティングするだけでもう面倒臭くて死にそうになる

416 :デフォルトの名無しさん :2018/05/10(木) 01:55:25.02 ID:m/SOSTAZ0.net
もっというとwpfでも別のcolor作ってんじゃん
バッティングうぜぇんだよ

こんな簡単なクラスでもう再利用効かないんだから名前空間まで作って管理するなよバカっタレかよ
当のMSからもうまともなことやってねぇっていうかできないんだから
いい加減ファンタジー設計はやめるべき
いや、もうファンタジーじゃないな
メルヘンの領域まで入ってる

417 :デフォルトの名無しさん :2018/05/10(木) 02:19:31.02 ID:di97fd/ta.net
>>415-416
何を言ってるのか意味がわからねいよ。

418 :デフォルトの名無しさん :2018/05/10(木) 02:30:05.52 ID:yIfUPK8/0.net
この程度で死ぬほど面倒臭がってたら、プログラミング自体が向いてないな。

419 :デフォルトの名無しさん :2018/05/10(木) 04:06:02.42 ID:R4f/WJPq0.net
C#8.0のpreviewきましたねえ
https://github.com/dotnet/csharplang/wiki/vNext-Preview

420 :デフォルトの名無しさん :2018/05/10(木) 07:27:01.34 ID:1WB9uyi8M.net
>>417
バカじゃん
何でwinformにcolorあるのにwpfでも作ったの?
再利用できてないじゃん
役に立たないじゃん
名前空間分けてそれで?
新しいもの作ったら元気一杯に捨ててるじゃん

ってとこに集約する

421 :デフォルトの名無しさん :2018/05/10(木) 07:37:29.76 ID:CKE2Ak/10.net
Color構造体とColorsクラスの事かな?

422 :デフォルトの名無しさん :2018/05/10(木) 07:48:33.05 ID:M9xdMPFN0.net
こいついつものアレだろ
触るな

423 :デフォルトの名無しさん :2018/05/10(木) 08:08:52.60 ID:1WB9uyi8M.net
>>422
反論できないならcolorクラスはもう作らせないぞ

424 :デフォルトの名無しさん :2018/05/10(木) 09:17:58.68 ID:l4uhHAvqa.net
全く話題になってないけどC#7.3も正式リリースされたぞ
念願の where T : Enum

425 :デフォルトの名無しさん :2018/05/10(木) 09:36:24.91 ID:EV77m/Hv0.net
>>423
> それと自作のcolorとこれまた別の奴の作ったcolor

> バカじゃん
> 何でwinformにcolorあるのにwpfでも作ったの?

え、なんで自分でcolor作ったの?

426 :デフォルトの名無しさん :2018/05/10(木) 09:51:09.75 ID:2wmh3oy2M.net
>>425
触るなって言ってんだろテメーマッチポンプか?
それとも別種の頭かわいそうな生ゴミか?

427 :デフォルトの名無しさん :2018/05/10(木) 10:30:56.59 ID:Yjx9MaDJp.net
つか、同じ名前で違う用途に割り当てる方が難儀だろ普通は名前変える。

428 :デフォルトの名無しさん :2018/05/10(木) 12:33:21.16 ID:kan/O/6Ed.net
>>427
だから世の中にどんだけクラスが存在すると思ってんの?

429 :デフォルトの名無しさん :2018/05/10(木) 12:51:46.30 ID:YLAKf1v1a.net
普通の初心者だったらSystem.IOのPathとWPFのPathが競合することが気になると思う

430 :デフォルトの名無しさん :2018/05/10(木) 12:53:40.23 ID:YLAKf1v1a.net
イギリスだったらつづりはcolour

431 :デフォルトの名無しさん :2018/05/10(木) 19:43:14.60 ID:M5rAF93d0.net
コロワァ

432 :デフォルトの名無しさん :2018/05/10(木) 20:53:17.15 ID:Yjx9MaDJp.net
>>428
自前クラスを組み込むクラスの組み合わせだけ考えりゃよかんべよ。

433 :デフォルトの名無しさん :2018/05/10(木) 22:10:03.44 ID:R4f/WJPq0.net
>>432
日本語で

434 :デフォルトの名無しさん :2018/05/11(金) 00:30:31.25 ID:F4aYSsq30.net
>>425
WPF「WinFormなんて爺さんのクラスなんて使えるかよ」

435 :デフォルトの名無しさん :2018/05/11(金) 00:58:40.04 ID:TW3IXpUfa.net
>>434
WinFormsが定年間近の爺さんだとしたらWPFは35歳無職童貞だな

436 :デフォルトの名無しさん :2018/05/11(金) 13:52:55.21 ID:sq5ITweXM.net
drawimageって自分でクリッピングしないとはみ出たら遅い?

437 :デフォルトの名無しさん :2018/05/11(金) 14:13:09.38 ID:NZxgVNkdp.net
formとwpfで、似て非なる部品ってどうにかならんの?
ネットで使い方調べる時、紛らわしいんだよな。

438 :デフォルトの名無しさん :2018/05/11(金) 14:36:21.57 ID:SfoScckv0.net
>>434
UWP「そろそろWPFさんにはご退場願おうか」

439 :デフォルトの名無しさん :2018/05/11(金) 15:23:07.83 ID:oUtXC/5od.net
>>438
メーカー「そろそろUWP用のコントロールつくっか?」

440 :デフォルトの名無しさん :2018/05/11(金) 16:30:16.71 ID:DPTi05MZM.net
親フォームからnewした子フォームは親とは非同期ですか?それとも同期処理となりますか?

441 :デフォルトの名無しさん :2018/05/11(金) 16:50:42.60 ID:Kz4/xaqBM.net
正しい言葉の使い方では非同期だけど、たぶん君が言ってるのは同期か非同期かではなくて同じスレッドかどうかだろう
それでいえば同じスレッド

442 :デフォルトの名無しさん :2018/05/11(金) 17:48:49.51 ID:n/c4W3DX0.net
つか、聞きたいのは、モーダルかモードレスかじゃね?

443 :デフォルトの名無しさん :2018/05/11(金) 17:56:35.27 ID:+Mrz0iyE0.net
ここで質問するときは自分が何をやりたいかを書いてもらった方がいいな
>>440
>>442の意味なら
方法 : Windows フォームをモーダルおよびモードレスで表示する
https://msdn.microsoft.com/ja-jp/library/39wcs2dh(v=vs.110).aspx

444 :デフォルトの名無しさん :2018/05/11(金) 19:52:53.18 ID:7YPYpwobM.net
>>441
同じスレッドなら同期ではないのですか?
>>442
モーダルとはなんぞやレベルなので出直してきます
>>443
参考サイトありがとうございます

445 :デフォルトの名無しさん :2018/05/11(金) 20:39:18.87 ID:A7KRRugp0.net
ポータブルアプリの設定ファイルを扱うなら何がスタンダードですか?
XmlSerializer使ってxmlファイルにするか
Win32API経由でレガシーなiniファイルにするか。

やっぱ前者ですかね?

446 :デフォルトの名無しさん :2018/05/11(金) 20:42:59.37 ID:H5+wAeJBM.net
>>445
今時はJSON

447 :デフォルトの名無しさん :2018/05/11(金) 21:30:53.62 ID:wYle0Ioy0.net
>>445
セオリー通りappsettings.jsonやろ普通

448 :デフォルトの名無しさん :2018/05/11(金) 21:55:14.15 ID:F4aYSsq30.net
>>445
人の手で編集するかどうか
するならcsvファイルかxlsがええで
Excel使えるから
xmlもiniもjsonも編集ツールが無くてゴミ

449 :デフォルトの名無しさん :2018/05/11(金) 21:57:27.82 ID:wYle0Ioy0.net
>>448
キチガイ

450 :デフォルトの名無しさん :2018/05/11(金) 22:04:41.45 ID:F4aYSsq30.net
>>449
ほう
じゃあ、編集ツール出して見ろよ
そんな誰も編集できないフォーマットで設定とか言ってたって全く説得力ないよ
はい、論破

451 :デフォルトの名無しさん :2018/05/11(金) 22:08:27.43 ID:KxM4SNOx0.net
yamlとかtomlもまぁアリだな
jsonはtailing commaがちょっと煩い

452 :デフォルトの名無しさん :2018/05/11(金) 22:08:43.32 ID:wYle0Ioy0.net
ごめんキチガイに触ってしまった

453 :デフォルトの名無しさん :2018/05/11(金) 22:09:55.64 ID:o64e7/8Ad.net
>>451
C#ならappsettings.jsonで良くね?IOptionとの相性いいし

454 :デフォルトの名無しさん :2018/05/11(金) 22:11:29.14 ID:KxM4SNOx0.net
>>453
JSONが標準だとは思うし, まぁJSONにする
が, リスト末尾のカンマは許して欲しい

455 :444 :2018/05/11(金) 23:25:00.79 ID:A7KRRugp0.net
なるほど、今時はJSONですか。
ただ、少し調べて見たところweb系の構成ファイルとして使う?みたいで自分の思ってるのとは違うのかなと感じました。

後出しになってしまって申し訳ないんですが、自分のイメージしてるのはFormアプリで例えば「最前面に表示する/しない」だとか「昇順/降順で並べる」みたいな、チェックボックスやラジオボタンの選択内容を起動時に読み込み、終了時に書き込みする想定です。

appsettings.jsonは読み込みしかなさそうだったのですが、書き込みってありますか?自分でjson形式にコンバートしてベタに書き込みしろってことですかね?

456 :デフォルトの名無しさん :2018/05/11(金) 23:28:06.24 ID:gh5GwZAv0.net
>>455
その用途ならアプリ外からエディタで編集させることなんて無いだろうから、正直なんでも良いと思う

457 :デフォルトの名無しさん :2018/05/11(金) 23:31:25.65 ID:fVy+Ps+50.net
jsonならNewtonSoftがあるけどyamlシリアライザだとどれがデファクトなんだ?

458 :デフォルトの名無しさん :2018/05/11(金) 23:31:53.13 ID:fVy+Ps+50.net
jsonならNewtonSoftがあるけどyamlシリアライザだとどれがデファクトなんだ?

459 :デフォルトの名無しさん :2018/05/11(金) 23:33:44.23 ID:KxM4SNOx0.net
>>455
JSONで読んだり書いたりするなんてどうとでも出来る
まぁXML以外ならなんでもいいと思うけどね

460 :デフォルトの名無しさん :2018/05/12(土) 00:31:10.54 ID:wbfjgNFba.net
前も書いたけど騙されたらダメwww

.NETには標準のシリアライザがいくつも存在するんだから、特に理由がないかぎり
あえて外様を使うとか頭の悪い中学生じみてる

461 :デフォルトの名無しさん :2018/05/12(土) 03:56:46.76 ID:ek+Myn8j0.net
var exts = {".jpeg", ".jpg", ".png", ".gif"};

var f = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
.Where(c => exts.All(extension => !c.EndsWith(extension)))
.ToArray();

extsの拡張子以外のファイルを抽出したいんだけど
大文字小文字区別せずに拡張子だけを比較する方法ないですか?

もっと効率いい方法ある気が・・・

462 :デフォルトの名無しさん :2018/05/12(土) 04:18:13.81 ID:ek+Myn8j0.net
!c.ToLower().EndsWith(extension)
で対応します

463 :デフォルトの名無しさん :2018/05/12(土) 05:18:29.02 ID:V3QYZkJA0.net
>.NETには標準のシリアライザがいくつも存在するんだから、特に理由がないかぎり
>あえて外様を使うとか頭の悪い中学生じみてる

いくつもあるの? どんなのがあるのか三つくらい教えてください。
ビルドするごとに消えるのでは使いにくいというか何度もビルドするのは普通だとおもうので
それでは使い物にならないので、ビルドしても消えないものがいい。

464 :デフォルトの名無しさん:2018/05/12(土) 05:48:54.31 ID:d7ZTDjaEu
過去スレで以下でアルファチャンネルつき32bitビットマップで保存できると書いてたけど
どのソフトで開いても黒くて透過してません。どうしたらいいでしょうか?開いたソフトが対応してないだけ??
Bitmap bmp = new Bitmap( 32, 32 );
using( var g = Graphics.FromImage( bmp ) )
{
 using( var sb = new SolidBrush( Color.FromArgb( 128, Color.Red ) ) )
 {
  g.FillRectangle( sb, new Rectangle( 0, 0, 16, 16 ) );
 }
}
bmp.Save( @"C:\Users\ハゲ\Desktop\test.bmp", ImageFormat.Bmp );

465 :デフォルトの名無しさん :2018/05/12(土) 06:12:38.61 ID:Qc7Beiuka.net
>>460
今時その認識は正直ヤバい
今の.NETの標準のシリアライザはJSON.NET
Core系では完全に標準シリアライザとしてフレームワークで使われてるし、MSDNにもJSONならJSON.NET使えと書いてる

466 :デフォルトの名無しさん :2018/05/12(土) 06:16:13.33 ID:9vavBtpKM.net
>>463
https://msdn.microsoft.com/ja-jp/library/4abbf6k0(v=vs.120).aspx

467 :デフォルトの名無しさん :2018/05/12(土) 06:20:19.72 ID:9vavBtpKM.net
>>465
DataContractJsonSerializer でなくJson.net のソースは?

468 :デフォルトの名無しさん :2018/05/12(土) 06:29:12.76 ID:hwxaPbIq0.net
設定ファイルは、csv, yaml, json。
Java系のant, maven などは、XML。
Mac系は、property file

chef, vagrant では、Ruby。
Gradle では、Groovy

Haxe のserializer は、数個のプログラミング言語に渡って機能するし、
json, xml みたいに型情報が無くなったりしない

もちろん、Ruby, Groovy も、
プログラミング言語自体が設定ファイルだから、そのまま使える

469 :デフォルトの名無しさん :2018/05/12(土) 07:13:07.72 ID:Qc7Beiuka.net
>>467
https://msdn.microsoft.com/ja-jp/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx
なんか勘違いしてるみたいだけど、DataContract系は通信に使うもので
ファイルの読み書きに使うことを想定されているもんじゃないよ

470 :デフォルトの名無しさん :2018/05/12(土) 07:21:14.10 ID:UP+Hygq+M.net
DataContractSerializerは絶対にファイルに書いちゃダメってわけではないけど、データのスキーマがあらかじめ決まってる場合には使えない
あくまで書く側と読む側とで解釈が共通でありさえすれればよくて、その中身を人間は気にしないよ、ってときに使う

471 :444 :2018/05/12(土) 07:26:10.70 ID:4i84e4IV0.net
調べが足りずすみません。
NewtonsoftのJSON.NETというのを使えばいいみたいですね。
.NET標準のXmlSerializerと同じような感じの使い方ですね。

ちなみに、XMLはやめた方が良いと意見ありましたが、
どういった理由からでしょうか?

472 :デフォルトの名無しさん :2018/05/12(土) 07:35:16.58 ID:Qc7Beiuka.net
XMLは全世界共通の汎用データ交換フォーマットであることが採用する唯一の理由であり、
JSONが主流になった時点で既に存在意義が失われているから

473 :デフォルトの名無しさん :2018/05/12(土) 07:45:11.57 ID:hwxaPbIq0.net
XML は、JSON よりも可読性が高いから、人が見る・書く設定ファイル。
例えば、アプリのフォームのデザインの設定ファイルに使う

人が見ない、単にコンピューター間のデータの受け渡しには、JSON

XMLを使うと、ややこしい

474 :デフォルトの名無しさん :2018/05/12(土) 07:52:19.68 ID:yKmgHprg0.net
>>473
高くねーよ
タグの対応が外れたら素人に発見できんのか?
プログラマならともかくパンピーじゃ無理

475 :デフォルトの名無しさん :2018/05/12(土) 08:08:53.44 ID:V3QYZkJA0.net
XMLは可読性がわるい。つまり直観が効かない。機械向きで非人間的だから設定ファイルには不向き。
たしかに寄ってたかってよく考えてあるのは解る。それには感心するが、寄ってたかって考えすぎると
たいていは失敗する。その代表的な例としてはXMLもっとも良い例のひとつだろう。つまり駄作だなとおもう。

476 :デフォルトの名無しさん :2018/05/12(土) 08:28:20.91 ID:YrlOJuyZ0.net
jsonはいい加減コメントの使用を本家が認めるべきだわな

477 :デフォルトの名無しさん :2018/05/12(土) 08:45:40.67 ID:tydT0Seq0.net
>>473
XMLが読みやすいってwサヴァン症候群なんおまえ?w

478 :デフォルトの名無しさん :2018/05/12(土) 08:49:00.82 ID:KCIDKf2Q0.net
コメントがあると独自スキーマを作り始めるからわざと外したと言っているけど病的だわ
これだから実務屋でない奴は

479 :デフォルトの名無しさん :2018/05/12(土) 08:50:11.44 ID:KCIDKf2Q0.net
そいつC#スレとPythonスレでよく見かけるが
サヴァンかどうかはともかく発達障害は煩ってるぞ

480 :デフォルトの名無しさん :2018/05/12(土) 08:52:02.93 ID:Y49XSW9o0.net
>>461
EndsWithの第二引数は使えない?

481 :デフォルトの名無しさん :2018/05/12(土) 08:57:27.63 ID:vhGL8v7ea.net
>>478
悪名高いJSONライセンス(Good, not Evil)も作ってるからなぁ

482 :デフォルトの名無しさん :2018/05/12(土) 09:22:58.61 ID:9vavBtpKM.net
>>469
THX

483 :464:2018/05/12(土) 15:24:16.94 ID:Mhan8b8Mj
だれか…

484 :464:2018/05/12(土) 16:52:37.99 ID:Mhan8b8Mj
すいませんでしたぁあ〜〜!
自分の作った別のC++のプログラムで読み込んだら普通に透過してましたぁ!!
やっぱフォトショやその他のソフトがアルファチャンネル無視してただけでしたあ〜

485 :デフォルトの名無しさん :2018/05/12(土) 09:36:45.26 ID:15xgRckc0.net
>>455
その用途ならこれで十分かと
https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/application-settings-for-windows-forms

486 :デフォルトの名無しさん :2018/05/12(土) 09:37:39.20 ID:btyZbm2S0.net
XMLのタグの対応って言うけど
JSONも例えば}が数階層のどっかで一つ消えたら人間に対応できなくなるよね

487 :デフォルトの名無しさん :2018/05/12(土) 09:45:59.03 ID:iloBjJ0sM.net
データの規模が大きくなったらXMLのほうが断然有利
JSONとXHTMLを等価変換するスクリプトを書いてJSONだけでウェブサイトを構築する実験を社内でやった事があるがJSONのスコアは酷いものだった
JSONはネストが深くなると使い物にならん

488 :デフォルトの名無しさん :2018/05/12(土) 09:49:55.91 ID:15xgRckc0.net
>>487
どんな点で有利なのかすら書けないクズ

489 :デフォルトの名無しさん :2018/05/12(土) 09:51:04.77 ID:56F0arFd0.net
何のデータも示さずjsonは使い物にならないと言われてもねー

490 :デフォルトの名無しさん :2018/05/12(土) 09:56:29.74 ID:iloBjJ0sM.net
データは自社の資産だから常識的に勝手には公表できない
実験方法は簡単にだけど示したのだからデータが欲しければ実験して検証すればいい

逆にJSONが優れていると言うなら
根拠無しではなくデータなり検証方法を示してほしいね

491 :デフォルトの名無しさん :2018/05/12(土) 09:58:57.02 ID:yKmgHprg0.net
>>490
だったら発言すんなよ
消えろクズ

492 :デフォルトの名無しさん :2018/05/12(土) 10:00:05.00 ID:vhGL8v7ea.net
https://www.infoq.com/news/2013/08/xml-json-performance

同じくらいのパフォーマンスというならまぁ納得出来る
クソみたいなパーサ使わにゃネスト深さでパフォーマンスが悪化するわけねーだろ

493 :デフォルトの名無しさん :2018/05/12(土) 10:00:18.08 ID:56F0arFd0.net
>>490
再現可能なサンプルぐらい作れ
今のままだと説得力ゼロで誰も納得しねーよ

494 :デフォルトの名無しさん :2018/05/12(土) 10:00:46.67 ID:My8LWy2ka.net
XHTMLって死んだ技術だと思うが
10年ぐらい前の世界かな?

xmlが見やすいって人は初めて見た

495 :デフォルトの名無しさん :2018/05/12(土) 10:08:59.85 ID:iloBjJ0sM.net
>>493
5chに書き込むためだけに実験費用払いたくねえよ
こういう実験はサンプルとして人を雇わないとできないんだよ
思考停止ノータイムでボタン押さずに常識的に少し考えてからレスしてくれ頼むから

496 :デフォルトの名無しさん :2018/05/12(土) 10:10:42.69 ID:vhGL8v7ea.net
再現するJSONとXMLを一個ずつ用意すれば終わるのに自分以外の人間が必要か?
プログラミングやったことありますか?

497 :デフォルトの名無しさん :2018/05/12(土) 10:19:11.86 ID:iloBjJ0sM.net
>>496
あんたは論外
パフォーマンスの話なんて誰もしてない
今はみんな生産性、可読性、保守性の話をしてるんだよ

それを測るためにJSONとXHTMLを等価変換するツールを作った

グループAの人達にはJSONでタグ打ちさせてそのJSONをツールでXHTMLに変換した

グループBの人達にはXHTMLで直接タグ打ちさせた

完成するまでの時間や完成したXHTMLのバグ密度など様々なメトリクスを計測したら直接タグ打ちしたグループBのほうがスコアが高かった

グループAとグループBのスコア差はネスト数が深いほど大きくなった

そういう話な
パフォーマンス比較なんてくだらん話は他所でやってくれ

498 :デフォルトの名無しさん :2018/05/12(土) 10:21:37.68 ID:My8LWy2ka.net
>>497
人間のやることじゃないことを人間にさせて比較する意味がよくわからない

499 :デフォルトの名無しさん :2018/05/12(土) 10:22:19.67 ID:7mnYG5Gia.net
>>497
無駄な変数が多すぎて何を比較したいのか分からなくなってるな
仕事できなそう

500 :デフォルトの名無しさん :2018/05/12(土) 10:22:47.54 ID:vhGL8v7ea.net
>>497
人間がやる意味が分からん

501 :デフォルトの名無しさん :2018/05/12(土) 10:25:26.75 ID:FqtFYlf30.net
流石にこれは擁護できんわw

502 :デフォルトの名無しさん :2018/05/12(土) 10:25:55.10 ID:My8LWy2ka.net
テキストデータをバイナリエディタで書かせるような意味不明な実験を
やって悦にいる会社に勤めてかわいそうとしか思えない
上が暗愚だと下が苦労する

503 :デフォルトの名無しさん :2018/05/12(土) 10:26:11.54 ID:iloBjJ0sM.net
馬鹿しかいないのか

人間がやる意味がないとか言ってる連中は実験の趣旨を全く理解してない

だから思考停止してノータイムでボタン押すのやめろって言ってるんだよ

ほんと馬鹿の相手するの疲れるな

504 :デフォルトの名無しさん :2018/05/12(土) 10:28:00.46 ID:vhGL8v7ea.net
こいつはなかなか面白いな, 素でこのコミュ力ならなかなかの逸材だし作っているならよく理解している

505 :デフォルトの名無しさん :2018/05/12(土) 10:30:21.85 ID:My8LWy2ka.net
>>493
上が暗愚たと下も思考停止で伝染するんだな
バイナリデータでutf8の入力しづらさも検証したか?

506 :デフォルトの名無しさん :2018/05/12(土) 10:31:58.09 ID:My8LWy2ka.net
いや面白いな
どこかの技術系のサイトでネタにしてくれないかな

507 :デフォルトの名無しさん :2018/05/12(土) 10:32:26.46 ID:yKmgHprg0.net
結局、手動で設定するファイルであるなら
jsonもxmlもゴミだろ?
なんの話してんの?

508 :デフォルトの名無しさん :2018/05/12(土) 10:36:00.72 ID:My8LWy2ka.net
>>507
そうでもないよ
VScodeでjsonの各種設定ファイルを手で変えたりするけど
あれがXMLだととんでもないことになる

509 :デフォルトの名無しさん :2018/05/12(土) 10:37:02.56 ID:vhGL8v7ea.net
深くて3階層程度でそんなに行数多くないならJSONは苦痛は少ないかな

510 :デフォルトの名無しさん :2018/05/12(土) 10:37:30.03 ID:yKmgHprg0.net
>>508
そういう無意味な比較意味ないじゃん
xlsで設定できるアプリに使い勝手で勝てるの?

511 :デフォルトの名無しさん :2018/05/12(土) 10:38:25.47 ID:15xgRckc0.net
>>510
それが無意味に思えるなんて幸せなやつだな

512 :デフォルトの名無しさん :2018/05/12(土) 10:39:01.19 ID:yKmgHprg0.net
>>511
だってjsonもxmlもいらねーもんよ

513 :デフォルトの名無しさん :2018/05/12(土) 10:39:07.44 ID:PQYWGVmCd.net
>>510
xlsとかwwwバージョン管理システム使ったことすらなさそうだな

514 :デフォルトの名無しさん :2018/05/12(土) 10:39:44.13 ID:vhGL8v7ea.net
残念だけどXMLはクソオブクソだけどXLSとかCSVはそれをはるかに上回るクソなの

515 :デフォルトの名無しさん :2018/05/12(土) 10:39:58.36 ID:yKmgHprg0.net
>>513
csvでもいいよ

516 :デフォルトの名無しさん :2018/05/12(土) 10:40:08.84 ID:15xgRckc0.net
>>512
C#やめた方がいいよ

517 :デフォルトの名無しさん :2018/05/12(土) 10:40:21.22 ID:yKmgHprg0.net
>>514
理由は?

518 :デフォルトの名無しさん :2018/05/12(土) 10:40:23.88 ID:NuxM0Gnx0.net
せめてxlsxにしてくれ

519 :デフォルトの名無しさん :2018/05/12(土) 10:41:06.38 ID:PQYWGVmCd.net
>>515
反論する気すら起きんわ

520 :デフォルトの名無しさん :2018/05/12(土) 10:41:21.27 ID:yKmgHprg0.net
db(Sqlite)もあるぞ

521 :デフォルトの名無しさん :2018/05/12(土) 10:41:32.86 ID:wBO8DWf8M.net
>>497の実験は「XHTMLのデータはJSONで記述するには適さない」ということを示しているだけだな
そりゃXHTMLのスキーマはXMLで表現しやすいように設計されてるんだから、
JSONだと属性とコンテンツの区別がなかったりして記述しづらいのは当たり前だ
JSONにはJSONに適したスキーマ設計がある

522 :デフォルトの名無しさん :2018/05/12(土) 10:41:52.87 ID:15xgRckc0.net
やっぱGitすら使えなさそうだな

523 :デフォルトの名無しさん :2018/05/12(土) 10:43:33.27 ID:yKmgHprg0.net
>>522
gitでcsvの差分見れないの?

524 :デフォルトの名無しさん :2018/05/12(土) 10:44:43.29 ID:15xgRckc0.net
>>523
Gitでsqliteの差分見るのかい?

525 :デフォルトの名無しさん :2018/05/12(土) 10:45:36.20 ID:vhGL8v7ea.net
>>517
XLS: バイナリ, 標準化されてない(されてるかも知らんが概ねExcelないと読めん)
CSV: not well standarized
XLSX: zip圧縮されたXMLじゃん

526 :デフォルトの名無しさん :2018/05/12(土) 10:45:58.87 ID:yKmgHprg0.net
>>524
dbの比較は簡単
バージョン管理の機能にはないけど

527 :デフォルトの名無しさん :2018/05/12(土) 10:46:25.99 ID:iloBjJ0sM.net
>>508
VSCodeのセッティングはネストが浅くて比較的読みやすいし、VSCodeによるコード生成がうまく機能してるからね

528 :デフォルトの名無しさん :2018/05/12(土) 10:47:06.15 ID:15xgRckc0.net
>>526
もはや何を言っているのかわからん

529 :デフォルトの名無しさん :2018/05/12(土) 10:47:34.43 ID:yKmgHprg0.net
>>525
ビジネスでExcel入ってない環境とかあるの?

530 :デフォルトの名無しさん :2018/05/12(土) 10:47:44.90 ID:kT5GzpcRa.net
エクセルからマスターや設定をインポートするようになってるシステムは壊しそうで怖いわ
うっかりレイアウトがズレてて正しくデータが取れなくなるとかよくある
バージョン管理の問題にも関連するけど、再現性が乏しいんだよエクセルは

531 :デフォルトの名無しさん :2018/05/12(土) 10:47:54.11 ID:WIOr5zBad.net
>>526
おれsqliteのバイナリをテキストエディタで書き換える能力ないのよ

532 :デフォルトの名無しさん :2018/05/12(土) 10:48:23.30 ID:yKmgHprg0.net
>>528
DB同士のデータの比較したことねーの?

533 :デフォルトの名無しさん :2018/05/12(土) 10:48:28.96 ID:My8LWy2ka.net
>>521
そこの会社の内部の抗争があるんだと思う

いまどきxhtmlを使ってる派閥がいて
そいつらが不利になったので意味不明なテストでxhtmlすげーをやって
何も考えないやつがそれに賛同したと

エジソンが高圧送電は危険だと言って動物を殺す実験をしたようなもの

534 :デフォルトの名無しさん :2018/05/12(土) 10:48:32.15 ID:15xgRckc0.net
>>529
いくらでもあるよ

535 :デフォルトの名無しさん :2018/05/12(土) 10:48:32.71 ID:vhGL8v7ea.net
>>529
開発は仮想のLinux上とか普通にあるから

536 :デフォルトの名無しさん :2018/05/12(土) 10:49:49.02 ID:15xgRckc0.net
>>532
json vs xmlの比較とは全く異なる次元のものを持ち込んで比較しようとするクズ

537 :デフォルトの名無しさん :2018/05/12(土) 10:50:39.51 ID:yKmgHprg0.net
>>535
openoffice入れろよ

538 :デフォルトの名無しさん :2018/05/12(土) 10:51:17.57 ID:15xgRckc0.net
>>537
こいつdotnet newすら打ったことなさそうだな

539 :デフォルトの名無しさん :2018/05/12(土) 10:51:39.21 ID:yKmgHprg0.net
>>536
そっちは完全に編集するツールがないじゃん
あってもゴミみたいなのしか

540 :デフォルトの名無しさん :2018/05/12(土) 10:51:42.38 ID:vhGL8v7ea.net
>>537
開発用システムでXLS読むために入れるとか本末転倒

541 :デフォルトの名無しさん :2018/05/12(土) 10:52:47.54 ID:yKmgHprg0.net
>>540
お客さんに何で編集したいですか?
って聞いてみろよ
Excelでできるって言ったら大喜びするぜ

542 :デフォルトの名無しさん :2018/05/12(土) 10:53:32.62 ID:15xgRckc0.net
>>539
専用ツールがないと編集できないものなんてイラネ

543 :デフォルトの名無しさん :2018/05/12(土) 10:53:45.26 ID:iloBjJ0sM.net
>>510
Excelの場合はそもそもツリーデータ構造を表現するためのスタンダードなフォーマットが無いので比較する以前の段階

まずはツリー形式のデータ構造を表現するためのフォーマットのデファクトスタンダードを業界全体で決めてくれ
比較はその後に回していいんじゃないかな

544 :デフォルトの名無しさん :2018/05/12(土) 10:54:09.51 ID:15xgRckc0.net
>>541
Linux使ったことないやろ

545 :デフォルトの名無しさん :2018/05/12(土) 10:55:07.24 ID:NuxM0Gnx0.net
vscodeのsettings.jsonとか見せたら発狂しそう

546 :デフォルトの名無しさん :2018/05/12(土) 10:55:50.61 ID:vhGL8v7ea.net
>>541
客は会社のシステム部門なんで別にExcel喜ばれないですむしろ殴られそうです

547 :デフォルトの名無しさん :2018/05/12(土) 11:00:04.65 ID:vhGL8v7ea.net
あとXLSXはともかくXLSをC#から弄ったことないんだけどExcelなしで読めるの?
COM使って読むとか言わないよね?

548 :デフォルトの名無しさん :2018/05/12(土) 11:08:10.26 ID:iloBjJ0sM.net
>>521
やっとちゃんと読んでレスしてる人が来た

確かにもともとXMLをベースに考案されたデータ構造なのでXMLに有利と言えるかもしれない
しかしそれを認めると議論の発端である「jsonはxmlより優れている」という命題を「対象次第ではxmlのほうが有利である」という命題で最初から否定することになってしまう
本当に「jsonはxmlより優れている」なら対象がXHTMLだろうとなんであろうともjsonのスコアが高くなっていなければおかしい

549 :デフォルトの名無しさん :2018/05/12(土) 11:23:55.86 ID:P5sx5scC0.net
なんでもかんでもExcelでやりたいVBAer()さんはVBAスレにおかえりください
事務員さんの常識はプログラマには通用しません

550 :デフォルトの名無しさん :2018/05/12(土) 11:30:46.95 ID:15xgRckc0.net
>>547
ExcelCreator使って、Excelのインストールされてない環境で読み書きしてた
昔々ね

551 :デフォルトの名無しさん :2018/05/12(土) 11:33:52.89 ID:5EDA9IkjM.net
>>467
横から失礼。マイクロソフトの人もそう言ってるよ

552 :デフォルトの名無しさん :2018/05/12(土) 11:34:13.72 ID:FqtFYlf30.net
>>547
OLEDB使えばExcelインストール無しでも読めるで

553 :デフォルトの名無しさん :2018/05/12(土) 11:34:57.85 ID:5EDA9IkjM.net
>>471
一言でいえば古い。

554 :デフォルトの名無しさん :2018/05/12(土) 11:36:20.02 ID:FqtFYlf30.net
この手の議論はUI入力とデータ保持を同一のものとして考えちゃうから平行線だわな

555 :デフォルトの名無しさん :2018/05/12(土) 11:40:59.55 ID:My8LWy2ka.net
>>548
キミが変なこと言ってるだけ

業務での作業性、操作性においてスマホよりPCがすぐれてるという人に対して
PCではタッチ入力できないとかそんな難癖つけてるだけ

556 :デフォルトの名無しさん :2018/05/12(土) 12:09:17.30 ID:iloBjJ0sM.net
>>555
残念だけど君には話が通じないね

557 :デフォルトの名無しさん :2018/05/12(土) 12:44:54.52 ID:ek+Myn8j0.net
>>480
EndsWithに第二引数とかあったのか
いけるわ!ありがとう

558 :デフォルトの名無しさん :2018/05/12(土) 12:51:51.95 ID:XqIGE8bt0.net
デザインパターンのブログ(ヤフーブログ)・・・・なかなか良い。

https://blogs.yahoo.co.jp/kamyu_2010/35442561.html

559 :デフォルトの名無しさん :2018/05/12(土) 13:25:14.58 ID:UZR1Ryt2a.net
>>554
それ以前の話でしょw

設定データをユーザーが編集したいなんてかなり特殊な前提でありかつ質問者も
そんな要件を一言も上げてないのにアホかと、

.NET標準のシリアライザではなくあえて外様を使う理由はと聞いて、返って来た明確な答えは
結局「そっちの方が目新しいから」だけ。

中学生じみてるよと言ってるそばからこれだ。
プログラマ板みたいな話になっちゃうけど、本当今じゃプログラマって知能指数が低い奴が
やる仕事になってることを実感するよ

560 :デフォルトの名無しさん :2018/05/12(土) 13:26:52.97 ID:My8LWy2ka.net
json,.netを使うのは早くて使いやすいからだと思う
使いやすいと書くとまた難癖つけられそうだけどw

561 :デフォルトの名無しさん :2018/05/12(土) 14:59:39.27 ID:d5Fp40ymM.net
>>560
どういう観点で見たときの使いやすいなのか説明が無いよね?

562 :デフォルトの名無しさん :2018/05/12(土) 15:01:04.84 ID:15xgRckc0.net
>>559
Microsoftの基本的なライブラリもJSON.netに依存してる
https://www.nuget.org/packages/Microsoft.Extensions.DependencyModel/

563 :デフォルトの名無しさん :2018/05/12(土) 15:05:00.44 ID:AEXJFe1f0.net
自分が json を使うとしたら、
・周りが使ってるから
・xml と比較して見た目が好み
って程度の理由だなあ。

どっちが優れてるかの比較なんてそれ自体がズレてるような。

564 :デフォルトの名無しさん :2018/05/12(土) 15:35:45.32 ID:KCIDKf2Q0.net
暇そうだな
同じヒマでも俺は運動してたけど

565 :デフォルトの名無しさん :2018/05/12(土) 15:49:43.76 ID:F4kLnVK3p.net
シリアライズ出来れば何でもいいよ。

566 :デフォルトの名無しさん :2018/05/12(土) 16:47:10.12 ID:ek+Myn8j0.net
結局Windowsのフォームアプリの設定ファイルは何が適してるんだよ
jsonでもxmlでも大差ないよ好きな方どうぞって結論でいいの?

567 :デフォルトの名無しさん :2018/05/12(土) 16:54:33.55 ID:gqffA4Jja.net
>>566
そもそも今時フォームアプリなんか採用する時点で全力で時代に背を向けてるんだからどうでもいいよ

568 :デフォルトの名無しさん :2018/05/12(土) 17:04:25.00 ID:I6pHI0GBa.net
>>566
Setting使え
終わり

569 :デフォルトの名無しさん :2018/05/12(土) 17:37:38.32 ID:AiYRYzWlM.net
Settings使え+1

570 :デフォルトの名無しさん :2018/05/12(土) 17:53:54.95 ID:5EDA9IkjM.net
>>566
configファイルにjson形式で書き込む

571 :デフォルトの名無しさん :2018/05/12(土) 17:58:28.95 ID:UZR1Ryt2a.net
>>568-569
質問者は「ポータブルアプリの設定ファイル」と言ってる。

ポータブルアプリがUSBメモリに入れて持ち歩くような物のことを言ってるなら、
Settingsは明らかに不適切

あと、個人的にあんまりアプリケーション設定使ったことないんで勘違いしてるかもしれんが、
これって結構制限も多いしいろいろ面倒だよね

572 :444 :2018/05/12(土) 21:13:35.08 ID:4i84e4IV0.net
質問者ですが、こんなに荒れてしまうとは、、、申し訳ない。

おっしゃるように通常のWindowsフォームアプリならSettingsがデザイナで設定できるし楽なんですが、
ファイルの格納先がローカル(Roamingだったかな?)になるのでUSBメモリなどに持ち運んで使うポータブルアプリとしては採用できないというところでの質問でした。

特に設定ファイルの可読性を求めないようであれば、
形式としては古いが追加ライブラリ不要のXMLか、
スタンダードな形式だが別途追加ライブラリ必要なJSONか、
好きな方を選べって感じですかね。。

573 :デフォルトの名無しさん :2018/05/12(土) 21:31:41.93 ID:9vavBtpKM.net
ユーザー定義リソースにしてexeに直接書き込むって方法もあるよ

574 :デフォルトの名無しさん :2018/05/12(土) 21:32:18.31 ID:FqtFYlf30.net
>>572
USBで運ぶポータブルアプリ程度ならApplicationSettings保存でもいいんじゃないの?

575 :デフォルトの名無しさん :2018/05/12(土) 21:33:56.53 ID:yKmgHprg0.net
exeの直下でいいよな

576 :デフォルトの名無しさん :2018/05/12(土) 21:48:32.28 ID:euW2BAe4a.net
アプリケーションスコープにするとアプリから書き込みできないよ

577 :デフォルトの名無しさん :2018/05/12(土) 22:03:47.45 ID:fKL1gupm0.net
>>575
でもアクセスの速度違うときあるからね。

578 :デフォルトの名無しさん :2018/05/13(日) 14:47:14.23 ID:ySggkKZM0.net
すいません。
初心者なのでこちらに移動してきました。
MVC的な設計で

初期設定値を入力するフォーム

初期設定値を格納するクラス

というのを作りたいのですが、

A.
クラス側に各変数のプロパティを作成
フォームからプロパティを介してクラスの変数に値を代入

B.
クラス側にフォームの初期値を取りに行くメソッドを作成
クラスからメソッドを実行してフォームに値を取りに行く

のどちらが良いのでしょう?
自分ではAの方がよさそうな気がするのですが、一般的な設計としてこうするというのがあったら教えてください。

579 :デフォルトの名無しさん :2018/05/13(日) 16:02:40.98 ID:GQV4/ETF0.net
ケツの穴から手をつっこんで奥歯をがたがたみたいなBよりA

580 :デフォルトの名無しさん :2018/05/13(日) 16:26:25.12 ID:N5R39axQ0.net
>>578
どっちでも動きゃいいだろ
さっさと完成させろよ

581 :デフォルトの名無しさん :2018/05/13(日) 16:39:15.74 ID:i7PAGBqeM.net
>>578
// form
void btnSaveInitialSettings_Click(object sender, EventArgs e) {
try { this.SaveInitialSettings(); }
catch(...) { ... }
}

void SaveInitialSettings() {
var initialSettings = this.GetInitialSettings();
var reaction =
this.initialSettingsController.SaveInitialSettings(initialSettings);
reaction?.Invoke(this);
}

// controller
Action<IInitialSettingsView> SaveInitialSettings(InitialSettings initialSettings) {
this.initialSettingsService.SaveInitialSettings(initialSettings);
return view => view.Refresh();
}

582 :デフォルトの名無しさん :2018/05/13(日) 18:54:27.05 ID:kDeIpxe/p.net
初心者は出来上がってから検討すりゃいいんだよ。
つうか、プロ目指してるなら、先ずは完成させる癖を付けないとな。
万年アマチュアでいいのなら些末な問題で盛り上がればいいさ。

583 :デフォルトの名無しさん :2018/05/13(日) 20:18:25.58 ID:QhZTiQlx0.net
まず終わらせろ、Facebookのにいちゃんも言ってたべな。

584 :デフォルトの名無しさん :2018/05/13(日) 20:30:10.29 ID:i7PAGBqeM.net
Facebookにいちゃんが誰かわからんがそいつが言うまず終わらせろ、とお前が考えるまず終わらせろは別物だと思うぞ
ユニットテストとリファクタリング込みでまず終わらせろ、って言ってるならマトモだけど、将来のことなにも考えずまず終わらせろって言うならただの害悪

585 :デフォルトの名無しさん :2018/05/13(日) 20:32:15.38 ID:23x2pXKw0.net
>>584
リファクタリングなんか完成した後にバージョンアップする機会があったらやればいいんだよ。

586 :デフォルトの名無しさん :2018/05/13(日) 20:35:20.07 ID:kDeIpxe/p.net
将来が有るかどうかなんて、売れてから考えろw
タイムイズマネーだ。無駄なリソース費やしてる暇が会ったら次の案件片付けろ。

587 :デフォルトの名無しさん :2018/05/13(日) 20:36:03.21 ID:N5R39axQ0.net
>>585
そうだよね
エッチな絵が一枚も表示されないのにリピーターがいることを想定してる
なんてピンボケもいいとこだよね
割とマジで

588 :デフォルトの名無しさん :2018/05/13(日) 20:37:25.10 ID:+qfB7sI70.net
仕様通りの動きだけど汚いコードと
仕様通りの動きじゃないけど綺麗なコード
を同じ時間で仕上げたとして、どっちが優れているかと言えば前者だよな

589 :デフォルトの名無しさん :2018/05/13(日) 20:58:57.32 ID:9JUaags60.net
>>588
そりゃ仕様満たしていないなら比較以前の問題だわな
仕様満たして完成までの期間で比較とかならともかく

590 :デフォルトの名無しさん :2018/05/13(日) 21:04:34.41 ID:kDeIpxe/p.net
まあ、熟練者になれば、素早く仕様通りのコードを綺麗に仕上げて来るからな。
初心者は先ず動くコード、次に仕様通り、最後に綺麗なコードでいいよ。
時間掛かるのはこの際問題にしないw

591 :デフォルトの名無しさん :2018/05/13(日) 21:04:59.21 ID:N5R39axQ0.net
リピーターが多い汚いコードと
リピーターが少ない綺麗なコード

後者はゴミだよね

592 :デフォルトの名無しさん :2018/05/13(日) 21:14:50.20 ID:i7PAGBqeM.net
世の中の多くのバカが勘違いしてるんだけど

綺麗なコード==間違えやすい製造に時間がかかるコード

じゃないんだよね
綺麗なコードはバグが少ないし製造も早い

汚くても動くコードを早く書け!なんて言ってるやつは根本的に何かがズレてる
そんな方針でコーディングしたら汚くて動かないコードを時間をかけて作る羽目になる

593 :デフォルトの名無しさん :2018/05/13(日) 21:19:44.86 ID:kDeIpxe/p.net
洗練された華麗なコードとインデント揃っただけの綺麗なコードを混同してるばか発見

594 :デフォルトの名無しさん :2018/05/13(日) 21:22:07.78 ID:asXlnx2Ka.net
>>578
UI(Form)がモデル(何か仕事をするクラス)の参照を持つのは問題ないが、
逆は良くない。理由は、

(1) 役割分担があいまいになる
厨房の人間が1分おきにウェイターに注文を確認するのは適切な役割分担と言えるか?

(2) つぶしがきかない
Formの参照を握ってFormのメンバーを操作するクラスは、UIをWPFやUWPに
変更しても使いまわしできるか?

595 :デフォルトの名無しさん :2018/05/13(日) 21:59:31.92 ID:ySggkKZM0.net
>>581
一読で理解できる知識がないのですが、勉強してみます。
ありがとうございます。

596 :デフォルトの名無しさん :2018/05/13(日) 22:02:31.19 ID:ySggkKZM0.net
>>594

UIがデータ格納用クラスのインスタンスを生成
UIがプロパティを介してデータ格納用クラスの変数に代入
UIがコントローラにデータ格納用クラスのインスタンスを渡す

みたいな感じでよろしいでしょうか?

597 :デフォルトの名無しさん :2018/05/13(日) 22:27:53.20 ID:asXlnx2Ka.net
>>596
>UIがデータ格納用クラスのインスタンスを生成
誰がモデルのインスタンスを生成するかはケースバイケースだしどうでもよろしい

>UIがプロパティを介してデータ格納用クラスの変数に代入
重箱の隅をつつくようだが、オブジェクトのプロパティやメソッドを操作する時に
「データ格納用クラスの変数に代入 」なんていう内部の実装を意識する必要はない。
必要はない、というか意識しなくても使えるように作るのがカプセル化。

>UIがコントローラにデータ格納用クラスのインスタンスを渡す
俺がMVCを理解してないだけの可能性もあるが、少なくともWindows Formでは
VとCを分けたりしないのが普通と思う。コントローラなんてイラネ

598 :デフォルトの名無しさん :2018/05/13(日) 23:13:35.13 ID:TUC5Idjma.net
話蒸し返して悪いんだが、xmlシリアライザーって今使ってるとやばいの?業務アプリの設定ファイルほぼこれで今までやってたんだが。。
とりあえず今やってる案件JSONで見直してみるか
一人で開発やってるとついついこういうのに遅れがちになるなぁ

599 :デフォルトの名無しさん :2018/05/13(日) 23:15:02.41 ID:F2hiJGIV0.net
>>598
どんな用途で?

600 :デフォルトの名無しさん :2018/05/13(日) 23:22:29.79 ID:KKJavIw30.net
csvとJSONなら圧倒的に後者のがメリットあるけど、
xmlとJSONなら規模がでかくない限りどっちでも良いや

601 :デフォルトの名無しさん :2018/05/13(日) 23:33:10.62 ID:R40HLbPBa.net
>>598
業務ドカタ系でJSONなんかほとんど無いから安心しろ
客サイドは情シスですらJSON何それとか平気で言いやがるしOSSのライブラリが必要なのもネック

602 :デフォルトの名無しさん :2018/05/13(日) 23:37:31.23 ID:OUJCfbgi0.net
>>600
Excelで編集できるできないって違いもあるのに
どこが「圧倒的」なの?
根拠もない主張を強く推すなよ
願望だろ?お前の

603 :デフォルトの名無しさん :2018/05/13(日) 23:38:24.99 ID:PSHb3apy0.net
PCのiTunesって曲の情報管理全部XMLだよな
どうにかならんのか
https://i.imgur.com/zaooQAM.jpg

604 :デフォルトの名無しさん :2018/05/13(日) 23:40:15.36 ID:u4TQvgwd0.net
Ant, Maven とか、Java系は、XML。
Android 画面の設定ファイルとか

Windows でも、XAML で画面設定する

プロジェクトの設定ファイルも

JSON を設定ファイルに使うのは、JavaScript を使ったもの。
例えば、Node.js を含んだ、VS Code

他には、プログラミング言語自体が設定ファイルになるもの。
Ruby, Groovy, Haxe

605 :デフォルトの名無しさん :2018/05/13(日) 23:48:46.83 ID:i7PAGBqeM.net
>>598
え?全然やばくないよ
むしろ安定した手堅い選択肢と言っていい
JSONを設定に使う製品はむしろ少数派

606 :デフォルトの名無しさん :2018/05/13(日) 23:57:11.22 ID:F2hiJGIV0.net
>>604
>JSON を設定ファイルに使うのは、JavaScript を使ったもの
最近のC#もそうですが

607 :デフォルトの名無しさん :2018/05/13(日) 23:57:32.58 ID:OUJCfbgi0.net
>>598
ヤバイってどういう状況?
殺されるの?

608 :デフォルトの名無しさん :2018/05/14(月) 00:04:35.25 ID:3eK20qHjM.net
>>606
project構成は不評で結局xmlに戻ったね
ASP.NETのappsettingsはボイラープレートがjsonになってるけどxmlやiniもサポートされてる

609 :デフォルトの名無しさん :2018/05/14(月) 00:05:32.49 ID:wCRTCiuQ0.net
素のJSONはコメントが使えないので設定ファイルには使い辛い。

610 :デフォルトの名無しさん :2018/05/14(月) 00:17:32.79 ID:gDWY5JTja.net
川俣さんのことを馬鹿にする人が2chには多いけど、この記事の趣旨は正しいと思う
http://www.atmarkit.co.jp/fdotnet/extremecs/extremecs_18/extremecs_18_02.html

特定の技術への信仰と「俺スゲー」っていう間抜けな自己陶酔が結びついてる奴ってよくいるし、
このスレにも時々そんなのが出るけど、そういう奴のいうことは真に受けない方がいいですw

611 :デフォルトの名無しさん :2018/05/14(月) 00:18:47.47 ID:Wjyh58JD0.net
>>608
まあ普通はjson使うがな

612 :デフォルトの名無しさん :2018/05/14(月) 07:03:43.68 ID:oC/RgBRx0.net
つか業務で使うなら余程のことがない限り枯れた技術の方が安定する

613 :デフォルトの名無しさん :2018/05/14(月) 07:06:02.02 ID:Wjyh58JD0.net
>>612
COBOLとか?

614 :デフォルトの名無しさん :2018/05/14(月) 07:55:56.39 ID:zbYXMED5M.net
COBOLは実際優れてるんだよなあ
低品質なPGでもほぼ完璧に見積工数通りに仕上がるし、バグもほとんど出ない
金持ちな客からきっちり工数見合いで金取れるならSIerにとってこれほど好都合な言語はない

615 :デフォルトの名無しさん :2018/05/14(月) 08:01:56.16 ID:wRU00x5/r.net
バグでないのはアカンやろw

616 :デフォルトの名無しさん :2018/05/14(月) 08:12:24.86 ID:I+nT90nna.net
それはバグが摘出できていないだけでは

617 :デフォルトの名無しさん :2018/05/14(月) 08:30:53.44 ID:6WkSgDmyr.net
工数が低減できるかどうかよりも見積が精確にできることの方が管理者にとっては重要ってわけだね

618 :デフォルトの名無しさん :2018/05/14(月) 09:03:36.07 ID:coszmN5L0.net
バグが出ないに総ツッコミでワロタ

619 :デフォルトの名無しさん :2018/05/14(月) 09:45:10.45 ID:tQHKR4rj0.net
大体この時間にABENDしますって
異常停止をルーチンワーク化して運用している所があったな

620 :デフォルトの名無しさん :2018/05/14(月) 10:05:11.99 ID:TQ68xzma0.net
現場運用だと稀によくある
開発側がそれを織り込んじゃダメだけど

621 :デフォルトの名無しさん :2018/05/14(月) 19:19:28.87 ID:M+KhV3wka.net
>>598だけど
蒸し返した話にレスくれてありがとう
自分の用途にはxmlでも問題なさそうでとりあえず安心した

622 :デフォルトの名無しさん :2018/05/14(月) 20:12:46.13 ID:CBd8Qc4H0.net
SVGやMathMLのような外部の名前区間が出てくるとか、Xamlのようにかっちりしたものを書きたい場合はXMLが有利
文字列や数値しか出てこないような簡単な構造ならJSONの方が便利なことも多い。
Trueなのかtrueなのかとか考えなくても良くて、エディタがサポートしてくれるし、エスケープの仕様とかがシンプルで、ファイルも小さい。逆に言うとその程度なのでわざわざ切り替えるほどでもないとは思う

623 :デフォルトの名無しさん :2018/05/14(月) 20:37:51.15 ID:5czuzhWO0.net
>>597
VCわけないんですか。
うーん・・・。
いろいろな設計方法があるということですね。

インスタンスの生成順として
A→B
A→C
とAからCにBのインスタンスを渡す方法は分かるのですが、

C→A
A→B
とインスタンスを生成した時、CにBのインスタンスを返すことって可能なのでしょうか?

624 :デフォルトの名無しさん :2018/05/14(月) 20:54:23.97 ID:g5WxNsfna.net
デリゲート

625 :デフォルトの名無しさん :2018/05/14(月) 20:59:59.56 ID:IVWzojCa0.net
【マンモグラフィー】おっぱい挟んで癌検査…必要?
http://egg.5ch.net/test/read.cgi/bio/1517115639/l50
【ペットフード】告発したら3人組に棍棒で襲われた
http://egg.5ch.net/test/read.cgi/hosp/1517110484/l50
【アマルガム】水銀を歯に? 厚労省『暴動が怖い』
http://mao.5ch.net/test/read.cgi/doctor/1517058870/l50

626 :デフォルトの名無しさん :2018/05/14(月) 21:00:16.16 ID:qPzo5Sk00.net
>>623
「返す」ことにこだわりがあるのなら結構難しい
そこにこだわらず、単にCからbを扱えれば良いのならa.bでアクセス可能だろう

627 :デフォルトの名無しさん :2018/05/14(月) 21:35:43.16 ID:1pddwh+ma.net
>>623
何でわざわざ話を複雑にするの?
class C
{
  A a;
  B b;

  public C()
  {
    a = new A(this);
    b = new B(a);
  }
}

例えばこれじゃダメなの?

628 :デフォルトの名無しさん :2018/05/14(月) 21:38:33.33 ID:Ju2ea7rBa.net
DIコンテナとか諸々のイディオムを知らない初心者だからまぁしゃあない
MVCでもMVVMでもいいからチュートリアル的なものをひとつやっとくとだいぶ違うとは思う

629 :デフォルトの名無しさん :2018/05/14(月) 21:40:59.32 ID:orCVIDzn0.net
>>626
まず「返す」の意味が分からないんだよな
>>623
何のためにその実装が必要なのか、まずはそっちから
普通は複数の派生インスタンス扱いたいのならどこかでまとめて管理する方が楽
横に伸ばしていくんじゃなく中心から引っ張っていく形

630 :デフォルトの名無しさん :2018/05/14(月) 23:18:38.41 ID:coszmN5L0.net
馬鹿なこと考えないでジャンケンゲームでも作ってろって

631 :デフォルトの名無しさん :2018/05/14(月) 23:19:52.93 ID:6thsxJoDM.net
>>623
今時のマルチレイヤな設計ってのは、「汚い場所」をどこかに決めて、そこが依存関係の解決を一手に引き受けるようにするんだよ
で、他の部分は「汚い場所」に直接依存しないようにするの
>>627の例でいうと、Cを「汚い場所」とするならAがCを直接参照するのは良くなくて、
AからCのメソッドをコールバックしたいんだったらインターフェイスを介して呼ぶようにしたりする
汚い場所をどこにするかだけど、フォームアプリならフォームだったり、Webアプリならコントローラだったり
処理の起点となり、かつ、どのみち単体テストが困難な場所を選ぶのが一般的だ

632 :デフォルトの名無しさん :2018/05/14(月) 23:24:11.06 ID:LQsoSslkM.net
なんだか要領を得ないからわからないけど
Bを操作するメソッドをAに用意してCがA経由でBを操作するのはだめなのか?

633 :デフォルトの名無しさん :2018/05/14(月) 23:36:29.55 ID:0rMMZwm+0.net
MVC をわかってないような奴に、何も教えられない

まず、無料のRails チュートリアルで、MVC webアプリの設計から学べ

634 :デフォルトの名無しさん :2018/05/15(火) 00:01:41.20 ID:NfuIoln0a.net
Railsってモデルがフォームの構造に依存するからなあ
あんなのAccessのフォームなんかと同レベルだよ
変な癖がつくから初心者には適さない

635 :デフォルトの名無しさん :2018/05/15(火) 00:21:50.03 ID:joJAW/ym0.net
>>633
スレチ

636 :デフォルトの名無しさん :2018/05/15(火) 06:26:55.76 ID:bIQIvbQJ0.net
MVVMを理解するには何からはじめたらいいの?

637 :デフォルトの名無しさん :2018/05/15(火) 07:15:54.13 ID:OnclRViVM.net
>>636
何から始めても理解できない
分離するどころかやればやるほど結合が強くなる現実に打ちのめされるだけ

638 :デフォルトの名無しさん :2018/05/15(火) 07:32:22.06 ID:bIQIvbQJ0.net
やってみたけど難し過ぎて手に負えなかったってことだね。

639 :デフォルトの名無しさん :2018/05/15(火) 07:36:31.19 ID:IL2LN/1vM.net
>>636
Vue.jsあたりかな
XAMLはテンプレートやコマンドバインディングが複雑すぎて本質を掴みづらい
WebのMVVM系フレームワークのほうがずっと見通しが良くてMVVMの本質を素直に実装してる

640 :デフォルトの名無しさん :2018/05/15(火) 07:43:57.19 ID:dqMabmxz0.net
まずはUNDOなりマクロを実装するのに何が必要か
考えると、「C」の動きが見えて来るかと思うけどね

GOFの最初の章にも説明はあるよ

641 :デフォルトの名無しさん :2018/05/15(火) 07:48:40.53 ID:WESx87C+0.net
>>627
アクセシビリティに一貫性がありませんってエラーが…
internalでインスタンス生成するとOKなんですが、フォームクラスはpublicで宣言してるんですけど。

642 :デフォルトの名無しさん :2018/05/15(火) 07:52:16.57 ID:WESx87C+0.net
>>629
ご指摘を受けてメインのフォーム上でインスタンス管理しようとしているのですが、
アクセシビリティの一貫性というエラーが出てきています。

public partial class ExaminationForm : Form
{
public InitialSettingForm initialSettingForm;
public InitialValues initialValues;

で最後の行にアクセシビリティ一貫性のエラーが・・・。
3行目のpublicをinternalにするとエラー消えるのですがなんでだろう。

643 :デフォルトの名無しさん :2018/05/15(火) 07:56:03.82 ID:jP3S3vDhM.net
そのビューの入出力項目と隠し項目とユースケースを抽出するだけだよ

ログイン画面だったら
入出力項目として
・ユーザーid
・パスワード
隠し項目は無し
ユースケースは
・ログインする

なので
class LoginViewModel {
public string UserId { get; set; }
public string Password { get; set; }
public void Login() {
// login impl
}
}
こうなる

あとはViewがVMを監視するために変更通知イベントなどを実装しましょう
それだけ

644 :デフォルトの名無しさん :2018/05/15(火) 07:59:07.77 ID:5QugQ9oMM.net
>>636へのレスな↑

645 :デフォルトの名無しさん :2018/05/15(火) 07:59:13.31 ID:4jNLOtgZa.net
>>642
InitialValuesクラスがinternalなんだろ
publicに変えれば意図通りになる
言っちゃ悪いけど正しい設計とか気にするレベルじゃないと思うよ
まずは汚くてもいいから一本何か形にできるようになってから考えればいい

646 :デフォルトの名無しさん :2018/05/15(火) 08:38:53.30 ID:WESx87C+0.net
>>645
ああああああああ!
そこなのかあああ!

classってデフォルトでinternalになるんですね。
というかinternalって省略されるから気づきませんでした。
ここで半日費やしてたのでものすごく助かりました。
ありがとうございます。m(__)m

647 :デフォルトの名無しさん :2018/05/15(火) 08:42:40.68 ID:WESx87C+0.net
>>645
一本ゲーム作ったんですが、form1(初期値)、form2(ゲーム)にほとんどぶっこんだオブジェクト指向ほぼ無視プログラムになってしまったので、
ゲーム内のデータ管理とform2だけでも分離しようとして悪戦苦闘しています。

はるか昔にBasicやったぐらいなので、インスタンスの参照渡しとかその辺がうまく実装できなくて・・・。
勉強用に買った本にもインスタンスの参照渡しなんて全く書いてないし・・・。(´・ω・`)

648 :デフォルトの名無しさん :2018/05/15(火) 08:47:43.78 ID:WESx87C+0.net
あれでも

//インスタンス生成
InitialValues initialValues = new InitialValues(); 
//インスタンスの参照渡し
initialSettingForm.InitialValuesPointer = initialValues;

としているのに

フィールド”InitialValues"は割り当てらせません。常に規定値nullを返します。

となります。
実際にnull値が入ってるようで、initialSettingFormにインスタンスの参照は渡せていない模様・・・。
newしてるのになんで割り当てられませんと出るのでしょう??

649 :デフォルトの名無しさん :2018/05/15(火) 08:55:56.96 ID:WESx87C+0.net
//インスタンス生成
×InitialValues initialValues = new InitialValues(); 

this.initialValues = new InitialValues(); 
でした。すいません。

650 :デフォルトの名無しさん :2018/05/15(火) 09:03:30.06 ID:WESx87C+0.net
>>648
すいません。ゴチャゴチャしてた変数名整理したらエラー消えました。。。
お騒がせしてもうしわけありません。

651 :デフォルトの名無しさん :2018/05/15(火) 09:34:05.49 ID:IdD83PdN0.net
>>647
C++ 以外のすべての言語で、インスタンスの参照渡しだろ

652 :デフォルトの名無しさん :2018/05/15(火) 10:42:46.03 ID:WESx87C+0.net
>>651
初代MSX-Basicでゲーム作ってた頃以来のプログラミングなので(;^_^A

653 :デフォルトの名無しさん :2018/05/15(火) 10:47:12.03 ID:WESx87C+0.net
アホな質問ですが、
Class InitialValue
に初期値を全部詰め込み、必要であればコントローラから参照しているのですが、
インスタンスの参照をinitialValueとすると
initialValue.StartPointX+hoge
などインスタンスの参照がくどくて読みづらい。
いっそiVとかしたいのですが、自分にしかわからない省略は良くないと聞いたもので・・・。

initialValue.StartPointX
initValue.StartPointX
iV.StartPointX

どれが読みやすいコードでしょうか?

654 :デフォルトの名無しさん :2018/05/15(火) 12:29:44.99 ID:2i/hB9LUM.net
>>653
どれもダメ
initialValueをそのまま使わずに設定値を使うクラスにコピーして

655 :デフォルトの名無しさん :2018/05/15(火) 13:05:19.58 ID:WESx87C+0.net
>>654
えええ!

データはデータクラスで一元管理じゃないんですか?
そうしないとフォームなどからデータクラスを変更した時に、
コントロールクラス側でその通知を受け取って
もう一度データクラスからコントロールクラスにコピーする仕組みが必要になってきますよね。

656 :デフォルトの名無しさん :2018/05/15(火) 14:10:34.54 ID:l7Fk1Hkl0.net
自分がアホだと分かってる割には自分の判断を信じてるのな
アホ草

657 :デフォルトの名無しさん :2018/05/15(火) 14:32:03.09 ID:bP9crr2Q0.net
勉強のためにプロが書いた大きなプログラムを見たんだが
変数が全部4桁英数字でランダムに発生させてるような文字列だった
僕ら初心者には「これ何の変数だっけ?」と分かりにくいだけなんだけど
大きなプログラムだと万が一、変数がダブったりするのを避けるためにそうするんですかね?
変数一覧表かなにか作るんですか?

658 :デフォルトの名無しさん :2018/05/15(火) 14:38:53.82 ID:WESx87C+0.net
>>656
いや、最初はコピーする仕様だったんですが、
データクラスで一元管理をするアドバイスを受けて変えたところです。

コピーするんなら元の仕様のままでよかったのかということに。

659 :デフォルトの名無しさん :2018/05/15(火) 14:54:54.48 ID:oubZzl5I0.net
>>657
変な変数名は難読化されてるだけ

660 :デフォルトの名無しさん :2018/05/15(火) 15:26:01.82 ID:UPWhPqGh0.net
>>657
当然だよ。変数使うには課長級の決済が必要。変数管理台帳ファイルに全部記録されている。

661 :デフォルトの名無しさん :2018/05/15(火) 17:20:29.21 ID:nA4SMkbe0.net
>>659
そうか、公開用にリファクターしたのかな
いちいち一覧表見ないと何処につながってるか見えないなんて不便だもんね

662 :デフォルトの名無しさん :2018/05/15(火) 18:44:33.69 ID:Fj6Vms3Xa.net
>>658
変数名が妥当かどうか聞いてるんじゃなかったの?w

そのInitialValueとやらのクラスを使う実装方法が妥当かどうかは実現すべき仕様を誰も知らないので
誰にも分からないと思うよw

ローカル変数の命名に関しては、型名InitialValueをそのまま変数名にしても
何をやってるのか理解できるような文脈なら変数名をivにしても同じことでしょう。
だったら短い方がいい。

ただしローカル変数でも説明的な名前の方が適切な場合もあるので馬鹿の一つ覚えはダメ。
情況に応じて柔軟に

663 :デフォルトの名無しさん :2018/05/15(火) 19:35:30.36 ID:9ix52upSr.net
>>660
初心者が真に受けるからやめれ

664 :デフォルトの名無しさん :2018/05/16(水) 10:08:34.12 ID:5p+fPd0U0.net
int[] intData = new int[10];
int intThread = -3; // 閾値
int intCount = 0;
for (int i = 0; i < intData.Length; i++)
{
if (intThread >= 0)
{
if (intData[i] > intThread)
{
// 処理
intCount++;
}
}
else if (intThread < 0)
{
if (intData[i] < intThread)
{
// 処理
intCount++;
}
}
}

閾値がプラスとマイナスで条件式を変えたいんだけど、
中の処理が一回で済む書き方ってあります?

665 :デフォルトの名無しさん :2018/05/16(水) 10:48:11.15 ID:6eYS9/+hd.net
=を含まない条件式。
そして閾値というキーワード。

まとめない方がいいよ。

666 :デフォルトの名無しさん :2018/05/16(水) 11:18:13.11 ID:XvxRw+U50.net
>>664
せめてCountメソッドにしとけと思うぐらい。

667 :デフォルトの名無しさん :2018/05/16(水) 11:47:06.88 ID:B7aMvtuba.net
>>664
単に同じ処理を2回書く無駄をなくしたいだけなら&&と||を使って
条件式をまとめるだけ

if((threshold >= 0 && x > threshold) || (threshold < 0 && x < threshold))
{
  ....
}

値が不変のはずのthresholdの符号をループで毎回評価する無駄が許せないなら
Func<int, bool> predicate = x => x > threshold;
if (threshold < 0) predicate = x => x < thredhold;
....
if (predicate(x))
{
  ....
}

668 :デフォルトの名無しさん :2018/05/16(水) 12:22:33.98 ID:CHLBL3ILa.net
async/awaitって呼び出しのネストが深くなると、大元の呼び出しで波線が立ってすごくもどかしいんですが、気にしなくていいでしょうか?それとも呼び出しのやり方を見直したほうがいいのでしょうか

669 :デフォルトの名無しさん :2018/05/16(水) 12:29:36.06 ID:+dukoeHCd.net
>>668
ネスト関係なくね?

670 :デフォルトの名無しさん :2018/05/16(水) 13:23:25.14 ID:v6bC0eDAM.net
>>664
カウントをCountメソッドにして引数に突っ込むラムダ式を閾値によって切り替える

671 :662,666 :2018/05/16(水) 14:23:23.94 ID:mC1mbnpn0.net
ごめん。Count以外の処理もあるんだね。おらの回答は無視してくれ。

672 :デフォルトの名無しさん :2018/05/16(水) 14:55:11.81 ID:c5ZU3C2K0.net
dataGridViewのデータソースをBindingListにしています。
この時にデータの絞込を実装する方法はあるのでしょうか。

673 :デフォルトの名無しさん :2018/05/16(水) 19:51:48.39 ID:oU1pyBE30.net
>>668
波線が立つのは単にasyncなメソッドをawai付けずに投げっぱなし呼び出しの警告出ているだけじゃないのか
>>669の言う通りネスト関係ない

674 :デフォルトの名無しさん :2018/05/17(木) 00:16:57.84 ID:OeNqnCBl0.net
すいません。ちょっと教えてください。

//Form1にて
Form2 f = new Form2();
f.show();
this.visible=false;

としてForm2を開いて、Form1を非表示にします。
//Form2にて
Form1 f = new Form1();
f.visible=true;
this.visible=false;

としてForm1に戻った場合、先程form1で入力した内容が消えてしまいます。
form1の内容を消さずにform2からform1に戻る方法を教えてください。

675 :デフォルトの名無しさん :2018/05/17(木) 00:28:09.71 ID:yjgdFlmp0.net
>>674
Form1 f = 「new」 Form1();
新しいForm1を作ったんだから前のはVisible=false;のままで表示されていない
例えばこうする
//Form1にて
Form2 f = new Form2(this);//Form2のコンストラクタの引数にForm1の参照を渡す
f.show();
this.visible=false;
//Form2にて
private Form1 form1;
//コンストラクタ
public Form2(Form1 f)
{
InitializeComponent();
form1=f;
}
//戻る処理
form1.Visible=true;
this.Visible=false;

676 :デフォルトの名無しさん :2018/05/17(木) 00:35:36.78 ID:hTaKG8n8a.net
>>674
目の前の問題を解決するよりまずインスタンスとは何かちゃんと理解した方がいいねw

677 :デフォルトの名無しさん :2018/05/17(木) 00:41:03.31 ID:OeNqnCBl0.net
ありがとうございました。
大変助かりました。

678 :デフォルトの名無しさん :2018/05/17(木) 00:45:08.18 ID:hTaKG8n8a.net
もっと簡単にこれでもできるよw

var f2 = new Form2();
f2.Shown += (s, ev) => Hide();
f2.ShowDialog(this);
Show();

679 :デフォルトの名無しさん:2018/05/19(土) 16:26:49.89 ID:GnA4tN+Fi
アプリ全体の設定について、設定変更画面を作ろうとして、まずは設定そのものを1つのクラスにまとめることを考えた
そんで各設定項目を public get, private set にしようと思ったら
設定画面クラスからは各設定項目プロパティの値を書き換えられなくって困ったんだが
これってどうしたらいいのかな
コンストラクタに引数渡して各設定項目を設定することも考えたけど、
設定項目が20こほどあるからそれはやりたくない

プロジェクト分けて設定画面を別アセンブリにしてpublic get, internal setにしないといけないんかな

680 :デフォルトの名無しさん :2018/05/17(木) 21:40:59.40 ID:Kw1Q24F60.net
class Program
{
TargetOpe targetOpe = new TargetOpe();
static void Main(string[] args)
{
Target [] target= targetOpe.InitializeTarget();
Console.WriteLine(target[1].x);
}
}

Target [] target= targetOpe.InitializeTarget();の行のtargeOpeで
静的でないフィールド、メソッド、またはプロパティ 'Program.targetOpe' で、オブジェクト参照が必要です
のエラーがでます。
newしてるのになんででしょう?

681 :デフォルトの名無しさん :2018/05/17(木) 21:46:08.12 ID:xJtGZ4kt0.net
>>680
静的メソッドだから

682 :デフォルトの名無しさん :2018/05/17(木) 23:37:38.13 ID:03oIkg7y0.net
C#初心者です。
ある変数のその時々の値によって呼ぶメソッドを変えたいため初歩的にifやswitchで分岐させていたのですが、毎回分岐させるのもどうかと思い変数が変わるタイミングでデリゲートに代入して呼び出す方法を試してみました。
しかしながらパフォーマンステストを行ったところ、10程度の条件分岐であればifでメソッド呼び出し >>> デリゲートで呼び出しという結果でした。
速度を重視しつつ動的に呼び出すメソッドを変えるという場合はデリゲートではなく毎回条件分岐を行ったほうが良いということなのでしょうか?

683 :デフォルトの名無しさん :2018/05/17(木) 23:45:29.87 ID:xJtGZ4kt0.net
>>682
どんな用途で?

684 :デフォルトの名無しさん :2018/05/17(木) 23:47:12.44 ID:fnhXcK68M.net
>>682
どうでもいい
そんなミクロなレベルの速度が問題になることはない
IO一つで跡形も無く吹き飛ぶ

685 :デフォルトの名無しさん :2018/05/17(木) 23:49:51.73 ID:8WFSeAEB0.net
くだらねーパフォーマンスとくだらねー暗号化の話題が大好きだよな

686 :デフォルトの名無しさん :2018/05/18(金) 01:57:49.78 ID:3OrmdyFD0.net
パフォーマンスは重要だよ
だけど、そんなのを語る以前に、コンピュータの仕組みについての素養を極端に欠く人が多すぎるんだよ
最近のC#入門書はよく出来ていて、大抵の本が最低限の仕組みが知識が身につくようページを割いて解説してるわけだけど・・・・分かっていない人ほど読み飛ばすんだな
その結果、コンピュータの仕組みからしたらとてもありえないことを言い出す高卒様が出来上がるんだ

687 :デフォルトの名無しさん :2018/05/18(金) 02:22:20.29 ID:tl8rJsN/0.net
>その結果、コンピュータの仕組みからしたらとてもありえないことを言い出す高卒様が出来上がるんだ

ありえないことなんてないだろ。頭硬すぎじゃねーの。「コンピュータはこうあるべきだ」とかに縛られてると新しい発想のソフトが生まれない。

688 :デフォルトの名無しさん :2018/05/18(金) 02:48:57.75 ID:3OrmdyFD0.net
新しいものができたってのならいいけど、言うこと為すこと高卒様じゃあ・・・・

689 :デフォルトの名無しさん :2018/05/18(金) 03:11:25.94 ID:eSpLSQVO0.net
>>682
条件次第なのでなんとも言えない
インライン展開とかCPUのキャッシュとかまで関わってくる可能性がある

気にしなければいけないほどパフォーマンスを気遣うなら、JITの結果を比較したほうがいいけど、多くはそこまでするほどではない

690 :デフォルトの名無しさん :2018/05/18(金) 04:39:51.09 ID:rO+HsCUo0.net
デリゲート使ってる時点で初心者じゃないだろw

691 :デフォルトの名無しさん :2018/05/18(金) 07:16:45.92 ID:tpc+hoQ/0.net
>>690
いや、初心者がググった知識で背伸びしてるんだろ

692 :デフォルトの名無しさん :2018/05/18(金) 07:25:31.73 ID:40IvU0mB0.net
デリゲートとラムダ式ってちゃうの?

693 :デフォルトの名無しさん :2018/05/18(金) 07:56:30.88 ID:mGKF1mXv0.net
>>681
ありがとうございます。
私アホでした。

694 :デフォルトの名無しさん :2018/05/18(金) 08:01:25.12 ID:mGKF1mXv0.net
public class TargetOperation
{
Target[] target = new Target[Constants.MaximumNumberOfTarget];

public Target[] InitializeTarget()
{
for (int i = 0; i < Constants.MaximumNumberOfTarget; i++)
{
target[i] = new Target();
target[i].x = 100;
}
}
return target;
}

695 :デフォルトの名無しさん :2018/05/18(金) 08:05:21.79 ID:mGKF1mXv0.net
最後の行で
クラス、構造体、またはインターフェイス メンバーの宣言でトークン 'return' が無効です。
です。
またアホなことをしてそうな気がしますが、昨夜からわからず・・・。

696 :デフォルトの名無しさん :2018/05/18(金) 08:09:16.96 ID:WjwLG2oV0.net
>>694
}
}
return target;
}
じゃなくて
}
return target;
}
}
じゃね

697 :デフォルトの名無しさん :2018/05/18(金) 08:15:13.01 ID:SuBLVM61M.net
>>682
サンプルコードと結果貼れよ

698 :デフォルトの名無しさん :2018/05/18(金) 08:34:05.30 ID:Yy5wJYpea.net
デリゲート使うくらいならストラテジパターン使うけど

699 :デフォルトの名無しさん :2018/05/18(金) 09:57:58.57 ID:crDPuGzZM.net
>>688
こんにちは猿の学校卒様

700 :デフォルトの名無しさん :2018/05/18(金) 22:42:24.82 ID:6iumh9Vb0.net
DataGridViewのセルのValueを取得すると、既定の型がObject型なんですが、既定の型をstringに変更する方法はありますか?
今はConvert.ToStringで変換してるんですが、記述数が多くなりすぎて参ってます。

701 :デフォルトの名無しさん :2018/05/18(金) 22:48:37.44 ID:/dMxgLqhM.net
As string

702 :デフォルトの名無しさん :2018/05/19(土) 01:23:31.00 ID:5ZvwKnWja.net
C#初心者でフォームアプリを作っているんですが
例えばあるクラスAが非同期で外部機器を延々ポーリングしていて、トリガーが発生したらクラスBの処理を行いたいといった場合
・クラスAにクラスBのインスタンスを渡して、クラスBのメソッドを呼び出す
・クラスAに宣言したデリゲート(evemt?)にクラスBのメソッドをコールバック関数として登録し、クラスAはデリゲートを実行する
どちらが一般的なコーディングなんでしょうか
後者だと複数実行したい処理があるとかなり冗長な気がするんですが、他にセオリーあれば教えて頂きたいです
よろしくお願いします

703 :デフォルトの名無しさん :2018/05/19(土) 01:32:36.76 ID:VIvIbG0Fa.net
女?

704 :デフォルトの名無しさん :2018/05/19(土) 01:53:30.54 ID:ZECHChrda.net
>>702
前者
デリゲートは現段階で呼び出し先が定まってなくて後でアドホックに処理を差し込みたいときに使うも
最初から呼ぶ相手が決まってるならそんなまどろっこしいことをしないで直接メソッドを呼べばよい

705 :デフォルトの名無しさん :2018/05/19(土) 02:13:21.77 ID:FwiHY2dca.net
>>702
騙されちゃダメwww
そういうのはイベントで実装する。

何故か?
前者で作っちゃったら、その外部デバイスをポーリングしてるクラス(普通はそのデバイスの名前を付けると思うけど)、
前者で作っちゃったら他に流用できないよ

706 :デフォルトの名無しさん :2018/05/19(土) 02:22:01.39 ID:6pEEqPiCM.net
>>705
YAGNI
もしそれが必要になったらそのとき変更すればいい
そして、ほとんどの場合において結局必要にならない
職業プログラマじゃないとアプリのコードを目にする機会って少ないから、
.NET Framework自体のクラスのような不特定多数向けの設計を真似してしまいがち
一般に、アプリケーションプログラミングにおいては無駄な拡張性は極力組み込まずに必要最小限のコードでコンパクトに実装するのが正解
そのほうが結果的に変更時のコストも小さくなるよ

707 :デフォルトの名無しさん :2018/05/19(土) 02:27:56.45 ID:FwiHY2dca.net
>>706
YAGNIなんか関係ない
アホか

必要もない仕様変更を想定して寛容に複雑にするのは愚かだが、
抽象度の高い(つまり汎用性も高い)方のクラスにより具体的(つまりそのプログラムでしか利用できない)クラスの
参照を持たせて依存させるなんてもっと愚かだ

708 :デフォルトの名無しさん :2018/05/19(土) 02:32:39.74 ID:6pEEqPiCM.net
>>707
自己矛盾してるね
依存させるのが何故愚かだと思う?
理由は、「必要もない(質問者のレスにない)仕様変更を想定しているから」に他ならないだろ

709 :デフォルトの名無しさん :2018/05/19(土) 02:38:49.87 ID:FwiHY2dca.net
>>708
たぶん言っても無駄な人だと思うけど、普通はViewをModelに依存させるように作るのであって
ModelをViewに依存させない(Modelの参照をViewが持ってはダメ)なのと同じ。

こんな基本が分からない奴が回答する側に回ってはダメだと思うw

710 :デフォルトの名無しさん :2018/05/19(土) 02:40:16.65 ID:FwiHY2dca.net
>>709
いかん酔っぱらって逆を書いちまったw

× (Modelの参照をViewが持ってはダメ)
〇 (Viewの参照をModelが持ってはダメ)

711 :デフォルトの名無しさん :2018/05/19(土) 02:40:41.00 ID:6pEEqPiCM.net
あと、仮に>>705の想定が正しいとするなら、抽象化すべきはクラスBではなくAの方でしょ
例えばAのデバイス依存部分だけをIDeviceインターフェイスとして切り出して委譲するとかね
Aにイベントを持たせるんだと、別のデバイスを監視するクラスCができたら
AのイベントとCのイベントをそれぞれ個別にイベントハンドリングしなきゃいけなくなる
ちゃんと頭使おうね

712 :デフォルトの名無しさん :2018/05/19(土) 02:47:51.94 ID:6pEEqPiCM.net
>>710
揚げ足取るようで悪いけど、Viewの参照をModelが持つこと自体は何の問題もないよ
というか、そうしないとMからVへの変化通知が実現できない
イベントを使うにしても結局参照は持ってるよ
MVPといって、IViewのようなインターフェイスを通してMからVを呼ぶパターンもあるね
なるべく疎にしたいのは型同士の依存関係の話で、参照するのがダメなわけじゃない

713 :デフォルトの名無しさん :2018/05/19(土) 02:58:10.85 ID:FwiHY2dca.net
>>711
そういうのをYAGNIっていうんだよw
本当に何もわかってないねお宅w

714 :デフォルトの名無しさん :2018/05/19(土) 03:03:16.45 ID:FwiHY2dca.net
まあ質問者の>>702に言うけど、実際書いてみれば
イベントで実装した方がずっとコンパクトかつ可読的に書けることが分かると思うよ。

Bが仮にAでしか利用しないクラスだとしても、普通はAはイベントを発行するだけ、
Bはそのイベントを受信して何か処理をする、ってやった方がずっと分かりやすい

715 :デフォルトの名無しさん :2018/05/19(土) 03:21:21.26 ID:ZECHChrda.net
メソッド一つだけならイベントでもいいけど、少なくとも>>702はメソッドが複数あるときもあると言ってるんだからイベントは不適切でしょ
インターフェイスで纏めたほうが扱いやすい
あえてそこにインターフェイスを噛ませる必要があるかどうかはYAGNIの問題だが、それとはまた別の観点の判断だ

716 :デフォルトの名無しさん :2018/05/19(土) 06:03:27.91 ID:uNgfR/HH0.net
プログラムで使用するテキストデータを、excelで管理しています
closecXMLを使ってアクセスしていて、これ自体は無事に実装できました

テストが一通り終わって、テキストデータも確定したので、データの散逸や
改ざんを防ぐために実行ファイルに埋め込みたいのですが、リソースとして
取り扱うことってできないでしょうか

具体的には、

workbook = new XLWorkbook(filename);

として開いているところがあるのですが、このfilenameにリソースファイルの
名前を当てることができないのか調べています

string filename = "Properties.Resources.textdata.xlsx";

としてアクセスできれば簡単だと思っていたのですが、そうはいきませんでした

717 :デフォルトの名無しさん :2018/05/19(土) 06:14:14.58 ID:gOuRua2dM.net
ユーザー定義リソースは何でも書けるよ。

718 :デフォルトの名無しさん :2018/05/19(土) 06:37:08.02 ID:uNgfR/HH0.net
具体的にどういう手順を踏めばよいのでしょう?
excelデータは1,000行以上あるので、取り込みではなく手入力が必要だと
ちょっと切ないです
でももう修正しないもの(修正するとしても部分的)ですから、機械的に
データを移行できるのであればそれでも問題ありません

719 :デフォルトの名無しさん :2018/05/19(土) 07:47:44.04 ID:gOuRua2dM.net
静的に呼びだすなら5つのAPI
FindResource()
LoadResource()
SizeofResource()
LockResource()
FreeResource()
動的に更新するなら更に3つ
BeginUpdateResource()
EndUpdateResource()
UpdateResource()

720 :デフォルトの名無しさん :2018/05/19(土) 07:53:26.18 ID:z3BmCHYgM.net
>>706
こういう奴が頻繁に現れるのを見るとYAGNIの罪は大きいなって思う

721 :デフォルトの名無しさん :2018/05/19(土) 07:55:26.69 ID:7BFPa/Jf0.net
別に複数でもそんな多くなければイベントでも問題ないんじゃねぇかな

722 :デフォルトの名無しさん :2018/05/19(土) 08:03:52.08 ID:uNgfR/HH0.net
>>719
ありがとうございます、それぞれのAPIについて調べてみます

723 :デフォルトの名無しさん :2018/05/19(土) 08:13:32.92 ID:7BFPa/Jf0.net
結局バランスの問題だな。もちろん人によってバランス違うけど。
イベントによって結果再利用性あがるけど、
>イベントで実装した方がずっとコンパクトかつ可読的に書けることが分かると思うよ。
の通り、可読性の観点からしてもイベントの方が分かりやすいと思う。

これぐらいもYAGNIとかいってるようじゃ、極端すぎてバランス感覚おかしいんじゃねぇかな。

724 :デフォルトの名無しさん :2018/05/19(土) 09:36:48.03 ID:ZECHChrda.net
>>723
極端なのは君だと思うぞ
まさかクラス間の依存関係に全部いちいちイベントを噛ましてるってわけではないよね
その上で、この例において特にイベントを使うのが適切だと判断した合理的な根拠は?
少なくとも>>702のレスからはそれを具体的に読み取れないから、根拠のない仮定に基づいた無駄な拡張性だと言ってるんだけど

725 :デフォルトの名無しさん :2018/05/19(土) 10:02:26.30 ID:35k9lSzB0.net
>>696
( ゚д゚)
ありがとうございます。
その通りです。
一晩見直したのに気づかなかった・・・。

726 :デフォルトの名無しさん :2018/05/19(土) 10:47:04.32 ID:zmVeGZ3Ia.net
>>702です
みなさん色々なご意見ありがとうございます
基本的にはイベント等で疎結合にしたクラス作りが望ましいが、ケースバイケースで状況に応じてどちらの実装でも問題はないといったところでしょうか
レスして頂いた内容は非常に参考になり、まさにその両者のいい分で自分もどちらが最適解なのか悩んでいましたが、結局状況を判断出来る私が決めて実装するしかないのかなと思いました
途中インターフェースをかましてすれば良いとのレスがありましたが、どういった実装をすればいいのか全くわかりませんでした。この方法でも検討してみたいので、すみませんが具体的な実装を教えて頂けないでしょうか

727 :デフォルトの名無しさん :2018/05/19(土) 11:44:50.68 ID:mNRmauI8a.net
>>726
interface IAlert {
void Set(Severity severity);
void Unset();
}
たとえば、あるアラートに対してこういうインターフェイスを定義する
クラスAはこれをコンストラクタで受け取り、温度センサーの値が閾値を超えたら危険度に応じた引数でSetメソッドを呼ぶ
温度が低下して閾値を割ったらUnsetを呼んで解除する
このIAlertインターフェイスを、具体的な実装、たとえばパトランプを操作するクラスが実装するわけ
こうしておけば、
パトランプじゃなくて画面でアラート状態を表示したくなったときにAに手を入れずにIAlertを実装するだけで済む
もちろん、パトランプしか想定しなくていいなら直接パトランプクラスのメソッドを呼んでもいいし、Unsetが必要ないならイベントでもいいかもね
ただしイベントの場合はBからAへの密結合が発生するとか、それを避けるなら追加で橋渡しのコードが都度必要になるといった懸念点もある

728 :デフォルトの名無しさん :2018/05/19(土) 11:49:58.15 ID:F9kKaYLV0.net
>>700
拡張メソッドでも定義すれば

729 :デフォルトの名無しさん :2018/05/19(土) 12:01:43.59 ID:hl18fyg5a.net
>>727
早速ありがとうございます
ちょっとまだピンときませんが、じっくり検討してみたいと思います

730 :デフォルトの名無しさん :2018/05/19(土) 12:20:10.98 ID:35k9lSzB0.net
BASICしか経験がないど素人がC#始めたんだけど、
クラス間の参照の受け渡しというのが難しいです・・・。

クラスの参照を配列に入れて、それを受け渡しするとか動くコードはなんとかかけてるんだけど、
自分で一体何をしているのか分からなくなる時がある。

731 :デフォルトの名無しさん :2018/05/19(土) 13:04:35.48 ID:uWI+Vuzc0.net
>>730
真っ先に直さなきゃならないのは、「スコープの広い配列にインスタンスを入れておけば、どこからでも全てのデータにすぐにアクセスできていいじゃん!」と思っちゃう点でさあ
C#のスキルの無さから設計までメチャクチャにしてるんじゃないのかねえ

732 :デフォルトの名無しさん :2018/05/19(土) 13:15:00.73 ID:m/ZPa8pNM.net
BASIC系って悪い習慣を覚えちゃうよね
特にVBAはひどい

733 :デフォルトの名無しさん :2018/05/19(土) 13:27:26.49 ID:m/ZPa8pNM.net
>>727
それだと温度センサーがアラートをコントロールしているように解釈される
常識的に考えてアラートのコントロールは温度センサーの仕事ではないだろう
これは名前の問題であってインターフェースよりイベントを使えと言ってるわけではない

734 :デフォルトの名無しさん :2018/05/19(土) 14:08:44.26 ID:35k9lSzB0.net
>>731
その通りです。
すべての変数をどこからでもアクセスしたい衝動にかられます。

Aのクラスの機能がA1とA2に分化できるから分けようと思うと、
AはCを参照してたからA1とA2両方にCのインスタンス参照を渡そうとなり、
結局機能は分けれたものの、どのクラスがどのクラスを参照してるのかがよくわからなくなってきました。

735 :デフォルトの名無しさん :2018/05/19(土) 14:11:58.71 ID:35k9lSzB0.net
値1、2個を渡すのは簡単なんですけど、
クラスのインスタンスを100個つくるためにその参照を配列にいれる
参照の入った配列をreturnで返す
とかしてるとなんの値をいじってるのかわけわかめです。

これまで値と参照の区別をして思考してこなかったからなのかなぁ。

736 :デフォルトの名無しさん :2018/05/19(土) 14:31:05.11 ID:m/ZPa8pNM.net
>>735
オブジェクト指向で参照を共有することは少ない
共有するとしてもイミュータブル、ステートレスにして共有によるデメリットを消した上で共有する

長時間生存するインスタンスがあちこち参照しあって状態を刻々と変化させていくような設計が最悪のパターン

737 :デフォルトの名無しさん :2018/05/19(土) 15:29:17.89 ID:7BFPa/Jf0.net
>>724
それは君が経験値不足なだけ。>>702である程度は想像できる。

738 :デフォルトの名無しさん :2018/05/19(土) 16:13:13.77 ID:t/qQFhE80.net
休みだってのに暇な奴ら

739 :デフォルトの名無しさん :2018/05/19(土) 16:13:20.90 ID:35k9lSzB0.net
>>736
なるほどCを参照しているA1、A2はCと独立したオブジェクトじゃなくなってしまいますものね。

740 :デフォルトの名無しさん :2018/05/19(土) 16:20:14.69 ID:35k9lSzB0.net
Target[] target = new Target[Constants.MaximumNumberOfTarget];

public Target[] InitializeTarget()
{
for (int i = 0; i < Constants.MaximumNumberOfTarget; i++)
{
target[i] = new Target();
target[i].x = 100;
target[i].y = 100;
  }
}

こういうふうにForm1のクラスでターゲットの座標100個発生させて表示させます。

741 :デフォルトの名無しさん :2018/05/19(土) 16:23:28.77 ID:35k9lSzB0.net
ターゲットをクリック出来たら消す
一定時間クリックできなかったら点滅させる
ゲーム終了後にターゲットの座標をテキストファイルに書き出す

などの処理がすべてForm1上に存在することになるのですが、
それでもいいのでしょうか?
これらの作業を無理にクラスに分けようとすると
ターゲットクラスインスタンスの参照100個を渡さなくてはいけなくなります。

742 :デフォルトの名無しさん :2018/05/19(土) 16:41:59.05 ID:H4w+h7ji0.net
そんなミニゲームどう組んだっていいよ

743 :デフォルトの名無しさん :2018/05/19(土) 16:44:12.66 ID:5aQMcYYW0.net
>>741
何が駄目なのかわからない
何か縛りプレイしているのならその前提から出してもらわないと
たとえば特定のデザインパターンの勉強が目的だとか

744 :デフォルトの名無しさん :2018/05/19(土) 16:55:29.90 ID:uWI+Vuzc0.net
どうせこの人は一生治んないよ
ただプログラムなんてちゃんと動けば目的達成できるんだし、まあ、これでも良いんじゃないの

745 :デフォルトの名無しさん :2018/05/19(土) 16:56:47.37 ID:F+BrwfqWa.net
listやdictionaryを使ってないのかな

だったらまだそのアプリを作る段階まで届いてない

746 :デフォルトの名無しさん :2018/05/19(土) 17:10:27.25 ID:UwdEx54W0.net
まあ普通はエンジン部分だけ切り離すわな

747 :デフォルトの名無しさん :2018/05/19(土) 17:20:42.40 ID:35k9lSzB0.net
target class
にx,y,timeなどメンバ変数7個程度を入れてます。
このターゲットを表示するためForm1上にクラスのインスタンスを参照する配列を置くと、
表示とゲームのコントロールすべてがForm1上におくことになって見苦しいのかと思いました。

でもテトリスとか他のミニゲームみても同じような設計になってるんですね。
無理して別クラスにするよりもtargetクラスの配列に関連した、表示、ゲーム処理はForm1上に置いてみます。
(というか実際に配列を別クラスに切り分けたら、余計読みづらくなった・・・)

748 :デフォルトの名無しさん :2018/05/19(土) 17:22:57.84 ID:35k9lSzB0.net
>>743
縛りはなかったのですが、見やすいコードということを考えすぎてました。
まずは動くコード書いて、人の書いたプログラムも見ながら勉強していきます。

749 :デフォルトの名無しさん :2018/05/19(土) 17:23:58.19 ID:35k9lSzB0.net
>>745
最初Dictionay使うつもりだったのですが、
構造体かクラスに変数をまとめたほうがよさそうだったので今の形になりました。

750 :デフォルトの名無しさん :2018/05/19(土) 17:27:35.68 ID:9OoA3M8l0.net
>>741
何故そのような結論になるかわからない提示された仕様からだとテキスト出力クラスを作ろうって気になるかな
targetの渡し方はコンストラクタやメソッド引数にするかは自由

Hoge hoge = new Hoge();
bool Output(){
hoge.Set(target);
return hoge.Output();
}

751 :デフォルトの名無しさん :2018/05/19(土) 17:28:05.32 ID:m/ZPa8pNM.net
>>747
複数のTargetを管理する専用のクラスを書くんだよ
Formが全てのTargetを管理するのはオーバーワークだろ

752 :デフォルトの名無しさん :2018/05/19(土) 17:30:56.31 ID:TbcarOIZ0.net
>>734
貴様にはpublicを禁止する呪いを掛ける

753 :デフォルトの名無しさん :2018/05/19(土) 17:45:50.05 ID:m/ZPa8pNM.net
それは呪いではなく祝福であった

754 :デフォルトの名無しさん :2018/05/19(土) 17:52:30.85 ID:F+BrwfqWa.net
そしてinternalを使い始めた!

ゴミグラマの出来上がり

755 :デフォルトの名無しさん :2018/05/19(土) 18:14:06.88 ID:RoboUWmL0.net
と、すでに出来あがったゴミグラマが申しておるようですが

756 :デフォルトの名無しさん :2018/05/19(土) 18:20:19.09 ID:35k9lSzB0.net
>>751
はい。
それやってみたのですが、フォーム2から初期設定値を初期値格納クラスに入れていて、
初期値格納クラスの参照、Targetクラスの参照、Targetクラス管理クラスの参照が入り乱れて書いている自分でもわけわかめになりました。
二つのプログラムを見比べた結果Form1でTarget管理させたほうがまだましなのかと・・・。

もっと規模の大きなプログラムだと違ってくるのかもしれないのですが。

757 :デフォルトの名無しさん :2018/05/19(土) 18:39:40.28 ID:H4w+h7ji0.net
>>756
小さいの組み合わせてでかいの作るんだから
でかいと組み方が変わるなんて言ってるやつは
そもそも下手クソなんだよ

758 :デフォルトの名無しさん :2018/05/19(土) 18:44:17.10 ID:m/ZPa8pNM.net
>>756
入り乱れないよ

759 :デフォルトの名無しさん :2018/05/19(土) 18:44:51.84 ID:t/qQFhE80.net
素人が責務に応じたクラスの分割を理解するなんて
一朝一夕どころか数ヶ月単位の時間が掛かると思うが、このやり取りそこまで続けるの?

760 :デフォルトの名無しさん :2018/05/19(土) 18:46:55.05 ID:RoboUWmL0.net
>>759
素人でも初心者でもわかる奴は最初からわかってるけど?
むしろ数ヶ月も時間をかけてわかって気になってるおまえが何もわかってないよ

761 :デフォルトの名無しさん :2018/05/19(土) 18:48:37.83 ID:m/ZPa8pNM.net
>>759
理解しやすい構造になるわけだから素人も安心

762 :デフォルトの名無しさん :2018/05/19(土) 18:49:08.43 ID:t/qQFhE80.net
>>760
猿には聞いてねえから飼育員さんとママゴトしてな

763 :デフォルトの名無しさん :2018/05/19(土) 18:51:06.08 ID:t/qQFhE80.net
>>761
んでいつまで続けるの?
ウザくなってきたからスレ潰しするのもいいかなと思ってる

764 :デフォルトの名無しさん :2018/05/19(土) 18:54:14.32 ID:RoboUWmL0.net
バカ、スレ潰し宣言wwwww
これはさすがの俺も意表をつかれた度と超えたバカwwwww

765 :デフォルトの名無しさん :2018/05/19(土) 20:59:50.70 ID:gCADl0W/M.net
C#のスレだと思ったのに。

766 :デフォルトの名無しさん :2018/05/19(土) 21:13:55.60 ID:35k9lSzB0.net
リストボックスの値を取得するのって

string Gender = this.Gender.SelectedItem.ToString();

の一文だけじゃだめなの?
なぜか値が取得できない。

767 :デフォルトの名無しさん :2018/05/19(土) 21:17:27.89 ID:BEl4Etk9a.net
あたまがくらくらする

768 :デフォルトの名無しさん :2018/05/19(土) 21:28:02.54 ID:sYzD4mGA0.net
>>766
まず「Gender」が2つ出てくることに違和感はないのか
ListBoxは使ったことないけど
https://msdn.microsoft.com/ja-jp/library/system.windows.forms.listbox.selecteditem(v=vs.110).aspx
string GenderStr = this.Gender.SelectedItem.ToString();
にでも変えれば動かないか?

769 :デフォルトの名無しさん :2018/05/19(土) 21:30:21.29 ID:35k9lSzB0.net
>>766
すいません。
自己解決しました。
大分疲れてきたようです。
寝ます・・・。

770 :デフォルトの名無しさん :2018/05/19(土) 21:32:29.68 ID:35k9lSzB0.net
>>768
すいません。
ご親切にありがとうございます。

値を出力するクラスにwriteline書き忘れてました・・・。
値の取得は上のコードでOKでした。

朝から一日プログラミングして悪い頭が限界を超えているようです。
今日はもう寝ます。

771 :デフォルトの名無しさん :2018/05/19(土) 21:34:12.28 ID:RoboUWmL0.net
教えたがりのバカ>>768の立場wwww

772 :デフォルトの名無しさん :2018/05/20(日) 16:52:01.54 ID:O/HF5kqh0.net
>>719
いろいろ調べてみましたが、私が探している解決策とは異なったようです
一番知りたいのは、埋め込みリソースに対し、通常のファイルアクセスのように
アクセスする方法はないのか、という点です
(XLWorkbookのコンストラクタには、ファイルパスを与えますので)
今回のデータは参照のみ必要ですので、リソースとして埋め込んだ場合に
変更が効かなくなっても問題ないと考えました

712で書かれた内容は、「自分でファイルフォーマットを定義して、それを読んで
切り貼りするコードを自分で書くべし」、ということでしょうか
そのために有用なのが714のAPIということですか

773 :デフォルトの名無しさん :2018/05/20(日) 18:41:56.82 ID:9fk8EC6VM.net
ないよ
一回テンポラリファイルに出力すればいい
使いたいライブラリがストリームを受け取るバージョンをサポートしてるならそっちを使ってテンポラリファイルは要らない

774 :デフォルトの名無しさん :2018/05/20(日) 19:32:08.73 ID:QOdmSKaj0.net
やったことないけど
これは動かないの?

https://support.microsoft.com/ja-jp/help/319292/how-to-embed-and-access-resources-by-using-visual-c

775 :デフォルトの名無しさん :2018/05/20(日) 19:59:07.95 ID:O/HF5kqh0.net
>>773
ありがとうございます
少し調べてみた限りですと、closedXMLはストリームからの読み込みはサポートして
いないようなので(当然の気もしますが)、テンポラリファイル等別の手段を考えます

>>774
「リソースにアクセスしたい」ではなく、「ファイルにアクセスするメソッドにリソースを
渡したい」でした
768のおかげでそのまま実現するのは無理とわかりましたので、疑問としては解決です

776 :デフォルトの名無しさん :2018/05/21(月) 08:06:02.24 ID:yxdsvVjy0.net
Json保存すると漢字が化ける。なぜばけるの? Jsonの問題なのか、StrreamReader
の問題なのか、StrreamWriterのもんだいなのか? 取り合えず、Read、Writeともに
shift_jisでEncode指定したら化けないようになったが、意味がよくわからない。
 普通に考えるとStringにShift_JIsが入っていて、それを認識しているなら、Read
WirteにShift_jisを指定する必要はないと思うのだ。だからStringにはそういう情報は
入ってない筈だ。ファイルにSHiftJIsの属性がはいっているなら、Write側だけに指定
すればよいはずだ。ReadにもSHIFT_JISを指定しなければならないということはファイルにも
その属性は保存されていないということだ。Stringに属性を保存しておけばすべて丸く
収まるとおもうのだが、なぜそうしないのだろうか?

777 :デフォルトの名無しさん :2018/05/21(月) 09:30:17.64 ID:HN6x0Zrba.net
文字列の実装には内部的にUnicodeで扱うものとバイト列として扱うものとがある。
前者は入出力時にそれぞれバイト列->UnicodeとUnicode->バイト列をどのようにマッピングするか(i.e. エンコーディング)を指定する必要がある。
後者であればその必要はない。
一方で前者は外部から文字列を読み込んでも内部的にはUnicodeだから読み込んだ文字列に対して処理を行う際に文字コードに悩む必要はない。
後者はプログラムを書いている時の文字コード, 入力された文字コードを常に意識せねばならん。
一長一短だからどっちの実装もあり得るが.NETは内部Unicodeが標準的だということだ

文字列自身に自分のエンコーディング情報を埋め込むのはやめておけ
禄でもないことにしかならん

778 :デフォルトの名無しさん :2018/05/21(月) 10:54:12.62 ID:wG0UA8oX0.net
JSON はJavaScript だから、UTF-8

Ruby, Python もそう。
ネット上に流れるテキストも同じ

SHIFT_JIS を使う言語は、まずない。
PowerShell も、UTF-16

ここ数年は、Unicode に統一された。
それ以外の、SHIFT_JIS, EUC-JP は使わない

779 :デフォルトの名無しさん :2018/05/21(月) 12:22:48.67 ID:ZMitaTGGM.net
>>778
何言っても通じないとは思うが、お前の愛するRubyの文字列の扱いは他と異なっている
Rubyの文字列は内部的にはエンコーディング情報を持ったバイト列だ
特にWin環境では非常にトラブルの原因になりやすいゴミ仕様である

780 :デフォルトの名無しさん :2018/05/21(月) 12:34:00.26 ID:wG0UA8oX0.net
Ruby は各文字列に、エンコードを持てるから、すごい

例えば、文字列a がSHIFT_JIS で、b がUTF-8 として、

a + b
みたいに、文字列を連結すると、エンコードエラーになる

781 :デフォルトの名無しさん :2018/05/21(月) 12:36:23.24 ID:ZMitaTGGM.net
>>780
うん。何一つメリットのないカス仕様だね。

782 :デフォルトの名無しさん :2018/05/21(月) 12:50:56.22 ID:0W5b/XyUM.net
>>775
ClosedXML.Excel.XLWorkbookコンストラクタにはStream取るのもあるんだけど

783 :デフォルトの名無しさん :2018/05/21(月) 13:22:41.39 ID:yxdsvVjy0.net
>SHIFT_JIS を使う言語は、まずない。
エクセルファイルをCSVにEportしたファイルだけど、
var sr = new StreamReader(fs, Encoding.GetEncoding("shift_jis"))
これでなら正常に読める。ということはエクセルはshift_jisだと思うが、、

784 :デフォルトの名無しさん :2018/05/21(月) 14:04:00.83 ID:hRf5uVYXM.net
とりあえずそのRubyアスペに触るのを止めて

785 :デフォルトの名無しさん :2018/05/21(月) 15:12:20.28 ID:yxdsvVjy0.net
>一方で前者は外部から文字列を読み込んでも内部的にはUnicodeだから読み込んだ文字列に対して処理を行う際に文字コードに悩む必要はない。
>後者はプログラムを書いている時の文字コード, 入力された文字コードを常に意識せねばならん。

前者はDefault unicode
後者はDefault bytecode
ということであれば、shift_jisなど他にもたくさんの文字コードが来る可能性があるのだから、コードを意識することにあまり違いはない
と思うが、、

>>780
その考え方の方が正しいと思う。
そもそもunicoeをディフォールトにするんだったら、漢字はそのまま表示できるんじゃないの?
其れなのにXcelは何でわざわざSHIFT_JISをつかうんだろ。

786 :デフォルトの名無しさん :2018/05/21(月) 15:24:30.40 ID:wG0UA8oX0.net
Windows も内部的には、UTF-16 だろ。
PowerShell, ブラウザも、UTF-8

保守費用が掛かるから、MS も、SHIFT_JIS を辞めたいはず

Excel など、長年使っている人が多いから、やめられないだけ

787 :デフォルトの名無しさん :2018/05/21(月) 15:43:54.89 ID:s3jYOwAha.net
>>785
Stringのエンコーディングが固定なら、IOのときだけ文字コードを意識すれば済む
素人のちょっとしたツールのレベルならともかく、一般的にはIとOの間(P)の部分がプログラムの殆どを占めるんだよ
Dictionaryのキーの文字コードが混在してて、存在するはずのキーの検索に失敗するとか悪夢だろ

788 :デフォルトの名無しさん :2018/05/21(月) 21:17:05.23 ID:83cG7/bYM.net
ビルドしても、ファイルできなくて意味わかんねえ

789 :デフォルトの名無しさん :2018/05/21(月) 22:02:39.74 ID:o82N7H0r0.net
>>783
Excelは言語じゃない。
日本語版のExcelのCSV出力時の文字コードがShiftJISなのは単に過去との互換性のため。
ちなみにBOMが付いていればUTFのCSVでも読み込める。

790 :デフォルトの名無しさん :2018/05/21(月) 22:04:28.66 ID:ZCJ7EsPBa.net
漢字が文字化けするのは保存した文字コードと読み込んだ文字コード指定が違うから
それだけ
つまりやった側の間違い

どこで間違えたか手順を順に見直すべし

791 :デフォルトの名無しさん :2018/05/21(月) 22:11:44.14 ID:KnpxsRSU0.net
やった側ってどの側だよw

792 :デフォルトの名無しさん :2018/05/22(火) 00:01:50.29 ID:1gACj0o60.net
sqliteとの連携に関して質問です
なんらかのクライアントで先にテーブルを作り、レコードもinsertしておいて、それを読み込むプログラムを作りたいのですが、既存のdbファイルはどこに配置すればよいのでしょうか
デバッグしてみたらno such tableと言うようなエラーが出たので、どうやら実行時に新たにdbファイルを作ってそれを読もうとしてしまっているようです

793 :デフォルトの名無しさん :2018/05/22(火) 00:20:52.78 ID:V2R/cizEa.net
>>792
どこもクソも決めるのはお前
SQLiteはDBのファイルパス指定して開けるだろ
SQLiteは普通のDBMSと違って、システムのどこかに共通のデータストアがあるみたいな考え方をしないんだよ
ファイルを名指しするのが基本

794 :デフォルトの名無しさん :2018/05/22(火) 03:32:12.88 ID:MRvdbbs3M.net
Accessのmdbみたいな感じかいな?

795 :デフォルトの名無しさん :2018/05/22(火) 06:38:16.66 ID:GCRmPVlZ0.net
>>790
「文字コードなんて意識する必要はない。機械に任せたほうがいい。」とは考えないのだろうか?
そもそもテキストとは文字コードによって表現された文字の集合体だ。テキストを保存するIOに
たいしてわざわざ文字コードの情報を削除して保存するのは何故なのだ。正気の沙汰とは思えんな。

796 :デフォルトの名無しさん :2018/05/22(火) 06:43:45.86 ID:GCRmPVlZ0.net
>Dictionaryのキーの文字コードが混在してて、存在するはずのキーの検索に失敗するとか悪夢だろ

文字コードなんて本質的なことじゃない。だから混在してもかまわない。
それを人手でやろうとするから「混在する悪夢」が発生する。
そういう場合にこそ機械に自動的にやらせるべきだろう。

797 :デフォルトの名無しさん :2018/05/22(火) 06:51:24.64 ID:GCRmPVlZ0.net
>日本語版のExcelのCSV出力時の文字コードがShiftJISなのは単に過去との互換性のため。
>ちなみにBOMが付いていればUTFのCSVでも読み込める。

互換性のためならもっとほかの方法がある。アプリのためにコードを弄るなんて最悪の方法だろう。

798 :デフォルトの名無しさん :2018/05/22(火) 07:58:03.61 ID:j6MjsmBId.net
>>793
あざすぅ

799 :デフォルトの名無しさん :2018/05/22(火) 09:20:46.86 ID:uYoKmc1Q0.net
ここにきて.NET CoreがWPF, Windows Formsを救済ってか

800 :デフォルトの名無しさん :2018/05/22(火) 09:31:30.78 ID:7LgkrdmnM.net
>>795
>>796
>>797
屁理屈言っても誰にも認められない
x=x+1は式としておかしいと言い張ってプログラムが全くできなかった人がいたけど
その人と同じ

文字コードがいろいろあるのは仕方ない
それぞれの都合で整数に文字を割り当てる方式がちがうので文字化けする
文字コードの情報というものがそもそもないので削除なんてしてない

自動判定は単なる憶測にすぎない
その自動判定だって誰かが書いたコードが判定してるんであって
機械に任せると言うのは言ってることがおかしい

801 :デフォルトの名無しさん :2018/05/22(火) 10:37:32.58 ID:svO22mue0.net
public double Re { get; set; }
ってプロパティを省略して書くと見やすくていいんですが、
他クラスから参照するだけの変数だと、
Reは使用されていませんって警告がずっと出てうっとうしい。
何かいい手はないでしょうか?

802 :デフォルトの名無しさん :2018/05/22(火) 10:37:46.91 ID:np9ncSKga.net
別に文字列を文字セット/エンコーディングごと抽象化するライブラリとか作ってくれて良いのよ?
既存文字列と互換性があって使い勝手, 拡張性と統一性と性能が担保されるなら普及もするだろう

でも曲がりなりにもそれ続けられてるのってRubyくらいで他に思い浮かばない
なんで無いのかと言うけど試されてないわけないんだよ, 現実的じゃないから普及してない

803 :デフォルトの名無しさん :2018/05/22(火) 10:58:36.99 ID:sxJmXMb80.net
>>801
{ get; private set; }
とか?できないんだっけ?

804 :デフォルトの名無しさん :2018/05/22(火) 11:14:09.28 ID:7Riaak3V0.net
WPFで
WindowStyle="None"
AllowsTransparency="True"
Background="#01FFFFFF"
でほぼ透明だけどマウスイベントを受け取るウィンドウを作ったのですが
これとおなじことをFormでやりたいのですがやりかたがわかりません
どのようにすればいいですか?

805 :デフォルトの名無しさん :2018/05/22(火) 11:23:07.15 ID:svO22mue0.net
>>803
できると思います。

データ格納フォルダB:Aフォームから値を取得
Cクラス:Bから値を取得
となってるのでsetもpublicでないと困るんですよね。

データ格納フォルダBの値はAから値取得した後なにも処理がないので、
「Reは使用されていません」って正しい警告なんですけどねぇ。
格納しているデータが10個あって警告10個もでるとさすがにうっとうしい。

806 :デフォルトの名無しさん :2018/05/22(火) 12:14:32.87 ID:CqasDiEMM.net
>>795
BOM付きのUTF以外は、文字コードの情報なんてものは最初から存在しない。
また、文字コードの自動判別も完璧ではなく、場合によっては全く判別出来ない。

807 :デフォルトの名無しさん :2018/05/22(火) 12:16:10.65 ID:O9GDwfVPM.net
BのコンストラクタにAからの値を受け付けて
public readonly double Reに渡すとかじゃだめなんね?

808 :デフォルトの名無しさん :2018/05/22(火) 12:36:59.84 ID:2EZjLjzja.net
>>804
Formはウィンドウ全体のアルファはOpacityで指定できるけど、
背景だけ透過させるとかは簡単にはできなかったような
http://yellow.ribbon.to/~azumaya/doc_dotnet_uplayeredwnd.php

>>805
そもそも>>801みたいな告なんか出ないと思うけど...
何か盛大に勘違いしてる予感...

809 :デフォルトの名無しさん :2018/05/22(火) 13:05:58.78 ID:7Riaak3V0.net
>>808
WPFだと簡単にできたけどだめですか。。
背景透明なウィンドウとOpacity≒0で全体をほぼ透明化したウィンドウを重ねて代用します

810 :デフォルトの名無しさん :2018/05/22(火) 13:21:14.65 ID:svO22mue0.net
>>808
勘違いなのかなぁ・・・。
すいませんもうちょっといろいろ実験してみます。

811 :デフォルトの名無しさん :2018/05/22(火) 13:55:20.14 ID:svO22mue0.net
もともとスタートアップだったform1からform2にスタートアップを変更したいと考えています。
Program.csの
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new InitialSettingForm1());
}
のForm1をForm2に変更したのですがどうもうまくいきません。

812 :デフォルトの名無しさん :2018/05/22(火) 14:00:09.60 ID:svO22mue0.net
form1が出てからform2が表示されているような…。
試しに
public ExaminationForm1()
{

InitializeComponent();
MessageBox.Show("a");
}
と入れてみると
メッセージボックスが表示→okをクリック→form2が表示
となります。
他にも設定しなければいけないところがあるのでしょうか・・・。

813 :デフォルトの名無しさん :2018/05/22(火) 14:01:17.37 ID:svO22mue0.net
また変なことやってるのかなぁ・・・。

814 :デフォルトの名無しさん :2018/05/22(火) 14:48:09.94 ID:oCYWBo6GM.net
InitialSettingなのかExaminationなのかどっちだよ
ExaminationForm1のコンストラクタにブレークポイントおいて実行
ブレークしたら呼び出し履歴を確認する

815 :デフォルトの名無しさん :2018/05/22(火) 17:11:30.57 ID:svO22mue0.net
>>814
Debugで確認していったらどうもインスタンスの参照を渡せていないようです。

816 :デフォルトの名無しさん :2018/05/22(火) 17:12:13.75 ID:svO22mue0.net
public partial class Form1 : Form
{
Form2 form2;
Class1 class1;

public Form1()
{
InitializeComponent();
form2 = new Form2();
form2.Show();

class1 = new Class1();
form2.Pointer = class1;
}
}

817 :デフォルトの名無しさん :2018/05/22(火) 17:12:47.68 ID:svO22mue0.net
public partial class Form2 : Form
{
Class1 class1;
public Class1 Pointer
{
set
{
class1 = value;
}
}
public Form2()
{
InitializeComponent();
int i = class1.fuga();
MessageBox.Show(i.ToString());
}
}

818 :デフォルトの名無しさん :2018/05/22(火) 17:13:21.01 ID:svO22mue0.net
public class Class1
{
public int hoge = 2222;
public int fuga()
{
return hoge;
}
}

819 :デフォルトの名無しさん :2018/05/22(火) 17:16:54.99 ID:svO22mue0.net
Form2で
int i = class1.fuga();
みたいなclass1のメソッドを使う命令を書くと、実行時にForm1もForm2も表示されずに終了になります。

Form2にclass1の参照をきちんと渡せていないようなのですが、どこが悪いんでしょう・・・。

820 :デフォルトの名無しさん :2018/05/22(火) 17:33:33.27 ID:2EZjLjzja.net
>>819
みたいな、じゃなくて問題を再現可能な最小コードをIdeoneにでもあげる
何で>>816-818まで書いおいて一番肝心なところを書かないんだ
それじゃやってること荒らしと同じ

821 :デフォルトの名無しさん :2018/05/22(火) 17:34:55.39 ID:oCYWBo6GM.net
806から811で全然別物の質問になってるんだけど
Form1のコンストラクタの先頭とForm2のコンストラクタの先頭にそれぞれブレークポイントおいて
ブレークしたらF10キー1行ずつステップオーバーしていって
どういう順番で実行されてるか確認

822 :デフォルトの名無しさん :2018/05/22(火) 20:59:34.16 ID:36NNq4u4M.net
うるせーな一度答えると決めたら最後までニコニコヅラで相手しろよクソハゲ

823 :デフォルトの名無しさん :2018/05/22(火) 21:22:06.95 ID:sZHy65Kr0.net
>>782
返信遅くなりました
ありがとうございます、確かに存在しました
やってみたら問題なくアクセスできました

824 :デフォルトの名無しさん :2018/05/22(火) 21:56:59.84 ID:nVwte2qB0.net
>>816
Form2のコンストラクタ内でclass1を使用しようとしているのに、
form2.Pointer(class1)がその後で設定されてる。

825 :デフォルトの名無しさん :2018/05/23(水) 00:14:46.31 ID:IEWpo6Tg0.net
>>824
ありがとうございます。m(__)m
その通りでした。
一個づつ追っていけば分かるはずなんですけど、
自分では思い込みがあって気づきませんでした。

本当に助かりました。
ありがとうございました。

826 :デフォルトの名無しさん :2018/05/23(水) 00:17:07.19 ID:IEWpo6Tg0.net
>>820
すいません。
文章の書き方が悪かったです。

812の下から4行目のように
Form2で
int i = class1.fuga();
class1のメソッドを使う命令を書くと、実行時にForm1もForm2も表示されずに終了になります。

と書くべきでした。

827 :デフォルトの名無しさん :2018/05/23(水) 00:18:47.23 ID:IEWpo6Tg0.net
>>821
これまたすいません、ブレークポイントで見て言ったら画面の生成順は問題ないことが分かって、
インスタンスの参照が渡っていないことが原因と分かり。811-813みたいな最小コードで実験してました。

828 :デフォルトの名無しさん :2018/05/23(水) 10:08:41.93 ID:N3UaVe1J0.net
中学生ぐらいだったら教えてやってもいいけど、あんたいくつよ?

829 :デフォルトの名無しさん :2018/05/23(水) 10:10:09.13 ID:QWeWgJFJ0.net
不安なメソッド内じゃ全部TryCatchで囲っちゃった方が良いです?

830 :デフォルトの名無しさん :2018/05/23(水) 10:18:50.74 ID:Mh8q82UX0.net
catch内で例外を握りつぶせば完璧

831 :デフォルトの名無しさん :2018/05/23(水) 13:00:21.42 ID:mO/AejLg0.net
メインの処理全体をtry〜catchで括るだけさ。

832 :デフォルトの名無しさん :2018/05/23(水) 18:48:37.98 ID:hVcgEIrnM.net
ジェネリクスのListやHashSetを良く使うのですが、これで用が足りてしまうので自作までしたことありません

出来る企業や個人はバリバリ自作するのでしょうか

833 :デフォルトの名無しさん :2018/05/23(水) 19:00:48.43 ID:iQ1n/QEKM.net
>>832
できる人はそんな無駄なことに時間をかけたりしません
視野狭窄な無能ほどそういうことに拘って工数をドブに捨て、結果的に全体のクォリティを上げる時間が失われるのです

834 :デフォルトの名無しさん :2018/05/23(水) 23:29:00.27 ID:l9NA/114M.net
ありもの使う方が良いと思うよ

835 :デフォルトの名無しさん :2018/05/24(木) 00:22:57.92 ID:Pwy3p0jE0.net
ありものでどうしても駄目な理由がある場合のみ、仕方なく自作だわね

836 :デフォルトの名無しさん :2018/05/24(木) 00:28:40.71 ID:crQGHj+ea.net
>>835
それも注意が必要だけどね
視野狭窄な小手先の技術に拘るプログラマは、くだらない問題に拘って「どうしても駄目だ」と思い込む(思い込もうとする)傾向がある
大抵そういうケースでは、視野を広げるとそもそも無理に手間をかけてまで解決する必要のない問題であることが多い

837 :デフォルトの名無しさん :2018/05/24(木) 00:36:35.91 ID:O9jHVcOl0.net
Dictionary クラスを継承して使いたくて、
これの各種インターフェイスを実装した中身 Dictionary クラスのラッパーを作った事あるなあ。
今思えば若かった。

838 :デフォルトの名無しさん :2018/05/24(木) 07:54:06.51 ID:YzRB3Rzod.net
>>836
プログラム以外でもあてはまる話だわな。
それ

839 :デフォルトの名無しさん :2018/05/24(木) 14:34:00.01 ID:q7DgX+HL0.net
たいていは英語力の無さに原因があるんだよな。
その機能を見つけられないとかだからさ。

840 :デフォルトの名無しさん :2018/05/24(木) 15:02:55.06 ID:AHiLgPdDM.net
コンソールアプリです。
今までに自分が吐き出した標準出力を自分で取得する事は可能でしょうか?
このアプリ(A)は主に他のアプリ(B)から実行されることを想定しています。Aは普通にConsole.WriteLineで出力し、BがProcess.StandardOutput.ReadToEndで取得、ログを残します。
A単体で実行してログも残したい要求があります。 Console.WriteLineと同時にファイルに出力すればいいのですが、最後に一括で取得できればスマートかなと思ったのですが、いかがでしょうか?

841 :デフォルトの名無しさん :2018/05/24(木) 16:59:57.59 ID:B2m5C+ouM.net
>>840
ウィンドウアプリです

842 :デフォルトの名無しさん :2018/05/24(木) 17:02:19.57 ID:q7DgX+HL0.net
両方に出力する関数作って、その関数に置き換える事すら出来ない無能に何をアドバイスしろと?

843 :デフォルトの名無しさん :2018/05/24(木) 17:11:45.68 ID:iQu+wqIP0.net
Windowsで使えるteeコマンド探した方が早いんじゃねえか

844 :デフォルトの名無しさん :2018/05/24(木) 17:19:25.14 ID:EdBeTbDkM.net
PowerShellならデフォルトで用意されてるよ!>tee

845 :デフォルトの名無しさん :2018/05/24(木) 17:19:52.49 ID:AHiLgPdDM.net
>>841
???
すみません、よくわかりません

>>842
書き方まずかったですかね。
そう言うのも含めて、2つの処理を同時にするという意味だつたのてすが。
他にはなさそうですね。

846 :デフォルトの名無しさん :2018/05/24(木) 19:35:28.68 ID:MnVBsXE4d.net
TraceSource

847 :デフォルトの名無しさん :2018/05/24(木) 20:33:40.60 ID:hof73DG2a.net
正直何言ってるのかよく分からんけど、普通にリダイレクトするだけのような...
っていうか、普通はコマンドライン引数で出力先を切り替えるように作ると思うんだけど...

848 :デフォルトの名無しさん :2018/05/24(木) 23:35:59.30 ID:iQu+wqIP0.net
>>844
へえ知らなかったな

849 :デフォルトの名無しさん :2018/05/25(金) 00:27:44.75 ID:j/dB1L1+0.net
PowerShellはもっと流行るべき

850 :デフォルトの名無しさん :2018/05/25(金) 00:39:09.38 ID:N3c6aWbUa.net
PowerShellとか罰ゲームだろ
インタラクティブシェルとしては悪くないけど、まとまったスクリプト書こうとすると大嫌いになる
Add-TypeでインラインでC#書いたほうがマシだわ
特にC#erはソースの見た目がなんとなく似てるだけに地獄を見るんだよ

851 :デフォルトの名無しさん :2018/05/25(金) 12:59:33.01 ID:RzxaIECOd.net
>>847
名前付パイプでOkだよな

852 :デフォルトの名無しさん :2018/05/26(土) 00:52:48.69 ID:grpyMBkE0.net
アプリ側で完結してないと、スクリプト操作とか変なバッチ叩かせてアプリ起動とか怪し過ぎるだろ。
業務アプリじゃねーんだw

853 :デフォルトの名無しさん :2018/05/28(月) 00:24:44.02 ID:2eqT73MR0.net
if (-100 <= clickPointXTemp && clickPointXTemp <= 100)
{
clickPointX[clickNumber] = clickPointXTemp;
MessageBox.Show(clickPointX[clickNumber].ToString() + "%");
MessageBox.Show(clickPointX[0].ToString() + "%");
MessageBox.Show(clickPointX[1].ToString() + "%");
MessageBox.Show(clickPointX[2].ToString() + "%");
clickNumber++;
}

854 :デフォルトの名無しさん :2018/05/28(月) 00:29:53.74 ID:2eqT73MR0.net
クリックしてカーソルが-100<=clickPointXTemp<=100の位置にあるときに配列にその値を代入させているのですが、
クリックするとその場で配列に代入できても次のクリックで0になってしまいます。

1回目クリック
clickPointXTemp=10
[0]=10
[1]=0
[2]=0

2回目クリック
clickPointXTemp=30
[0]=0
[1]=30
[2]=0

2回目クリック
clickPointXTemp=100
[0]=0
[1]=0
[2]=100

なんでだろ・・・。

855 :デフォルトの名無しさん :2018/05/28(月) 00:30:12.40 ID:2eqT73MR0.net
5時間ぐらい悩み中。。。

856 :デフォルトの名無しさん :2018/05/28(月) 00:33:24.89 ID:SRIgyUF4a.net
データベースを使わないで、インデックスが共通する複数のデータ配列を作りたいときってどういう風な実装が最適なんでしょうか
var A = new int[x]
var B = new int[x]
var C = new int[x]



var E = new int[x]
みたいな感じです

857 :デフォルトの名無しさん :2018/05/28(月) 00:33:25.48 ID:MfVpzBU40.net
スコープが原因だろうから全体のソース出さないとエスパーだらけの回答になるよ

858 :デフォルトの名無しさん :2018/05/28(月) 01:08:05.78 ID:dlEIDhlNa.net
>>856
struct Hoge
{
  int A;
  int B;
  int C;
  int D;
  int E;
}
....
var hogeArray = new Hoge[100];

859 :デフォルトの名無しさん :2018/05/28(月) 07:52:50.79 ID:Mf7CKKuIa.net
>>858
ありがとうございます
助かりました!

860 :デフォルトの名無しさん :2018/05/28(月) 12:27:04.88 ID:YifI+gJdr.net
誰か>>857のエスパーたのむ

861 :デフォルトの名無しさん :2018/05/28(月) 13:02:33.05 ID:PWPrnTKxM.net
>>853-854へのレスだろ

862 :デフォルトの名無しさん :2018/05/28(月) 13:47:49.05 ID:i/nkRhbIM.net
>>860
https://youtu.be/mKrYRsENA-I

863 :デフォルトの名無しさん :2018/05/28(月) 15:55:38.64 ID:W2eXy6T5M.net
エスパー能力ないと5chはこなせない

864 :デフォルトの名無しさん :2018/05/28(月) 20:32:45.18 ID:0z7zyrSed.net
複数のクラスで共通の変数定数を外出しして、
その変数クラスを継承するのって良し悪しで言うとどうでしょうか

is aなのかちと微妙な感じです
内臓名クラスを継承して動物クラスを作ってるような

has aなのでオブジェクトとして渡すべきですか?

865 :デフォルトの名無しさん :2018/05/28(月) 21:46:19.79 ID:rs0fZbm/M.net
>>864
共通の変数などという低い抽象度でクラス設計を考えるのがそもそも間違ってる
実装からクラスを考えると必ず破綻するから、君の今の考え方のまま進む限りはいかなる選択肢も不正解
とはいえ最初から抽象度を上げて設計しろといっても初心者には無理な話だから、気にせず自分の思うように作ればいい
一通りモノ作れるようになったらオブジェクト指向モデリングの書籍を読むことをお勧めする

866 :デフォルトの名無しさん :2018/05/28(月) 21:51:33.12 ID:I0m/gtVC0.net
オブジェクト指向プログラミングしない方がいいもの作れるよ
関数で組む方法を極めた方がいい

867 :デフォルトの名無しさん :2018/05/28(月) 21:56:33.33 ID:dVAXJXVu0.net
>>865
>オブジェクト指向モデリングの書籍
例えばどんな本がありますか?特におすすめ、とかじゃなくてもいいです
どういう本が該当するのかよくわからないのです

868 :デフォルトの名無しさん :2018/05/28(月) 22:18:11.40 ID:rs0fZbm/M.net
>>867
王道はエリック・エヴァンスとかダグ・ローゼンバーグとか
今読んでも実際のコーディングに対しては何の参考にもならないと思うよ

869 :デフォルトの名無しさん :2018/05/28(月) 22:21:17.59 ID:dVAXJXVu0.net
>>868
キーワード提供、感謝しています

870 :デフォルトの名無しさん :2018/05/29(火) 12:48:47.90 ID:dUPfr/v4M.net
どのプログラム言語を選ぶかでオブジェクト指向モデルの実現方法がかなり違う

871 :デフォルトの名無しさん :2018/05/29(火) 12:57:47.07 ID:Xt8fAcdVa.net
>>868の本くらいの抽象度になると実装方法にはほとんど依存しないよ
それどころかオブジェクト指向モデルすらも方法論全体の中では下層の方に位置付けられる

872 :デフォルトの名無しさん :2018/05/29(火) 19:04:25.63 ID:QoecqRn60.net
とりあえず入門レベルが終わったんだけど次はeffective c#4.0っての読めばいいですか?

873 :デフォルトの名無しさん :2018/05/29(火) 19:05:12.69 ID:upesQ40yM.net
6.0 7.0のでてるからそっちでいいよ

874 :デフォルトの名無しさん :2018/05/29(火) 19:28:28.39 ID:QoecqRn60.net
more effective C# 6.0 7.0ですか?
moreとついてるので前の本を読む必要があるかと思っていたんですが大丈夫そうならそちらを購入しようかと思います

875 :デフォルトの名無しさん :2018/05/29(火) 21:07:37.85 ID:FUNbZ4ty0.net
フォーム間でのデータのやりとりはどうするのが一般的なのでしょうか?
例えば、Form2の表示と同時に、Form1に入力済みのデータをForm2に表示させる場合、今は以下のようにしています。

class Form1
{
 public object Data{get; set;}

 var form2 = new Form2();
 form2.Parent = this;
}

class Form2
{
 public Form Parent{get; set;}

 Load()
 {
  this.Data = Parent.Data;
 }
}

876 :デフォルトの名無しさん :2018/05/29(火) 21:31:23.00 ID:T0OOxyUA0.net
>>875
一般的とかいいやりかたって聞かれると逆に難しいんで自分のやりやすい形で
https://dobon.net/vb/dotnet/form/accessanotherformdata.html
コンストラクタやメソッドの引数でも渡せるし

877 :デフォルトの名無しさん :2018/05/29(火) 22:26:37.07 ID:LfCUNSAB0.net
>>874
Apressお勧め

878 :デフォルトの名無しさん :2018/05/29(火) 22:58:12.01 ID:G7p9dius0.net
>>874
言語仕様とか環境の変化で不要になった部分をバージョンアップしてるから
今からかうなら最新だけでいい
初版と4.0と最新で内容は被っている

879 :デフォルトの名無しさん :2018/05/29(火) 23:11:52.08 ID:5CF0lkGw0.net
ビジュアルスタジオでC#使ってると、どんどんコードスタイルが簡略化されていくんだよな。

880 :デフォルトの名無しさん :2018/05/30(水) 13:41:56.71 ID:Bf3z8rw50.net
SocketクラスのBeginConnectとかBeginReceiveとかに渡すコールバック関数を
staticで書いてあるのとそうでないのと両方見かけるんですけど
どっちが良いんでしょう?

881 :デフォルトの名無しさん :2018/05/30(水) 14:44:18.44 ID:LltEUg5c0.net
まあ、C#ならコールバックは登録解除を明示的に行うからスタティックである必要は無いけどな。
でもこれがイベントハンドラからのデリゲートなら話は別だ。

882 :デフォルトの名無しさん :2018/05/30(水) 14:47:38.89 ID:WVM+AecNM.net
>>880
そのSocketオブジェクトに合わせるのが正解
Socketを生で使うサンプルってスキルの低い業務ドカタが書いてたり書かれた時代が古かったりすることが多いので、
C#をよく理解してなくてCやVBの感覚でstaticにしないといけないと思ってるようなのが多い

883 :デフォルトの名無しさん :2018/05/30(水) 15:03:40.50 ID:Bf3z8rw50.net
>>881
イベントハンドラからのデリゲートとはどういう状況でしょう?

>>882
なるほどありがとうございます!

884 :デフォルトの名無しさん :2018/05/31(木) 15:19:11.21 ID:AbqPsR3A0.net
TextBoxか、MaskedTextBoxに単位をつけたい。
小数点有りや無し、-の数値を入力できたりするものってできますか?
-2℃
14℃
25.5℃
2.5℃

885 :デフォルトの名無しさん :2018/05/31(木) 18:15:14.92 ID:Zw7Yk0+cM.net
テキストボックスの横にラベルで単位でも書いておこうぜ

□㌕

886 :デフォルトの名無しさん :2018/05/31(木) 18:16:46.93 ID:Zw7Yk0+cM.net
小数点は

□.□㌕



887 :デフォルトの名無しさん :2018/05/31(木) 19:19:02.19 ID:0ajP7AA9a.net
>>884
TextBoxクラスを継承

888 :デフォルトの名無しさん :2018/05/31(木) 20:26:49.48 ID:9/5XjJFR0.net
>>884
入力支援・単位の入力補完・数値⇔文字列の変換
何でもできるけどホントにしたいことがそのレスでは分からない

889 :デフォルトの名無しさん :2018/05/31(木) 21:28:20.09 ID:ygkZdVXVM.net
>>878
え、more付いてないのと付いてるのって同じ本なん?
独習C#と言い、命名がわけわからんな…

890 :デフォルトの名無しさん :2018/06/01(金) 09:05:55.18 ID:azdekr4p0.net
説明不足ごめんなさい。
出力ですが、最終的にはTextBoxの枠ごと印刷したいと考えております。
883の言う単位の入力補完だと思います。

MaskedTextBoxのマスクに####℃と記入し、
「-24.4」等のデータをデータベースから取り出して、入れたところMaskedTextBox.Textが244℃となってしまいました。
このテキストボックスを小数点有りの場合、なしの場合、負の符号が有りの場合なしの場合、「----」の場合、
1桁から5桁+「℃」としてTextBox.Textに出力したいと考えております。

できますか?

891 :デフォルトの名無しさん :2018/06/01(金) 09:13:09.12 ID:gkm5sPLjM.net
TextBoxクラスを継承して自前で実装すればできる

892 :デフォルトの名無しさん :2018/06/01(金) 09:47:05.22 ID:czZmZo8za.net
TextBoxクラスを継承してTextプロパティを上書き
書式とか単位を属性に持たせれば汎用的に使える。
コピペされたときの場合も考慮すること

893 :[879] :2018/06/01(金) 09:58:02.26 ID:azdekr4p0.net
ありがとうございます。
なんとなく、それっぽいものが作れそうです。

894 :デフォルトの名無しさん :2018/06/01(金) 10:22:08.86 ID:XLd38QjBM.net
ユーザーコントロールでボーダーなしテキストボックスとラベル並べた方が楽な気がする

895 :デフォルトの名無しさん :2018/06/01(金) 18:06:59.69 ID:TnI3eVXu0.net
テキストボックスの描画や挙動を弄るの面倒くさいから汎用性を求めるんなら InputMan 買った方がいいよ

896 :デフォルトの名無しさん :2018/06/01(金) 18:10:44.74 ID:UBye49NJM.net
ライセンスとかテクリスとか面倒だから買わない

897 :デフォルトの名無しさん :2018/06/01(金) 18:21:51.24 ID:S7DUtxKdM.net
NuGetで参照できるオープンソースのWinFormsリッチコンポーネントって何が有名なの?

898 :デフォルトの名無しさん :2018/06/01(金) 20:17:26.63 ID:dZV2tAFxM.net
nugetは俺の鬼門

899 :デフォルトの名無しさん :2018/06/01(金) 21:28:02.83 ID:naL+ZRGN0.net
僕の半蔵門

900 :デフォルトの名無しさん :2018/06/01(金) 23:18:54.61 ID:fWGAwsr30.net
前門の虎 肛門の狼

901 :デフォルトの名無しさん :2018/06/02(土) 00:25:46.86 ID:A4SZL/oE0.net
寒っ

902 :デフォルトの名無しさん :2018/06/02(土) 10:06:40.82 ID:QJbZaU5f0.net
c#で穴ぼこメモリにしないように組むのって不可能?

903 :デフォルトの名無しさん :2018/06/02(土) 10:27:51.87 ID:nL4AUV2I0.net
可能だが、規模によっては現実的でない
パフォーマンスを気にするなら、別にボトルネックが存在していないかを見直す方が先

904 :デフォルトの名無しさん :2018/06/02(土) 10:30:12.89 ID:rvy10L9Oa.net
OSの仕事
どうしても嫌でデカいbyte配列確保して中に文字や数字全部入れても無駄

905 :デフォルトの名無しさん :2018/06/02(土) 10:40:30.36 ID:QJbZaU5f0.net
>>904
それでも駄目なの?
もうサービス部分はC言語で組んだほうが良さげ?

906 :デフォルトの名無しさん :2018/06/02(土) 10:42:11.98 ID:1ZPJADB4M.net
GCが勝手に詰めてくれるから気にしなくていい
ただし巨大なオブジェクトは専用の領域があって移動されないので断片化されやすいから注意

907 :デフォルトの名無しさん :2018/06/02(土) 11:05:50.81 ID:msgJi+IZM.net
Spanとstackallocで我慢しなさい

908 :デフォルトの名無しさん :2018/06/02(土) 11:10:29.54 ID:rvy10L9Oa.net
>>905
Cだって確保管理はOSの仕事だろ
何のためにメモリの管理をOSに任せたくないんだ?

909 :デフォルトの名無しさん :2018/06/02(土) 11:12:27.29 ID:msBkLZBc0.net
DMAが僕を呼んでいるから

910 :デフォルトの名無しさん :2018/06/02(土) 11:18:59.70 ID:J1HVezEsH.net
>>908
Cだってオブジェクト毎の領域をそれぞれ全てOSが管理しているわけじゃない
mallocが効率化のためにだいぶ仕事してる

911 :デフォルトの名無しさん :2018/06/02(土) 11:42:21.94 ID:gRqFSsBQa.net
OSでメモリはブロックなどで管理されていて要求があったら
要求サイズに合わせてそのブロックの中のさらに細かいブロックなどを払いだしてる
こっちがどうしようとOSでブロックを作ってその中でやりくりしてる

例えそのブロックの中で断片化していて何か不都合あるのか?

912 :デフォルトの名無しさん :2018/06/02(土) 14:08:09.74 ID:65ghWvPg0.net
使う予定の最大量の倍の空きメモリーあれば大体は気にならない。
いまどきのパソコンはアプリが使いたいメモリーサイズの数百倍は有るから気にするな。

913 :デフォルトの名無しさん :2018/06/02(土) 14:25:15.68 ID:QJbZaU5f0.net
リークしてると1ヶ月ぐらいで死ぬじゃん
現状自分でメモリ管理しないとどこで何が確保されてるのかわからないわけで
そういうの確実に管理したいときはc言語のがいいのかなぁ?と

914 :デフォルトの名無しさん :2018/06/02(土) 14:34:09.78 ID:gayBoTaI0.net
極めて厳密に管理したいならC/C++でアロケータを自前で書くというのはあり得る
しかしリークという点ではC#よりC/C++の方が遥かにやっちまい易いので, メモリ安全を確保する目的でC/C++で書くのは本末転倒のように思う

915 :デフォルトの名無しさん :2018/06/02(土) 14:39:58.23 ID:I3vJQFJE0.net
リーク前提とかバカでしょ

916 :デフォルトの名無しさん :2018/06/02(土) 15:01:44.21 ID:fV6b9MUi0.net
List#Containsの重複判定基準をEquals以外にすることはできないでしょうか?
ListにしたいクラスのEqualsが、別の目的用にオーバーライドされている為、Equalsを使うことができません。

917 :デフォルトの名無しさん :2018/06/02(土) 15:43:20.19 ID:QJbZaU5f0.net
>>914
c#は現在実行中のアプリのインスタンスを確認する方法はあるの?

918 :デフォルトの名無しさん :2018/06/02(土) 15:47:01.32 ID:XUNevU9ma.net
>>916
>Equalsが、別の目的用にオーバーライドされている
常識的にはそっちの方が解消すべき「問題」のように思うけど...

919 :デフォルトの名無しさん :2018/06/02(土) 15:54:54.04 ID:XUNevU9ma.net
まあ、Exists使うだけだよね

920 :デフォルトの名無しさん :2018/06/02(土) 16:03:39.22 ID:nL4AUV2I0.net
>>913
Webサービスか何かを想定してる?
だったらコーディングで対応するんでなく、ロードバランサで複数のアプリケーションサーバに振り分けて
サービスが止まらない様にしつつ、一部のサーバをオンメンテでリブートすべし

921 :デフォルトの名無しさん :2018/06/02(土) 16:05:51.99 ID:wt7oIb0Vp.net
C#スレでメモリーリークを心配するとか、どんだけ無能なんだよ。

922 :デフォルトの名無しさん :2018/06/02(土) 16:12:14.89 ID:5ltA6BNw0.net
普通はリークで死ぬ前にGen2GC連発して性能ガタ落ちになるんじゃ
どんだけ握ってんだよと

923 :デフォルトの名無しさん :2018/06/02(土) 18:04:04.45 ID:QJbZaU5f0.net
実際にメモリリークが起こらないように気をつける術は昔ながらの方法しかない?
プロジェクトでnewするときはインスタンスマネージャー的なのを通して
可能な限りインスタンスを監視するとかそんなの?

924 :デフォルトの名無しさん :2018/06/02(土) 18:17:48.36 ID:msgJi+IZM.net
マトモなコードを書くだけ

925 :デフォルトの名無しさん :2018/06/02(土) 19:01:19.50 ID:pCnJrSzQd.net
メモリリークさせようと思わないとなかなかできんよ

926 :デフォルトの名無しさん :2018/06/02(土) 19:11:03.61 ID:1ZPJADB4M.net
>>923
一時的なオブジェクトはもう必要ないなら握りっぱなしにしないで即座に使い捨てること
中途半端に握りっぱなしにしてるとGCの世代か昇格してメモリ使用量の増加やGCのパフォーマンス低下の原因になる
一方、単寿命オブジェクトのGCは爆速なので、newしたら積極的にすぐ放置すべき

927 :デフォルトの名無しさん :2018/06/02(土) 19:16:06.36 ID:1ZPJADB4M.net
>>916
Any

928 :デフォルトの名無しさん :2018/06/02(土) 19:21:44.73 ID:I3vJQFJE0.net
C#でメモリリークさせるコード書く奴がC/C++で無くせるとは到底思えないわ

929 :デフォルトの名無しさん :2018/06/02(土) 19:25:12.19 ID:QJbZaU5f0.net
>>926
うーん
爆速ではないなぁ
3分に1回動かしてる処理があるんだけど
強制GCせずにずっと動かしてるとき
メモリ使用量がかなりあがった状態でGCが動くと
3分に一度の処理のタイミングがズレちゃうんだよね
そこで強制GCも十分に一度ぐらいの頻度で動かしてる状態

930 :デフォルトの名無しさん :2018/06/02(土) 19:29:07.89 ID:pCnJrSzQd.net
だめだこいつ

931 :デフォルトの名無しさん :2018/06/02(土) 19:31:42.56 ID:QJbZaU5f0.net
>>930
なんかいい方法あるんですか?

932 :デフォルトの名無しさん :2018/06/02(土) 19:37:34.74 ID:KX6MAuAea.net
ちゃんと設計してればC#でメモリーリークなんて気にすることなんてあるか?
そんなガバガバ設計してるやつがCだったら大丈夫なんだけど、って馬鹿な話誰が信じるよ

933 :デフォルトの名無しさん :2018/06/02(土) 19:45:14.53 ID:msgJi+IZM.net
>>931
簡単だよ
マトモなコードを書くだけ

934 :デフォルトの名無しさん :2018/06/02(土) 20:14:13.22 ID:fh+k246w0.net
以降放置でお願いいたします

935 :デフォルトの名無しさん :2018/06/02(土) 20:28:22.93 ID:iRadbqpq0.net
>メモリーリークなんて気にすること
ページフォルトを気にしないヴァカっていたな。
リークしていないが累積しすぎたページフォルトがOSを殺す

936 :デフォルトの名無しさん :2018/06/02(土) 20:30:41.21 ID:+/nRHGaPa.net
C#でリークやらかす奴がC/C++でやらかさない道理がない

937 :デフォルトの名無しさん :2018/06/02(土) 20:31:22.14 ID:eSvYHUXNM.net
こいつもトンチキなので放置でいいです

938 :デフォルトの名無しさん :2018/06/02(土) 20:50:00.44 ID:wt7oIb0Vp.net
まあ、でもC#はメモリー管理を隠蔽しちゃったから、実はCやC++よりメモリー管理しにくいんだよな。

939 :デフォルトの名無しさん :2018/06/02(土) 20:58:18.57 ID:msgJi+IZM.net
C++出身のC#初心者にありがちだね

940 :デフォルトの名無しさん :2018/06/02(土) 21:10:12.98 ID:u/NNd5OV0.net
未確認飛行のSpan説明みてサンプルコード動かそうとしたんだけど
using System.Memory;すると
CS0305ジェネリック種類 'Memory<T>' を使用するには、1 型引数が必要です。
って叱られるのなんで?
VSもCoreも最新

941 :デフォルトの名無しさん :2018/06/02(土) 21:20:59.23 ID:msgJi+IZM.net
SpanはSystem.Spanだ

942 :デフォルトの名無しさん :2018/06/02(土) 21:33:12.83 ID:u/NNd5OV0.net
System.Spanにしてもでてきおる
using static System.Memory<string>;
ってするとエラーは消えた

943 :デフォルトの名無しさん :2018/06/03(日) 17:57:54.97 ID:nwnHFAsS0.net
フォームアプリでマウスクリックでイベントをはっせいさせているのですが、
ある処理ループの実行中はこのクリックイベントの割り込み発生を禁止させたいです。
マウスクリック割り込みイベントを無効化、有効化する方法ってないでしょうか?

944 :デフォルトの名無しさん :2018/06/03(日) 18:03:05.41 ID:acSSis/XM.net
>>942
そうじゃないusing System;ってこと

945 :デフォルトの名無しさん :2018/06/03(日) 18:05:10.81 ID:5sPxkTAt0.net
>>943
イベントの購読とその解除
http://ufcpp.net/study/csharp/MiscEventSubscribe.html

946 :デフォルトの名無しさん :2018/06/03(日) 18:07:49.08 ID:qpwWeWwga.net
>>943
-=、+=
デザイナーみればわかると思うよ

947 :デフォルトの名無しさん :2018/06/03(日) 18:08:39.42 ID:imVGa92Ya.net
>>943
Control.Enabled
どうでもいいけど、「割り込みイベント」って表現は間違ってるから他所では使わない方がいいよw

948 :デフォルトの名無しさん :2018/06/03(日) 18:26:12.78 ID:y7bK61pJa.net
処理中フラグ持っておいて
クリックイベントの入り口で処理中ならreturnするのでよくない?

bool 処理中=false;

クリックイベントの頭
if(処理中)return;

949 :デフォルトの名無しさん :2018/06/03(日) 18:33:27.61 ID:3EuqECGs0.net
lockで囲めば

950 :デフォルトの名無しさん :2018/06/03(日) 18:43:15.37 ID:acSSis/XM.net
ボタンからしか起動しない処理だと保証されてるなら-=+=でもフラグでもいいが
そうでないなら真面目に並列処理管理しないとね

951 :デフォルトの名無しさん :2018/06/03(日) 18:59:01.85 ID:4vwgZnFjp.net
はあ?
クリックイベント自体を抑止したのか?
意味あるの?

952 :デフォルトの名無しさん :2018/06/03(日) 19:18:23.10 ID:bhcyF/oUa.net
処理ループの中でメッセージループを実装してGetMessage()でマウスイベントをフィルターかな?或いは読み捨てる

953 :デフォルトの名無しさん :2018/06/03(日) 20:09:50.51 ID:pjD3SZS60.net
え、連打対策してないの?

954 :デフォルトの名無しさん :2018/06/03(日) 20:15:38.36 ID:OWt1glR4a.net
非同期で実行した場合とかの抑止とか?とエスパー

955 :デフォルトの名無しさん :2018/06/03(日) 20:19:01.20 ID:S4J0YpoT0.net
>>944
つまりSpanを使うのにusing System;さえすればいいってこと?
ごめんな、クソ素人過ぎて質問がまずいのか

http://ufcpp.net/study/csharp/resource/span/

var s = "abcあいう亜以宇";

var sub = s.Substring(3, 3);
var span = s.AsReadOnlySpan().Slice(3, 3);

for (int i = 0; i < 3; i++)
{
Console.WriteLine((sub[i], span[i])); // あ、い、う が2つずつ表示される
}

を試したいんだけど、できないって話なんだ

956 :デフォルトの名無しさん :2018/06/03(日) 20:26:16.06 ID:klvCZP9p0.net
>>938
やっぱりそうだよね
厳密にやろうと思ったら昔ながらの方法でやるしかないんだよね

957 :デフォルトの名無しさん :2018/06/03(日) 20:50:59.76 ID:H2Gh+VvdM.net
>>955
現時点ではAsReadOnlySpanが存在しないっぽいね
Stringはもともと読み取り専用だからAsSpanでReadOnlySpanになるってことだと思うけど
過渡期の記事はそのまま鵜呑みにしない方がいいぞ

958 :デフォルトの名無しさん :2018/06/03(日) 21:25:48.86 ID:nwnHFAsS0.net
>>945
全く知らない概念でした。
勉強してみます。

959 :デフォルトの名無しさん :2018/06/03(日) 21:26:28.88 ID:nwnHFAsS0.net
>>948
これうまい手ですね。
使える場所ありそうですので試してみます。

960 :デフォルトの名無しさん :2018/06/03(日) 21:27:58.09 ID:nwnHFAsS0.net
>>953
おっしゃる通りで、連打対策必要だったんですね。
フォームアプリだと必須の対策なんですね。
他で少し変な挙動してたのは連打対策してなかったことが原因のようです。

連打対策してみます。
というか、どうやればいいんだろ。
また、お勉強しなければ。

961 :デフォルトの名無しさん :2018/06/03(日) 21:42:26.87 ID:0r68Qt9D0.net
>>960
いま質問した答えをイベントメソッドに組み込めば連打対策は終了
そっちを先に覚えるのが普通だと思ってた

962 :デフォルトの名無しさん :2018/06/03(日) 21:51:01.95 ID:imVGa92Ya.net
>>959
全然うまい手じゃないw
PC-98の時代じゃあるまいし、フラグって言葉を聞いたら眉に唾して聞かなきゃダメwww
それを好むのは可読性に感心がないダメグラマの可能性が高いw

963 :デフォルトの名無しさん :2018/06/03(日) 21:56:36.02 ID:imVGa92Ya.net
そもそもUIのデザイン論なんて大げさな話じゃなくても、
ユーザーの捜査に反応できない文脈では何らかの方法(通常はグレイアウト)でそれを
ユーザーに対して明示しないUIは問題あるでしょうww

そんなことにも思い至らない回答者は無視していいよw

964 :デフォルトの名無しさん :2018/06/03(日) 22:53:07.14 ID:S4J0YpoT0.net
>>957
ありがとう、そういうこともあるんだな
勉強になった

10Gくらいの固定長テキストファイルから一行ずつ読み取って
最初の1-10文字はUSER ID、11はSEX・・・って分けてdbに突っ込んでるんだけど
StringBuilderでLength=0しつつappendするくらいじゃ、stringでsubstringするのとあまり変わらなかったんで
Span使えばマシになるのかなと思ったんだ

965 :デフォルトの名無しさん :2018/06/03(日) 23:00:15.10 ID:8gLBE5WNa.net
そんなもん丸ごとDBにロードしたほうが速いだろ
固定長ファイルのロードはどのDBMSでもコマンド一発でできる

966 :デフォルトの名無しさん :2018/06/03(日) 23:12:33.52 ID:S4J0YpoT0.net
>>965
それなw
tempのカラムに一行まるごと突っ込んで、クエリでsubstrするやり方やってみる
https://stackoverflow.com/questions/12423991/import-fixed-width-text-file-into-sqlite

967 :デフォルトの名無しさん :2018/06/03(日) 23:35:40.25 ID:iikfdxhC0.net
10GBのデータだと読取よりDBMSへの書き込み方法がネックになりそう

968 :デフォルトの名無しさん :2018/06/04(月) 06:33:56.69 ID:mxEQUVjg0.net
>>967
細かくなるとdbスレ行きなんだろうけど
実際に書くところはC#なわけで、どこがボトルネックになってるのかザコ過ぎてわからんw
とりあえずsqliteつかってメモリ上dbにinsertでトランザクション管理しっかりやってってして30分くらいだったからまーいいかと
sql server expressだとbulk insertはわからんけどselectで並列処理されるみたいだから乗り換えてみる予定

969 :デフォルトの名無しさん :2018/06/04(月) 11:04:17.43 ID:MivBMbBxa.net
sql server expressはひっくるめたDBサイズが最大10 GBまでだったと思うが

970 :デフォルトの名無しさん :2018/06/04(月) 11:06:49.27 ID:UeJV2JW90.net
メモリしこたま積んでRedisかな

971 :デフォルトの名無しさん :2018/06/04(月) 14:26:59.71 ID:pPavJvQvM.net
Postgresでいいよ
ロード時に固定長レコードのフォーマットを指定できるから一時テーブルもC#もいらん

972 :デフォルトの名無しさん :2018/06/04(月) 16:33:35.32 ID:7NrmQXKK0.net
MonoのLinux版のインストールの仕方、ご教示いただけますと有難いです。宜しくお願い致します。

973 :デフォルトの名無しさん :2018/06/04(月) 16:48:48.54 ID:aK/XyO250.net
米Microsoftが米GitHubを買収することで合意
http://www.itmedia.co.jp/news/articles/1806/04/news058.html

974 :デフォルトの名無しさん :2018/06/04(月) 20:38:58.19 ID:UeJV2JW90.net
>>972
ちょまど神を信仰すると天啓が降るぞよ

975 :デフォルトの名無しさん :2018/06/04(月) 20:43:37.91 ID:CVKZewtza.net
>>972
Monoなんか今時もう誰も使ってないし誰もメンテしてないでしょ
今は.NET Coreの時代
GUIが目当てなら諦めなさい

976 :デフォルトの名無しさん :2018/06/04(月) 20:52:46.96 ID:spHrXgPF0.net
UbuntuでもCentOSでもコマンド一発で入るがな

977 :デフォルトの名無しさん :2018/06/04(月) 21:35:01.82 ID:ztrCxIDM0.net
>>975
何言ってんの?

978 :デフォルトの名無しさん :2018/06/04(月) 21:48:02.60 ID:9+XsYcyB0.net
Windows.Forms で WndProc を override して自分のコードを加えているのですが
デバッガで進めていくと、その中に突入してしまいます。

InitializeComponent の中みたいに、デバッガが入らなくする宣言みたいなものなかったですか?

979 :デフォルトの名無しさん :2018/06/04(月) 21:49:06.62 ID:BHtXacEqa.net
>>978
debuggerstepthrough

980 :デフォルトの名無しさん :2018/06/04(月) 21:56:07.60 ID:Uz3WpYRO0.net
>>975
Mono Releases | Mono
http://www.mono-project.com/docs/about-mono/releases/

981 :デフォルトの名無しさん :2018/06/04(月) 23:32:00.59 ID:054Q3E4O0.net
メインクラスとシリアル通信クラスの2つを使っています
シリアル通信の受信完了でイベントをメイン側に発生させることら可能でしょうか。受信完了したらメイン側から受信データを取りに行くようにしたいのですが。

982 :デフォルトの名無しさん :2018/06/05(火) 00:07:28.69 ID:jE9yEXCCa.net
>>981
何でそうなるのw
発想が逆だってw

そのシリア通信を担当するクラスSがデータ受信を通知するイベントを発生させて
受信したデータを利用する側がSの参照を握ってイベンを受信すればいいでしょw

ついでに言えば受信データもEventArgs使って渡してしまえばいい

983 :デフォルトの名無しさん :2018/06/05(火) 00:33:25.52 ID:liKML/cX0.net
しょうがねえだろ初心者なんだから

984 :976 :2018/06/05(火) 07:18:51.35 ID:ByFVOB9IM.net
>>982
やりたいのことはそれなんですよw
説明が下手ですいません
厳密にはデータを受けた事が分かったらメイン側は受信データの内容を解釈するクラスに送って処理分岐という形にしようかと思ってます。
用語や処理の知識がおいついてきてないので、あれを応用しようという感じにならず、調べるためのキーワードも出てこないです。

>>クラスSがデータ受信を通知するイベントを発生させて受信したデータを利用する側がSの参照を握ってイベンを受信すればいいでしょw

ここが具体的にどういう構文になるのでしょうか。

985 :デフォルトの名無しさん :2018/06/05(火) 08:07:17.14 ID:D4M8TybKa.net
Signalを使っても作れるな。

986 :デフォルトの名無しさん :2018/06/05(火) 09:11:21.09 ID:GjVlFAo70.net
>>963
PCをあまり使い慣れてない人とか、ボタンはシングルクリックでいいのをダブルクリックしちゃったりとかあるんだよなこれが・・・

987 :デフォルトの名無しさん :2018/06/05(火) 09:29:57.56 ID:nr/+sOXHa.net
非同期じゃないならボタンイネーブル切ればいいだけじゃね

988 :デフォルトの名無しさん :2018/06/05(火) 09:32:16.99 ID:nr/+sOXHa.net
すまん。忘れてくれ

989 :デフォルトの名無しさん :2018/06/05(火) 10:35:58.82 ID:l/0/VM/ma.net
状態をGUIだけに持たせておくのはおかしいといつか思うはず

990 :デフォルトの名無しさん :2018/06/05(火) 12:11:20.04 ID:vCTdp4Eha.net
>>984
class FrameReceivedEventArgs:EventArgs
{
  public byte[] Frame{get; private set;}
  ....
}

class CommunicationPort
{
  public even EventHandler<FrameReceivedEventArgs> FrameReceived;
  ....
}

class FrameDecoder
{
  public FrameDecoder(CommunicationPort c}
  {
    c.FrameReceived += CommunicationPort_FrameReceived;
  }

  private void CommunicationPort_FrameReceived((object sender, FrameReceivedEventArgs e)
  {
    ....
  }
  ....
}

991 :デフォルトの名無しさん :2018/06/05(火) 12:44:05.86 ID:eGZjT6RJM.net
>>990
引数に渡されたものを弄るのは行儀の悪い設計
IReceiverインターフェイスみたいなのを用意してport.AddReceiver(decoder)とするか、
>>984の言葉通りにいったん双方のクラスの外でイベントハンドラで受けて仲介したほうがいい

992 :デフォルトの名無しさん :2018/06/05(火) 12:51:41.81 ID:eGZjT6RJM.net
>>990がなぜ行儀が悪いか補足しておこうか
普通、オブジェクトを別のクラスのコンストラクタに渡すとき、プログラマは 受け取った側→引数側 の向きの参照ができることを期待する
ところが、>>990だとそれが逆なんだよ
new FrameDecoder(this.port) としただけで、portがGCされないかぎり作り捨てたはずのFrameDecoderがGCされないという、非直感的なコードになるわけ

993 :デフォルトの名無しさん :2018/06/05(火) 12:55:30.14 ID:vCTdp4Eha.net
何言ってるのかさっぱりわからん
よくわからん思考回路だな...

994 :デフォルトの名無しさん :2018/06/05(火) 13:09:28.12 ID:GjVlFAo70.net
言い回しがようわからんが
>>990みたいなのするのが解放されないオブジェクトを量産するっていうのはなんとなくわかる

995 :デフォルトの名無しさん :2018/06/05(火) 13:11:38.32 ID:vyKZFDS5a.net
>>993
分からないならイベントというものを正しく理解してないんじゃないかな
ボタンのクリックイベントをフォームが受け取れるのは、ボタンがフォームへの参照を(実際には間にデリゲートが入るので間接的にだが)持ってるから
基本的に、引数に渡ってきたものに自分自身を登録するのは避けたほうがいい
オブジェクトのライフタイムが非常に分かりにくくなるから

996 :デフォルトの名無しさん :2018/06/05(火) 13:53:28.61 ID:UBCugO63M.net
reactive extensionsって.NET発祥なのに使う人少ないよね

997 :デフォルトの名無しさん :2018/06/05(火) 15:23:49.06 ID:n583dJR10.net
>>974
ちょまど神って???状態でしたので調べてみました。
一つ知識が増えました。ありがとうございます。

998 :デフォルトの名無しさん :2018/06/05(火) 15:24:19.24 ID:n583dJR10.net
>>975
そうなんですか。。。
NET Coreっての調べてみます。どうも有難う御座います。

ちょど昨日 GUI って何だ??って検索したばかりでした。
3日前からプログラムの勉強をはじめたばかりで。。。

999 :デフォルトの名無しさん :2018/06/05(火) 15:24:34.93 ID:n583dJR10.net
>>980
ありがとうございます。TRYしてみます。

この掲示板すごーい!!皆様に感謝です。

1000 :デフォルトの名無しさん :2018/06/05(火) 16:15:32.44 ID:vCTdp4Eha.net
>>994
ないないw
イベントの購読解除はリークの原因になるのはその通りだけど、
それは>>991が主張するように、イベントを発生するオブジェクトを引数で受け取ったかどうかと無関係。

>>995
俺は理解してないのは君の方だと思うよw
その君のいう俺様ルール、何が悪いのかさっぱり分からない

そもそも今はそんな話をしてるんじゃないw
単に質問者の参考になるかもしれんコードの骨組みを示しただけw

1001 :デフォルトの名無しさん :2018/06/05(火) 16:16:25.51 ID:vCTdp4Eha.net
あ、

× イベントの購読解除
〇 イベントの購読解除忘れ

1002 :デフォルトの名無しさん :2018/06/05(火) 19:31:17.11 ID:70UTtyrn0.net
次スレたててみる

1003 :デフォルトの名無しさん :2018/06/05(火) 19:33:22.39 ID:70UTtyrn0.net
ふらっと C#,C♯,C#(初心者用) Part138
https://mevius.5ch.net/test/read.cgi/tech/1528194762/
たった
議論は他のところでよろしく

1004 :デフォルトの名無しさん :2018/06/06(水) 00:18:56.95 ID:+J9HGVUKa.net
>>1000
想像力のない人だなあ
>>990だと、イベントハンドラの登録を解除しない限り、FrameDecoderが不要になっても
登録先のCommunicationPortよりも先にGCされることは絶対にない。
じゃあ不要になったらイベントハンドラを登録解除できるようにしよう。いつ解除する?
それはFrameDecoder自身には分からない。知っているとしたら、それは>>981のいうメインクラスだろう。
登録解除するにはFrameDecoderクラスのDisposeメソッドを呼べ、という仕様にするか?
結局、985のFrameDecoderを正しく扱うには、メインクラス側がそういうクラス外から見ただけでは想像できないFrameDecoderの気難しい仕様を理解した上で、
必要に応じて明示的な解放を行わなくてはならない。
そんなことをするくらいならメインクラス側で明示的に登録・登録解除をやったほうが遥かに素直で分かりやすい。

1005 :デフォルトの名無しさん :2018/06/06(水) 00:26:33.34 ID:D75pa1n0a.net
質問いいですか?

1006 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1006
311 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★