18/04/24 19:15:00.82 QP8ofl3+M.net
>>193
おまえ出身言語化どこだよw
レヴェルが低すぎるぞ
201:デフォルトの名無しさん
18/04/24 20:32:35.47 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);
}
}
}
202:デフォルトの名無しさん
18/04/24 20:43:20.78 Ajvhvjmq0.net
>>199
>view.Rows.Add(str);
これじゃね
203:デフォルトの名無しさん
18/04/24 20:48:40.81 AF96232m0.net
>>200
view.Rows.Add(str);
だけだと正常に追加されるので、条件判定かループあたりに原因があると思っています。
フラグの位置がおかしいので以下に修正してもダメでした。
void AddToDataGrid(string[] strs)
{
foreach(string str in strs)
{
204: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); } } }
205:デフォルトの名無しさん
18/04/24 20:53:14.94 ZpST366k0.net
>>201
exist=trueでブレークポイントを置いてデバッグ実行すればわかるのでは?
206:デフォルトの名無しさん
18/04/24 20:54:05.17 UZOTbxqf0.net
そもそも exists = true; の行に到達してないというオチな気がする
207:デフォルトの名無しさん
18/04/24 20:55:27.49 UZOTbxqf0.net
>>202とかぶってしまった
>>202の方が指摘として親切だからそっちだけ読めばいいよ
208:デフォルトの名無しさん
18/04/24 21:00:23.35 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のときエラー
209:デフォルトの名無しさん
18/04/24 21:12:02.89 UZOTbxqf0.net
>>205はとってもそれっぽい
で、例外が握りつぶされるような場所でAddToDataGridが使われてるせいで気づけてないとか
こういう場合自分はtry{...}catch(Exception exception){throw;}で囲って
throwの直前にブレークポイントを置いたりしてるけどもっとうまい方法があったら誰か教えてちょ
210:デフォルトの名無しさん
18/04/24 21:26:25.44 UZOTbxqf0.net
>>205はそれっぽいと言ったけど
よく読むと
bool exists = false;//ここに移動
の部分は自分には理解できなかった
>>205の勘違い?
211:デフォルトの名無しさん
18/04/24 21:31:25.92 zd8+57fN0.net
全一
FXきた
212:デフォルトの名無しさん
18/04/24 21:36:01.31 PfeXTBpB0.net
>>207
フラグよく見ていないからとりあえず
if(str == Convert.ToString(view[0, i].Value))
{exists = true;break}
に変更で
213:デフォルトの名無しさん
18/04/24 21:38:44.73 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);
}
}
}
214:デフォルトの名無しさん
18/04/24 21:49:35.82 UZOTbxqf0.net
>>209
それなら納得
existsの宣言の位置を移動するとif(!exists)がスコープから外れちゃうもんね
>>210
>>205の方法で解決したんなら>>205の指摘が正しかったんでしょうよ
で、それに気づかなかったんならやっぱり例外が握りつぶされてたんでしょ
なら今後のためにも原因は分からずで片付けず例外の名前くらい確認しといたほうが良いと思うよ
215:デフォルトの名無しさん
18/04/25 15:12:14.28 lzwohvOS0.net
オブジェクト指向のプログラミングでは
変数じゃなくてプロパティにアクセスさせるべき
みたいな事をよく聞くんだけど
・プログラムの開始時にあるフラグ(true/false)を決めて、その後一切変更されることがない
・そのフラグには、コード中の様々な所からアクセスがある
って場合は、プロパティじゃなくてpublicな変数でフラグを定義してもいいんですか?
オブジェクト指向がよくわかってないせいか
プロパティを経由するのがどうしても遠回りというか
一つ余分な作業を挟んでるように感じてしまう・・・
216:デフォルトの名無しさん
18/04/25 15:30:51.28 eqJJBtIM0.net
変数は、公開しちゃダメ
その変数に、誰かが代入するかも知れないと考えると、
その変数に代入しているか、すべての場所を確かめないといけなくなるから、
プログラミングできなくなる
だから、プロパティで代入禁止に設定する
ただし、絶対に代入できない定数なら、公開してもよい
217:デフォルトの名無しさん
18/04/25 16:03:36.81 lzwohvOS0.net
>>213
後から書き換えられるのを確実に防止するために
プロパティを使うってことか なるほど
1人でコード書いてるからそういう発想が無かったけど
自分も後から絶対変な値を代入しない保証ないもんな
てことは、>>212の例だと
・引数付きのコンストラクタを使って、フラグの状態をインスタンス化
・そのフラグのプロパティはgetのみ設定
ってすればいいのか?
でもこれだと、そういうフラグを立てるタイミングがたくさんあったら
その分だけクラスを準備しとくことになると思うんだけど
そういうもんなの?
218:デフォルトの名無しさん
18/04/25 16:12:23.29 lzwohvOS0.net
あ、いや
クラスを複数準備する必要はないな
>>214の後半の話は無しで
219:デフォルトの名無しさん
18/04/25 16:13:38.42 VelEInRI0.net
>>212
212は読まなくていい
フィールドだってreadonly修飾子で代入禁止できるが、212はそんなことも分かってないから
プロパティがフィールドと違う点は大ざっぱに
* 派生クラスでオーバーライドできる
* プロパティから構造体を返すとコピーされる
の2点
この2つの特性が必要ない(または避けたい)場合にフィールドを選択してよい
判断できないならプロパティを選択する
220:デフォルトの名無しさん
18/04/25 16:15:28.83 ym3YbVtBd.net
IOption使っとけ
221:デフォルトの名無しさん
18/04/25 16:51:44.20 I8kFq/qw0.net
>>212
>>216はどこかのコピペじゃないならすごい分かりやすくて尊敬
一つだけ補足すると、↓のようなこともあるからクラスがpublicの場合は
現状だけでなく将来の変更の可能性も考えてフィールドかプロパティか判断したほうが良い
public フィールドをプロパティに変える (2016/05/16追記)
URLリンク(qiita.com)
あと>>213も善意で答えてるのは分かるんだけど
代入できるかどうかだけを判断基準にしてる時点でズレてて
定数の説明も参考にならない気がするから割と真面目に>>213は読まないほうが良いと思う
すまぬ>>213
222:デフォルトの名無しさん
18/04/25 17:43:22.74 lzwohvOS0.net
>>216
>* プロパティから構造体を返すとコピーされる
これが、全然分からんのだけど
classの代わりにstructを使った場合の話であってる?
今の自分が考えたところで、どうせちゃんと理解出来ない気もするけど
223:デフォルトの名無しさん
18/04/25 17:44:09.08 EO6K8yEq0.net
>>213は別に全く問題ないだろ。
>>212の要はカプセル化の質問に対して、>>213はカプセル化の話として一般論として答えただけじゃん。
それに対して>>216と>>218はここはC#のスレだからC#特有のreadonlyなフィールドあるよとか言語依存の情報
つけ足してるだけじゃん。
224:212
18/04/25 17:48:51.21 eqJJBtIM0.net
オブジェクト指向では、変数は公開しない。
公開できるのは、処理(関数)だけ
クラス内を開発する人と、そのクラスを使う人は、別の会社・人を想定しているから、
変数にアクセスさせたら、絶対にダメ
クラス内を作っている開発者は、後で付け加えられる処理を予想できないから。
クラス内を開発した後に、別人が変数にアクセスして、動きを変えたらバグる
異なる会社間での開発を可能にする、
オブジェクト指向の大原則・カプセル化
225:デフォルトの名無しさん
18/04/25 17:50:35.02 ClmIY1xNa.net
プロパティから構造体を返すとコピーってのは意味わかんないね
コピーされるのは右辺がプロパティだろうがフィルドだろうが同じだよw
>>212
少なくともパブリックなメンバーに関しては、あえてフィールドを使う理由はないって
理解でいいと思うよ。例外はアンマネージドコードの呼び出しで使う型を定義する場合ぐらい。
フォールドのプロパティーに対して優位な点は
(1) 軽量である
(2) 簡潔に書ける
このぐらいしかない。
(1)が重要なケースなんかまずない。
(2)については、古いC#はともかく今のC#は儒分簡潔に書けるようになって来てる。
226:デフォルトの名無しさん
18/04/25 17:59:38.62 ClmIY1xNa.net
>>221
カプセル化っていのは、触る必要がないもの、触られては困るものを隠すこと。
この質問にはほとんど関係ない話w
フィールドをプロパティにしようが、触る必要がない文脈で触られることを防げるわけじゃないw
せいぜいセッターで値が適切かどうかチェックできる程度
227:デフォルトの名無しさん
18/04/25 18:00:19.55 EO6K8yEq0.net
まぁ、むしろ>>212のカプセル化などの話に対して、考え方説明せずに
初心者にいきなり言語仕様の詳細を羅列する>>216の方が教え方としてははぁーー??だわww
228:デフォルトの名無しさん
18/04/25 18:04:12.14 EO6K8yEq0.net
>>223
質問者は
>オブジェクト指向のプログラミングでは
>変数じゃなくてプロパティにアクセスさせるべき
>みたいな事をよく聞くんだけど
で書いて始めてんじゃん。だから、カプセル化の説明した方がまずいいんじゃねぇか??
229:デフォルトの名無しさん
18/04/25 18:09:53.61 ClmIY1xNa.net
>>225
何が「だから」なのかよくわかりませんw
質問は外部に見せるデータをプロパティとして実装すべきかフィールドでもよいのか。
カプセル化(余分なものを外に見せるな)は何も関係ないってw
230:デフォルトの名無しさん
18/04/25 18:14:14.76 EO6K8yEq0.net
>>225
>オブジェクト指向のプログラミングでは
>変数じゃなくてプロパティにアクセスさせるべき
>みたいな事をよく聞くんだけど
を質問者が引き合いに出した以上、質問者はここからはしっかりわかってなくて、色々ごちゃ混ぜになってると
思われる。だから、そっから説明しなきゃ、おそらく習得できない。
231:デフォルトの名無しさん
18/04/25 18:17:11.69 lzwohvOS0.net
自分はオブジェクト指向じゃない言語をちょっとだけやってたんだけど
そういう言語では、コードの最初の方に
public bool JudgFlag = true
って1行書いて、それにどこからでもアクセスするみたいな感じだと思うんだ
(全部独学だからこれも正解なのか知らんけど)
でも、オブジェクト指向ではこれやったらダメなんだよね?
ってのが知りたい
後、俺マジで初心者だから
質問文で聞きたいことが正確に表現できてる保証ないwすまん
232:デフォルトの名無しさん
18/04/25 18:20:06.19 EO6K8yEq0.net
>>226だった・・
233:デフォルトの名無しさん
18/04/25 18:22:03.13 ClmIY1xNa.net
>>228
別にダメじゃないよw
何度も言うけど、あえてフィールドを使う理由があんまりないだけw
フィールドをプロパティにしたらバグが減らせるとか可読性が上がるとか、
ほとんどの場合そんなことはない
234:212
18/04/25 18:26:03.04 eqJJBtIM0.net
>変数じゃなくてプロパティにアクセスさせるべき
これが異なる会社間での開発を可能にする、
オブジェクト指向の大原則・カプセル化
どの教科書にも書いてある
その理由は、クラス内を開発している会社・人と、
そのクラスを使う会社・人は、異なっているから
オブジェクト指向では、これらの2つの立場からの見方が大切。
君はどちらの開発者ですか?
クラスを作る方・使う方?
クラス内を開発しているのは、過去だから、
そこから未来の、クラスを使う人の動きを予測できない
だから、変数に直接触らせたらダメ。
そこまで予測して、クラス内を作れないから
235:デフォルトの名無しさん
18/04/25 18:31:21.63 lzwohvOS0.net
>>230
そうなのか・・・
でも、解説サイト見てると
「ダメ」的な雰囲気で書いてあるとこばっかりじゃない?
俺の理解が間違ってるのかもしれないが
俺的には現状>>230に書いてある事が正解に思えちゃうんだよな
俺が1人で小規模な開発してるだけだから
いまいちオブジェクト指向のメリットを感じる場面が少ないのかな
236:212
18/04/25 18:31:24.51 eqJJBtIM0.net
>>228
>public bool JudgFlag = true
変数を公開したら、ダメ。
カプセル化にならない
理由は、
>>213
に書いてある
237:デフォルトの名無しさん
18/04/25 18:36:43.91 Y4/R4Zt40.net
>俺が1人で小規模な開発してるだけだから
>いまいちオブジェクト指向のメリットを感じる場面が少ないのかな
まあこれだな
>>213の言ってる事は、OOPの「思想」としては間違いなく正しい
但し、単独での小規模開発という状況を前提にするなら「現実的なメリット」は無いに等しい
238:デフォルトの名無しさん
18/04/25 18:37:15.31 EO6K8yEq0.net
>>228
うん。君のケースだとダメだね。それだと、クラスの内部状態JudgFlagが誰でも自由に書き換えられちゃう。
だから、まずは君は基本、>>221のようなC#とか言語関係ない一般的なカプセル化について勉強しよう。
で、君のケースだと自分で書いてるが
>・引数付きのコンストラクタを使って、フラグの状態をインスタンス化
>・そのフラグのプロパティはgetのみ設定
ってやるか、
getプロパティ書くの嫌なら>>216が書いたようにC#にはreadonlyフィールドというのがあるのでそれで代用できる。
239:デフォルトの名無しさん
18/04/25 18:47:02.51 yqUO4I2d0.net
おまえら変数は公開しちゃだめだけど、プロパティやgetter/setterなら公開してもいいって思っとるやろw
240:デフォルトの名無しさん
18/04/25 18:48:12.94 ClmIY1xNa.net
>>232
どこの世界でも教条的(思い込みが激しいともいう)人はいるからねw
外部から取得/設定してもらう必要がある値をフィールドではなくプロパティにしたからって
ヒューマンエラーを減らす効果なんかないのは事実
ただ機能がより少ないフィールドをあえて使うことないでしょってだけの話
オブジェクトの公開するデータは必ずしもいつも変数に入っているわけではなく、
何らかの処理の結果を返す場合もあって、その場合はプロパティになるから、
だったら全部プロパティの方が統一感があるという考え方はあるかもしれない
241:デフォルトの名無しさん
18/04/25 18:49:19.77 s99z6Kr1M.net
>>234
嘘おしえるなよ
242:デフォルトの名無しさん
18/04/25 19:04:09.02 lzwohvOS0.net
まとめると
「1人で小規模なコード書いてるだけなら
public bool JudgFlag = true
を書き換えたらダメなことぐらい自明だから、フィールドに1行書いて終わりでいい
若干雑だけど楽」
って考え方と
「いや、自分で決めたルールを自分で忘れることもあるから
ちゃんとプロパティにして触れない様にすべき
多少面倒でもコストを払うメリットがある」
って考えの対立なのかな
get;set;とか全く意味がわからなかった頃の嫌なイメージのせいで
プロパティを書く事が、「面倒・難しい」って体が拒否反応しちゃうんだよね
自動プロパティとか実装されてる今の時代に
何言ってんだって笑われそうだけど
まあ、でも色々モヤモヤしてた所がスッキリしました
ありがとう
243:デフォルトの名無しさん
18/04/25 19:24:43.78 q/XXvHKQd.net
>>237
処理の結果を返すならメソッドにしろよ
244:デフォルトの名無しさん
18/04/25 20:11:47.21 ClmIY1xNa.net
>>240
具体例
URLリンク(msdn.microsoft.com)
245:デフォルトの名無しさん
18/04/25 20:30:49.45 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 も落ちてしまいます。
246:デフォルトの名無しさん
18/04/25 20:44:39.30 3+niHUT+0.net
【マイトLーヤとPS4】 FFとDQの最新作、VR開発は危険、プレーヤーの日常感覚を損なうおそれ
スレリンク(liveplus板)
247:デフォルトの名無しさん
18/04/25 21:00:51.62 q/XXvHKQd.net
>>241
それは右座標を計算して返しただけであって処理を実行するのとは違う
面倒だからここ読んで
URLリンク(msdn.microsoft.com)(v=vs.100).aspx
248:デフォルトの名無しさん
18/04/25 21:06:28.54 XHhjs7vi0.net
>>242
Form2にプロパティを追加
Form1の該当メソッド内でForm2を宣言&インスタンス化してプロパティにパラメータをセット
Show(Dialog)メソッドで呼び出し
249:デフォルトの名無しさん
18/04/25 21:09:48.37 ckNZ5jJB0.net
メッセージキューを勉強中なんですが、
MSMQとMessageQueueクラスって何が違うんでしょうか?
250:デフォルトの名無しさん
18/04/25 21:17:11.34 XWOG1WtT0.net
>>245
ありがとうございます
この場合、もう二度と Form1 を使わないという状況であれば、Form2 の ShowDialog を
呼び出す前に this.Hide(); で隠しておいて、戻ってきたら this.Dispose(); でしょうか
Hide() だけで処理を抜けるコードを書き忘れて、いつまでもプログラムが残り続けるバグを
やったので、二度と戻ってこないフォームは Dispose() したいのです
251:デフォルトの名無しさん
18/04/25 21:18:56.58 XWOG1WtT0.net
今思ったのですが、そういう使い方だとむしろ Form2 を非表示で実行しておいて、
その中で Form1 を呼び出すべき?
で、Form1 を抜けたら this.Show(); とか
252:デフォルトの名無しさん
18/04/25 21:20:04.33 ClmIY1xNa.net
>>244
頭悪そうだけど、単にバッキングフィールドの値をそのまま返すのではないケースを
「何らかの処理の結果を返す」と言っている。
処理 = 高価な処理ではない。
重かろうが単なる足し算だろうが処理は処理だ
253:デフォルトの名無しさん
18/04/25 22:11:10.02 jHFwiJ5Yd.net
Applicationに共通のパラメータ持って、Form1とForm2で共有しちゃダメなんか
254:デフォルトの名無しさん
18/04/25 22:17:09.52 fPsUNFh1a.net
使い方次第じゃないかなとは思う
双方で同時に書き換えたりするならやめたほうがいい
それ以前にタダクソダサイと思う
255:デフォルトの名無しさん
18/04/25 22:41:48.50 TqrgnB+10.net
シングルトンの出番だ
256:デフォルトの名無しさん
18/04/25 23:10:10.54 Kx9WW2Xx0.net
>>217
これやろ
257:デフォルトの名無しさん
18/04/25 23:38:15.43 8cfef6Y0a.net
もう親フォーム作れば?
258:デフォルトの名無しさん
18/04/26 14:36:05.39 ooZK6FZP0.net
自作ツールをソースコード付きで公開したいのですが、
パブリックドメインソフトにするのが最善ですか?
259:デフォルトの名無しさん
18/04/26 15:37:00.65 s8t3AsxEM.net
.netで簡単に実現できる機能(メールや圧縮、画像処理等)をネイティブCのアプリで利用したいです。VC++6.0の(C++ではなく)C言語で作るコンソールアプリでです。
C#で作っでdllを作って、C++のdllでそれをコールする関数を公開すれば実現可能ですが、もっといいやり方ないでしょうか?
260:デフォルトの名無しさん
18/04/26 15:39:07.13 B934JXdmM.net
>>255
今のOSSはMITライセンスでGithubに晒すのが主流
261:デフォルトの名無しさん
18/04/26 16:34:09.89 +C2ovlRwM.net
>>256
つ C++/CLI
262:デフォルトの名無しさん
18/04/26 17:05:43.31 B934JXdmM.net
>>256
別プロセスにする
Win10のアプリなら WinRT のコンポーネントにすれば言語をまたがって普通に使える
263:デフォルトの名無しさん
18/04/26 19:19:32.70 leQJqI/Q0.net
>>256
標準入出力のリダイレクト。
古典的でダサいけどね
264:241
18/04/26 20:39:08.13 8i3JVbEw0.net
皆様ありがとうございました
決まりきった定番の書き方はない、と理解すれば良さそうですね
自分で色々試してみます
265:デフォルトの名無しさん
18/04/26 21:03:55.12 8i3JVbEw0.net
今度はインデクサについて教えてください
URLリンク(ideone.com)
例として上記のようなコードを書いてみました
これで、インデクサを使って例えば anml["whale"] とすれば1が返ってくるような、
そういうものを作りたいと思います
(classified, lifeの各プロパティはユニークではなく、specificのみユニークとします)
本を紐解きながら書こうとしたのですが、animalsクラスの中ではリストになっていないので
書く場所はなさそうです。でもMainメソッドでは利用したい側なので、ここに実装することも
できない気がします。
多分インデクサの考え方そのものがわかっていません。どなたか教えていただけると
嬉しいです。
266:デフォルトの名無しさん
18/04/26 21:18:02.97 i4ujFDqn0.net
ListじゃなくてDictionaryを使えばOK
267:デフォルトの名無しさん
18/04/26 21:54:22.87 IFgymZMf0.net
anml.FindIndex(_ => _.specific == "whale")でよくね?
268:デフォルトの名無しさん
18/04/27 03:52:18.55 3sBZO5RI0.net
インデクサてのは自作のクラスにつけるプロパティみたいなものだから、List<animals>を内蔵するクラス作って
public int this[string p]{
get{ /* ここに検索して結果を返すコード書く */ }
}
でおkなんじゃねか?知らんけど。
269:デフォルトの名無しさん
18/04/27 07:42:26.78 vWqu6ayt0.net
>>263
すいません、理解のレベルが低いので、具体的にどう実装すればよいのかわかりませんでした
var anml = new Dictionary<animals, string>;
としてディクショナリは実装できたとして、要素追加の際 Add メソッドをどう書くのか、理解が
追いついていないようです
>>264
この書き方で、求めている操作は実現できそうです
ラムダ式の理解が怪しいのは勉強するとして、毎回これを書くと面倒&間違えそうなのですが、
これは「十分に簡潔な書き方」なのか、それとも「メソッド等でさらに簡潔に書ける」のか、どちら
でしょうか。
>>265
この場合、各プロパティにアクセスする際は anml[i].specific とかではなくて anml(i, specific)等
メソッドを介してアクセスすることになるのでしょうか?
270:デフォルトの名無しさん
18/04/27 07:59:23.04 Ek6IpJbsa.net
>>265は良くないよ
インデクサはループ内で使用されることを想定しておかないといけない
毎回線形検索が走るのは非効率すぎる
271:デフォルトの名無しさん
18/04/27 08:18:37.17 3sBZO5RI0.net
番号が欲しいのかanimalsオブジェクトが欲しいのか
272:デフォルトの名無しさん
18/04/27 12:24:44.14 /0qPzcyMr.net
>>267
今回の用途では速度は重要でなく、またそもそも実現方法がわからなかったので、アルゴリズムはまだまだ先の話ですね
>>268
今回欲しいのは数字です
273:デフォルトの名無しさん
18/04/27 23:13:48.06 9YiDAi7f0.net
Index番号が欲しいなら>>264で十分じゃないか?
見つからなかったとき例外吐くらしいから気をつけろい
274:デフォルトの名無しさん
18/04/27 23:15:15.73 9YiDAi7f0.net
まちがえた。例外じゃなくて-1だ。すんまそ。回線で首吊ってくる
275:デフォルトの名無しさん
18/04/28 01:50:07.49 E8vnEfND0.net
>>264
アンダーバーはやめとけ
276:デフォルトの名無しさん
18/04/28 01:50:20.46 fiFvLr6Y0.net
XAMLファイルからボタンを削除した場合、CSコードの方に呼び出されることのないコールバック関数の宣言が残ってしまます
こういうのを効率よく削除する方法ってないのでしょうか?
277:デフォルトの名無しさん
18/04/28 01:54:51.50 E8vnEfND0.net
>>273
WPF?
278:デフォルトの名無しさん
18/04/28 02:32:39.82 fiFvLr6Y0.net
>>274
Xamarin.Formsで使っています
279:デフォルトの名無しさん
18/04/28 07:22:01.22 bL+b5OsrM.net
>>273
XML解析とリフレクション
280:デフォルトの名無しさん
18/04/28 12:46:33.34 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データを受け取れることは確認済みです。
ただ、ユーザーの操作で行を何行追加するかもわからず、あらかじめ想定する
最大数の引数を列挙するのも現実的ではありません。
すべてのフォームデータを一挙に受け取って、
サーバー内部のロジックで処理する方法はないでしょうか。
281:デフォルトの名無しさん
18/04/28 13:53:59.42 Jn+S73+O0.net
>>277
namaに添字をつければList<T>でバインディングできるはず
URLリンク(qiita.com)
282:デフォルトの名無しさん
18/04/28 14:50:29.57 X/1aPQ6Ma.net
どうせJavaScript書いてるんならJavaScript側でJSONの配列に纏めてからAJAXでポストするのもアリ
283:デフォルトの名無しさん
18/04/28 21:58:22.96 4vnB69wL0.net
[[[ ][ ]]]\[[]] [[[]]]],[[[ [][] ]
284:デフォルトの名無しさん
18/04/28 22:36:40.95 vp8gWtwG0.net
Entity FrameworkでDBへのselectとかのリトライしたい場合ってどのようにすべきでしょうか
一時的なエラーだったりしたらもう一回トライとかしたいのです
例外全キャッチするのも無駄なのかなぁと思いまして
285:デフォルトの名無しさん
18/04/28 23:02:28.71 8LDPRSMfM.net
普通のRDBなら一時的なエラーなんか滅多にないだろ
400でいいよそんなもん
286:デフォルトの名無しさん
18/04/28 23:05:27.66 yGhXA9la0.net
Azure相手だと普通にあるで
287:デフォルトの名無しさん
18/04/28 23:08:01.89 E8vnEfND0.net
>>281
DbExecutionStrategy
288:デフォルトの名無しさん
18/04/28 23:33:01.91 vp8gWtwG0.net
>>284
ありがとうございます
試してみます
289:デフォルトの名無しさん
18/04/29 20:34:09.03 My7UiDyw0.net
[[[ []]]]*[[ [][] ][] } } {} [[[
290:デフォルトの名無しさん
18/05/02 19:00:22.89 As5kU4Fr0.net
とりあえず、連休ぐらいゆっくりな
オマエラ
291:デフォルトの名無しさん
18/05/03 10:44:28.97 9ar3mEaia.net
連休は機械学習でずっと計算させる予定
人間は休む
292:デフォルトの名無しさん
18/05/03 13:02:24.11 Nqnp2049M.net
人間はILコードを覚えてハンドアセンブル出きるようになるべき
293:デフォルトの名無しさん
18/05/03 13:26:57.92 YEWKmWCr0.net
winformの左辺や上辺をドラッグするとフォームのサイズが変わらずにフォームが移動してしまいますが
サイズを変更するように設定するプロパティなどはありますでしょうか
コードを書く必要がありますか?
294:デフォルトの名無しさん
18/05/03 14:32:14.37 hvfEvXXP0.net
>>289
古い脳の感覚でいえば、IL なんてハードウェアの裏づけのない、空想上の約束にしか過ぎないので、覚える気が起きない
x86-64 でおなかいっぱい
295:デフォルトの名無しさん
18/05/03 14:41:33.60 Nqnp2049M.net
>>291
情報処理試験のCASLとかも?
296:デフォルトの名無しさん
18/05/03 14:46:31.58 hvfEvXXP0.net
>>292
CASL くらいはやったよ、8080、z
297:80/6809/80x86/z8000/r3000、まだ若かったからどんどん覚えることができたんだ… でも、もうおなかいっぱいだ…
298:デフォルトの名無しさん
18/05/03 14:47:30.87 1IvMgmqBM.net
次元が違うだろ
ILは高級なオブジェクト指向言語
そもそも機械語に似せることを意図されていない
299:デフォルトの名無しさん
18/05/03 14:51:41.82 hvfEvXXP0.net
>>294
ハードウェアマシン語とプログラム言語との間に、なぜ仮想マシンと仮想的な言語(IL/JVM)が採用されるようになったのか?そこが今でも判然としないのです…
300:デフォルトの名無しさん
18/05/03 15:42:16.53 +UDEH62l0.net
>>295
ドライバは何故存在するの?つってる様なもんだぞそれ
301:デフォルトの名無しさん
18/05/03 15:45:53.15 hvfEvXXP0.net
>>296
いえいえ、階層性を全否定するわけではありません
「仮想マシンと中間コード」の必要性を問うているのです…
302:デフォルトの名無しさん
18/05/03 16:06:28.64 +UDEH62l0.net
仮想マシンに焦点を絞るなら、ハードウェアの差異を吸収する為では
(.netはJavaVMほどあちこちに移植されてないというだけで)
ILに関して言えば、複数の言語(C#、VB.net、F#、他)を共通のフレームワーク上で動かせる様にする為
303:デフォルトの名無しさん
18/05/03 16:13:17.79 ioUmuI6x0.net
>>298
それならハードウェアや言語の統一を目指したほうが建設的なのでは?
304:デフォルトの名無しさん
18/05/03 16:19:16.65 +UDEH62l0.net
>>299
不可能だろう
収斂進化により表面上似た様な機能を搭載する事はあっても、内部構造は特許なり権利なり絡んで来るから同じに出来ないし
JavaScript+CSS3ですらブラウザベンダ間で足並み揃えられないのに、言語の統一なんて出来る訳が無い
305:デフォルトの名無しさん
18/05/03 16:37:31.89 hvfEvXXP0.net
現状、中間言語側でも少なくとも JVM/.net framework にわかれちゃっているからねえ…
306:デフォルトの名無しさん
18/05/03 18:59:07.03 OyWVOyw+0.net
>>301
LLVMの中間コードをご存知でない?
307:デフォルトの名無しさん
18/05/03 19:06:23.30 hvfEvXXP0.net
>>302
LLVM はコンパイラの中で完結しているのではないかな?
308:デフォルトの名無しさん
18/05/03 19:12:34.62 R63QgqLH0.net
?
309:デフォルトの名無しさん
18/05/03 19:15:49.37 OyWVOyw+0.net
>>303
コンパイラ開発者はとりあえずLLVM-IRに変換すればいいし最終段で機械語に変換するか直接実行するか他の言語のコードに変換するかは自由
というか最初と最後だけ作ればいいわけだから寧ろLLVM-IRが中心
310:デフォルトの名無しさん
18/05/03 19:22:47.84 hvfEvXXP0.net
>>305
うん、それはよくわかる
すべての「構造化」を全否定するわけではないんだよ
311:デフォルトの名無しさん
18/05/03 19:24:37.99 R63QgqLH0.net
すまん、途中から意味分からん
312:デフォルトの名無しさん
18/05/03 19:27:41.50 kS9rU1V5a.net
.netは仮想マシンなんかつかってないじゃん
313:デフォルトの名無しさん
18/05/03 19:42:37.77 hvfEvXXP0.net
>>308
URLリンク(ja.wikipedia.org)(%E5%85%B1%E9%80%9A%E8%A8%80%E8%AA%9E%E5%9F%BA%E7%9B%A4)
仮想マシン VES は定義されているようだ
314:デフォルトの名無しさん
18/05/03 19:45:56.40 Vq5AVdhm0.net
おい!初心者の内容じゃねーぞw
315:デフォルトの名無しさん
18/05/03 20:04:38.77 kS9rU1V5a.net
>>309
VESは最終段階のコンパイラだよ
316:デフォルトの名無しさん
18/05/03 20:12:05.92 OyWVOyw+0.net
JITコンパイルはVMとしては認めない派閥が存在することは認める
317:デフォルトの名無しさん
18/05/03 20:31:23.35 GKu15pasa.net
URLリンク(www.slideshare.net)
このスライドの67枚目の「良い例」のコードってこれで本当にいいの?
MSDNのParallel.Forの解説には
---
318: localFinally デリゲートはスレッドごとに 1 回呼び出され、各スレッドのローカル状態に対して最後の操作を行います。 このデリゲートは、同時に複数のスレッドで呼び出される可能性があります。したがって、共有変数へのアクセスを同期する必要があります。 --- と書いてあるから、countはアトミックに操作しないとまずい気がするんだけど https://msdn.microsoft.com/ja-jp/library/dd783299(v=vs.100).aspx
319:デフォルトの名無しさん
18/05/03 21:13:05.22 L6Rknns90.net
>>313
MSDNの使用例にも
localState => Interlocked.Add(ref result, localState)
とあるしそれで正しいと思うよ
320:デフォルトの名無しさん
18/05/03 21:46:41.74 GKu15pasa.net
>>314
いやだから、MSDNのサンプル通りにするなら、>>313の
localCount => count += localCount
は、
localCount => Interlocked.Add(ref count, localCount)
でないとまずいと思うんですが
321:デフォルトの名無しさん
18/05/03 21:48:43.65 ygisZEFQM.net
そうだねだからどうしたの
資料公開してる本人に言えばいいんじゃないの
322:デフォルトの名無しさん
18/05/03 22:02:53.69 nzAwdXFB0.net
大して変わんねーよ
そんなに処理分けたきゃ
別exeにしてキックしろよ
後はできるならOSがうまくやるし
OSがうまくできなかったらそりゃできないんだろうよw
323:デフォルトの名無しさん
18/05/03 22:05:27.65 WY9OnNQR0.net
どうした発作か
324:デフォルトの名無しさん
18/05/03 23:06:32.43 L6Rknns90.net
>>315
いや、>>313の言う通りと言ったつもりなんだが・・・ふらっと怖いな
325:デフォルトの名無しさん
18/05/03 23:38:41.22 aADwc6210.net
おバカwebを鵜呑みにしない有望な>>313なんやからもう少し優しくレスしてやれよw
326:デフォルトの名無しさん
18/05/04 00:16:38.85 Xm9CVOioa.net
この例だとForよりAggregate使ったほうがいいな
327:デフォルトの名無しさん
18/05/04 00:37:22.14 pvqh60Bra.net
>>319
自分の日本語に疑問を持たない君の方が怖いよ
「これ(A)」でいいのか、Bじゃないのかって質問に「それ」で正しいと答えたら
質問した方は普通は正しいのは「これ」の方だと理解する
328:デフォルトの名無しさん
18/05/04 02:08:40.41 DbHU5BaK0.net
C♯でJavaScriptで生成されてるチャットサイトからコメントビューアを作りたいのですが、JavaScriptが生成したHTMLを取得するのに適したライブラリってどれでしょうか?
Formアプリで作る予定ですが
webBrowserコントロールが一番手軽でしょうか?
329:デフォルトの名無しさん
18/05/04 02:10:39.64 DbHU5BaK0.net
>>323
追記
使う.Net frameworkは4.6.1です
Nugetで公開されてるライブラリ等でも問題ありません
330:デフォルトの名無しさん
18/05/04 02:53:44.45 JYHlDWX6M.net
javascriptで生成といっても生成元になるデータを何処かでリクエストしてる筈
そっちを解析して直接的にHttpClientでgetしたほうがええよ
331:デフォルトの名無しさん
18/05/04 04:15:13.73 DbHU5BaK0.net
ありがとうございます
単純にセッションが必要っぽそうだったのでHttpClientでもいけそうです
使い方調べ直します
332:デフォルトの名無しさん
18/05/04 16:58:55.69 wDfbuSiA0.net
おバカwebと言えば↓みたいに日本語と英語で全く逆のことが書いてあったりする
基本的にwebに書いてあることは疑ってかかったほうが良さそうね
日本語
URLリンク(docs.microsoft.com)
> 比較のために文字列を正規化する場合は、String.ToUpperInvariant メソッドではなく String.ToLowerInvariant メソッドを使用します。
英語
URLリンク(docs.microsoft.com)
> Use the String.ToUpperInvariant method instead of the String.ToLowerInvariant method when you normalize strings for comparison.
(グーグル翻訳) 比較のために文字列を正規化するときは、String.ToLowerInvariantメソッドの代わりにString.ToUpperInvariantメソッドを使用します。
333:デフォルトの名無しさん
18/05/04 17:22:00.73 0gwAiFk4d.net
>>327
X:webに書いてあることは
○:日本語訳は
334:デフォルトの名無しさん
18/05/04 19:43:22.77 RYlEGIXb0.net
グラフィックの扱いについて教えてください
panelに複数の画像イメージを貼り付けたいと思います
(トランプのカードを任意の枚数置くような感じです)
WidthとHeightをpanelのサイズに合わせて、Bitmapオブジェクトを
作ってそこに必要な画像を貼り付けて、最後にPaintイベントでその
ビットマップを Graphics.DrawImage で表示すれば良さそうだ、という
認識です
問題はBitmapオブジェクトに画像を貼り付けることで、メソッドを
調べても、Bitmapオブジェクトの任意の場所に任意のイメージを
貼り付けるものはなさそうです
そもそも用意した画像は Image.FromFile で準備しているのですが、
Imageオブジェクトを貼り付けられるのは Graphics.DrawImage
メソッドになるので、そもそも Bitmap オブジェクトを用意すると
いう発想が間違っているような気もします
多分いろいろ間違って認識しているので、どこから考え直せばよいか
教えていただけると嬉しいです
335:デフォルトの名無しさん
18/05/04 19:54:32.04 EvkA5vHv0.net
>>329
ベースの画像のいくつかの任意の位置に画像を貼り付ける描画ならそれで間違っていないけど
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
どこを勘違いして悩んでいるのかいまいちわからない
とりあえずBitmap オブジェクトはImageオブジェクトの一種
他にMetaFileとかあるから
そしてGraphics.DrawImageメソッドを使って貼り付けてもベースのBitmap オブジェクトはBitmap オブジェクトのまま
336:デフォルトの名無しさん
18/05/04 20:25:52.55 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イベントハンドラに描画処理を全部書くのは変な感じがして、
描画したい画像を用意するのと、実際に描画するのは別の処理ではないかと思っている
次第です
337:デフォルトの名無しさん
18/05/04 20:30:54.11 Ad2tmUBO0.net
描画したい画像を用意するのと、それを描画するのは当然別の処理だ。
でもアニメーションさせたいとか画像の変更を即座に描画に反映させたいとかなら、用意した足で再描画させるしかないだろ?
338:デフォルトの名無しさん
18/05/04 20:36:30.50 EvkA5vHv0.net
>>331
何でイベントでやるのか知らないけど複数の描画を同時にやるメソッドはなかったと思うよ
URLリンク(dobon.net)
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);
339:デフォルトの名無しさん
18/05/04 20:38:50.67 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);
だった
340:デフォルトの名無しさん
18/05/04 20:49:55.24 RYlEGIXb0.net
>>332
アニメーションさせたいとか、そういう意図はないです
単に、描画したい画像を用意するのに、Bitmapオブジェクトにさらに画像を
貼り付ける方法がわからなくて悩んでいます
>>333
イベントでやってるのは、単に参考にしたサイトで「Paintイベントハンドラで
処理する」と書いてあったので、それを鵜呑みにしただけです
URLリンク(dobon.net)
これを見て気づきましたが、そもそもパネルに直接描こうとするのが間違いで、
パネルにPictureBoxを貼り付けた上でそこに置けば良いのかな?
341:デフォルトの名無しさん
18/05/04 20:54:32.05 EvkA5vHv0.net
>>335
どっちでも同じだと思う
Graphics g = Graphics.FromImage(panel1.BackGroundImage);
でやれば直接パネルに書き込めるし
ただ大きい画像を表示して画像の表示位置をスクロールさせたいのならパネルの上にPictureBoxが基本
とりあえず書いて動かしてみたら
342:デフォルトの名無しさん
18/05/04 21:05:17.61 aP3h8uSia.net
>>335
実現したい要件だけを明確に書いた方がいいと思うよw
そこが明確じゃないのに「俺が考えた実装方法」ばっかり詳細に書くから
答える方も何を返答していいのか分からないw
343:デフォルトの名無しさん
18/05/04 21:11:39.38 RYlEGIXb0.net
>>337
実現したいことは、「任意の画像を任意の場所に配置したイメージを、panelに描画したい」です
これは明確で、それを実装するための方法でどう悩んでいるかが正しく伝わらないと、答える方も
こちらのレベルがわからなくて困るかと思ってました
実現したいことがちゃんと伝わっていませんでしたか
それ以前の問題でしたね。。。
344:デフォルトの名無しさん
18/05/04 21:43:04.80 pJ6Zbbxdp.net
ファイル読んでバインドするだけちゃうのか?
345:デフォルトの名無しさん
18/05/04 22:52:54.89 IMcj9GIN0.net
>>338
dobon.netにあるじゃん
346:デフォルトの名無しさん
18/05/05 01:53:47.84 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が表示される
347:デフォルトの名無しさん
18/05/05 01:54:36.93 US1Viqbq0.net
あ、パネルにPictureBox貼ってる前提ね
348:デフォルトの名無しさん
18/05/05 05:38:36.94 LRJiKh0v0.net
>>341
ありがとうございます
思っていることが問題なく実現できました
できるようになってみると、一体何を悩んでいたのか、自分でもわからなくなってしまいました
多分、DrawImage で書き込む先がVRAMだと思い込んでいたのでしょう
349:デフォルトの名無しさん
18/05/06 01:21:02.23 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))
{
// 処理に入らない
}
}
このコードでフォームを右上にドラッグして拡大した場合に処理に入らないのですがどこがおかしいでしょうか
350:デフォルトの名無しさん
18/05/06 01:31:51.93 HfMj07lt0.net
右上にってことは事後の方が top の値が小さくなってるからじゃないの?
351:デフォルトの名無しさん
18/05/06 01:32:20.44 HfMj07lt0.net
ああ、そう書いてあるのか。失礼。
352:デフォルトの名無しさん
18/05/06 01:40:54.74 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";
}
}
これで動いた
353:デフォルトの名無しさん
18/05/06 01:45:28.35 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;
}
}
354:デフォルトの名無しさん
18/05/06 02:05:39.13 dl2mQyCb0.net
>>347
ご回答ありがとうございます
イベントは有効です
左や上や左上への拡大縮小ドラッグは正常なのですが左下や右上がおかしいです
提供していただいたコードを試したのですが、何故かは分からないのですが rightEdge < this.Right がfalseになっています
もう少し調べてみます
355:デフォルトの名無しさん
18/05/06 02:22:41.56 xovvhFEya.net
申し訳ないけど、問題を再現できるそのまんまのコードを提示していない時点で
確実に原因はあなたの勘違いにあると断言できる
356:デフォルトの名無しさん
18/05/06 05:58:39.10 CBGkbUql0.net
Listを値渡しすべき所が参照渡しになってたせいで
くっそハマったんだけど
こういうのって、C#の解説本1冊読めば
注意しろって書いてあるもんなの?
参照渡し云々って単語はかろうじて知ってて
↓のサイトをたまたま見つけて、偶然解決出来たけど
URLリンク(webbibouroku.com)
エラーや例外にならないバグが怖すぎる・・・
357:デフォルトの名無しさん
18/05/06 06:08:47.32 994JP5I00.net
そんなものここで聞けば3秒で解決するし
358:デフォルトの名無しさん
18/05/06 08:39:03.59 j24ysXtO0.net
c#って物体X(?)は全部参照渡しになるよね
359:デフォルトの名無しさん
18/05/06 08:48:15.69 6gN3mvyQ0.net
>>351
それ値渡しじゃない
360:デフォルトの名無しさん
18/05/06 09:09:18.32 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 は内部処理でダブルバッファリングを行っているとも見ました
まだなにかできることはあるのでしょうか
361:デフォルトの名無しさん
18/05/06 09:36:21.79 9GXSG5IC0.net
書いてませんでしたが、bg_brushは背景色の、fg_brushは前景色のブラシです
Brush bg_brush = new SolidBrush(SystemColors.Control);
Brush fg_brush = new SolidBrush(Color.Black);
で定義しています
362:デフォルトの名無しさん
18/05/06 09:54:38.21 RTzVBomo0.net
canvasはどんな風に設定しているの?
363:デフォルトの名無しさん
18/05/06 10:06:54.11 9GXSG5IC0.net
canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height);
として定義しています
364:デフォルトの名無しさん
18/05/06 10:36:38.03 RTzVBomo0.net
DoubleBufferdとか触らずともこっちではちらつかないけどなあ
ちらつくってのはどういうふうに見えることを言ってるの?
panelやpictureBoxのサイズやradiusの値もさらしてみては?
365:デフォルトの名無しさん
18/05/06 10:50:11.40 IbwjU9Qn0.net
どこで何やってんの不明瞭だから当てずっぽうだが
下手に自前描画してるチラつくなら大体OnPaintBackgroundのせい
366:デフォルトの名無しさん
18/05/06 10:55:03.54 9GXSG5IC0.net
URLリンク(ideone.com)
これが全コードです
空のWindowsフォームアプリケーションで生成されたフォームに、ボタンとパネル、
PictureBoxを配置しただけの状態です
パネルとPictureBoxは、DockをFillにしてウィンドウサイズに合わせてあります
367:デフォルトの名無しさん
18/05/06 10:56:51.16 9GXSG5IC0.net
これで、timer1のIntervalを50msにすると、はっきり分かる程度にちらつきます
368:デフォルトの名無しさん
18/05/06 13:14:55.43 gzoDeGmX0.net
垂直同期しろ。
369:デフォルトの名無しさん
18/05/06 13:31:21.62 o/aLqSU5a.net
>>362 やってみたけとちらついたりはしないねw ただフレームレートが低いから滑らかに見えないだけ
371:デフォルトの名無しさん
18/05/06 15:35:36.42 MOQB+J+Ha.net
解決のヒントにはならないだろうけど
ちらつきって何かということについて
すでに表示されてるものが一瞬透明に見えるから表示がおかしく見えること
たとえば半径100の円が横に5ドット動くとする
普通に考えたらほとんどの円に背景は隠れたままだけど何も考えないで適当にやると
背景が一瞬見えてしまう
一度円を消してなにもない状態を表示して
次に円を書いてるから問題がある
何もない状態を表示しなければいい
372:デフォルトの名無しさん
18/05/06 18:19:28.93 9GXSG5IC0.net
>>364
環境の問題ですか・・・
一応ディスプレイのリフレッシュレートは60Hz、タイマー設定が50msだと20Hzあれば
十分ですので、あまり関係ない気がするのですが
でも私の環境でしか出ないのであれば、環境依存かもしれません
>>365
これを避けるためにダブルバッファリングをするわけですし、書き換えた後のビットマップを
PictureBoxに貼り付けるようにして、描画途中では貼っていません
373:デフォルトの名無しさん
18/05/06 18:22:22.08 gzoDeGmX0.net
だからハードの違いだって言ってんだろw
374:デフォルトの名無しさん
18/05/06 18:25:15.44 w10wIaHya.net
>>366
いやいや何でそういう話になるのw
たぶん環境の問題なんかじゃなく、あなたが低フレームレートに起因する
カクカクした動きをちらつきだと誤認してるだけだと思うよw
375:デフォルトの名無しさん
18/05/06 18:30:35.56 gzoDeGmX0.net
アホばっかり。
376:デフォルトの名無しさん
18/05/06 18:55:10.27 9GXSG5IC0.net
>>368
カクカクした動きとチラつきを同一視しているわけではありません
>>365
が書いたように、今回の例だと黒い円が一瞬消えているような感じがします
移動量の x += 10; をもっと少なくすれば目立たなくなりますが、それでも
なんとなく嫌な感じがします
でも言葉で説明するのは難しいですね
低フレームレートの認識を誤解していたようですが、インターバルを100msとか
50msとかだとディスプレイのリフレッシュレート(あるいは人間の認識力)に比べて
低すぎるので、かえって目立ってしまうということでしょうか?
確かに、インターバルを思い切って5msとかにしてみると、チラつきは軽減されてきた
気がします
377:デフォルトの名無しさん
18/05/06 19:33:59.43 7/UIZFPx0.net
ちょっと改変して逆にチラツキをわかるようにしてみた
URLリンク(ideone.com)
WinFormプロジェクトを新規で作って元のソースを全部消したうえで、このソースを既存の項目として追加
上がPictureBoxで下がPanel
>>370
PictureBoxのダブルバッファがデフォルトで有効なのは知っているのを確認したので
その上でPanelはデフォルトでダブルバッファが有効だというのを念頭に入れてコードを実行してほしい
同じオブジェクトの動きだが、うちで確認する限りは下はあきらかにチラツキがあって上は目立たない
>>365
>何もない状態を表示しなければいい
というわけで先に描画して動いた部分だけを消すという動作を実現してみたつもり
だったんだけど、移動量を大きくするとカクツキがどうしても目立ってしまってうまくいかない。ギブアップw
>>370
もっとGDI+の動作を把握するとかゲームなどでの実装方法を探すかした方がいいと思う
残念ながら俺の知識ではここまで
378:>>370
18/05/06 19:37:36.72 7/UIZFPx0.net
ごめん
>Panelはデフォルトでダブルバッファが有効だというのを念頭に入れて
Panelはデフォルトでダブルバッファが無効だというのを念頭に入れて
の間違い
379:デフォルトの名無しさん
18/05/06 20:17:55.74 LW3/RgRJa.net
うーんw
>>361のコード自体がダブルバッファリングの実装なので、
少なくともGDI+を使う限り、これで本当にちらつくなら何をやってもちらつき回避は不可能。
何度も言うけど、少なくとも俺の環境では低フレームレート特有の不自然さはあっても
フリッカーは確認できない
しつこいようだけど、俺は質問者がちらつき(フリッカー)がどういう現象か
理解してないだけのように思う
380:デフォルトの名無しさん
18/05/06 20:20:58.90 j24ysXtO0.net
まあ、unity使ってもDirectX使ってもスクロールとかなめらかにならないしね
グラボも汚いってのも考慮に入れる
市販のゲームでもスクロールしてるときはカクカクグシャグシャはデフォ
381:デフォルトの名無しさん
18/05/06 20:21:41.45 9GXSG5IC0.net
>>371
ありがとうございます
私が確認しても、確かに上下で明らかにチラつきが違い、下ははっきりとわかります
上はほとんどわからないレベルですね
PictureBoxもPanelも、どちらも出来上がったビットマップを貼り付けているのですから
同じ表示になりそうな気がしますが違いますね
これをちゃんと理解できれば解決できそうです
382:デフォルトの名無しさん
18/05/06 20:36:30.01 LW3/RgRJa.net
>>371のコートだとたしかにフリッカーが確認できるねw
>>373は撤回します
383:デフォルトの名無しさん
18/05/06 20:39:37.09 9GXSG5IC0.net
>>373
私が「チラツキ」と表現しているのは、>>371が上げてくれたプログラムの
下側、panelで発生している現象です
私の理解では、>>371でなぜ表示に違いが生じるのかがわかりません
どちらも、加工後のcanvasを貼り付けているはずなのに
>>371でやっていることは、ダブルバッファリングではないのでしょうか?
>>371のプログラムを実行してみて、違いはPictureBoxをウィンドウに直接
貼り付けているか、panelを置いてその上に貼り付けているか、です
私のテストプログラムでは、panelを置いてその上にpictureBox1を置いてます
これが影響するのでしょうか
384:デフォルトの名無しさん
18/05/06 20:49:20.18 7/UIZFPx0.net
URLリンク(ideone.com)
蛇足だろうけどnew BitmapじゃなくPictureBox.Imageを直接描き変えるもの
>>377
370で何をしたかったかというと「ダブルバッファリングではこれ以上改善できない」事の証明
>panelを置いてその上にpictureBox1を置いてます
それは多分関係ない。panelに背景を設定すると話が変わると思うけど
実際に改善するには移動量を少なくして滑らかに見せるくらいしかおもいつかない
消える側の方でなく進行方向側でカクついているんだよなあ・・・
385:デフォルトの名無しさん
18/05/06 21:02:31.57 9GXSG5IC0.net
>>378
試してみました
>>371と変わらない感じですね
これまで質問してきた趣旨とは変わってしまいますが、
Graphics g = Graphics.FromImage(pictureBox1.Image);
これでビットマップを書き換えた後に pictureBox1.Image を書き換えていないと
いうことは、いちいち canvas ビットマップを用意して細工しなくてもよかったと
いうことでしょうか
で、本質ですが、ご提供いただいたテストプログラムでは明らかにチラつきの
改善が見られるということはダブルバッファリングは機能している、これ以上
気になるのであれば、それは滑らかさの問題であってチラつきの問題ではない、
と認識するのが良さそうですね
386:デフォルトの名無しさん
18/05/06 21:19:50.71 IbwjU9Qn0.net
下PanelはBackgroundImage使ってるのが悪いんじゃねえかなあ
canvasはPanelのPaintで描画するようにして
PanelのDoubleBufferedをtrueにするかOnPaintBackgroundの無効化でチラ付かなくなったよ
あとチラつきとは関係ないけどお行儀的には再描画はTickで
Invalidate(true)呼び出してPaintのタイミングはフレームワークに任せるべし
Tick毎に無駄にImage/BackgroundImageに突っ込んでるから結果的に自分で再描画してるけど
387:デフォルトの名無しさん
18/05/06 21:52:55.18 LW3/RgRJa.net
ああ、やっぱり俺の認識で合ってるねw
何だかおかしいと思ったが
>>377
フリッカーを誤解してないのは分かったけど、>>361のコードでフリッカーなんか
発生しないってだから
388:デフォルトの名無しさん
18/05/06 23:08:48.35 s/HjZ7Qd0.net
>>351
それは参照渡しになってたわけじゃない
C#の参照渡しはhoge(ref list)のようにrefがつく
あなたがハマったのは参照の値渡しでインスタンスは複製されないということ
ぺらぺらの入門書とかだとわからんが、ジェネリックやクラスをちゃんと学べる程度の本なら載ってるはず
389:デフォルトの名無しさん
18/05/06 23:23:27.04 gzoDeGmX0.net
グラボの性能差だから、ちらつき。
390:デフォルトの名無しさん
18/05/06 23:49:17.66 5astaXB20.net
>>351
List固有の問題ではなく、classは全て参照型だからだ。
だから、=で代入しても同じオブジェクトを指すだけ。
ちなみにstructは値型。こっちなら=で代入したらオブジェクトが複製される。
391:デフォルトの名無しさん
18/05/07 01:29:04.63 inVQGvpaa.net
>>361をFPSと速度を変えられるようにしてみたけど
思ったより面白くもないし動作も滑らかじゃないなw
どっちにしろやっぱりフリッカーは発生しない
URLリンク(ideone.com)
ところで、タイトルバーをドラッグしたりすると画面の更新が止まる問題を
回避する方法ってなかったっけ?
392:デフォルトの名無しさん
18/05/07 01:32:11.28 inVQGvpaa.net
ああ、今思ったけど、FPSは本当は実測した値を表示すべきだねw
>>385はタイマーのインターバルから計算した理論値で実測値じゃない
393:デフォルトの名無しさん
18/05/07 01:32:57.05 3karsGmmp.net
グラボやドライバーの違いで発生する問題を自分のところじゃ発生しないからって頭ごなしに否定する奴はどうして生きてるんだろうな?
394:デフォルトの名無しさん
18/05/07 01:42:18.83 inVQGvpaa.net
>>387
それは君が勝手にそう思ってるだけw
そんな問題はWin9xの時代だって存在しなかったよ
っていうか、言っちゃわるいけどフリッカーが発生する原因を理解していればそんな間抜けな台詞は
出てこない
395:デフォルトの名無しさん
18/05/07 01:43:57.94 inVQGvpaa.net
なんか垂直同期(笑)とか書いてるのもいたけど、
頭の中80年代で止まってるんじゃなかろうかw
396:デフォルトの名無しさん
18/05/07 04:32:44.15 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
397:デフォルトの名無しさん
18/05/07 06:24:03.69 SlIACPlK0.net
プロパティだけでは無理
各列のSortModeはAutomatic以外にして
ColumnHeaderClickイベントで自分でソートする必要がある
実際にどうやってソートするかはDataGridViewに表示してるデータをどうやっているか次第
ところで下の状態で1番目の方のカラムヘッダをクリックしたらどうなるの?
とか色々場合があってUIというかUX?を決定するのが結構面倒
398:デフォルトの名無しさん
18/05/07 06:43:05.39 UbBhnDZYM.net
さすがに垂直同期はネタだろ
釣られる奴がいるとは思わなかったけど w
399:デフォルトの名無しさん
18/05/07 07:18:03.31 3karsGmmp.net
ググって事実を知ったんだな。そんなに悔しいのか?
400:デフォルトの名無しさん
18/05/07 08:25:49.50 H7YotaIo0.net
>>390-391
複数列でのソートは、Kotlin なら、
配列.sortedWith(compareBy({ 列1 }, { 列2 }))
C# は、よく知らないけど、こういう感じ?
配列.OrderBy(列1).ThenBy(列2)
401:デフォルトの名無しさん
18/05/07 14:38:50.30 iApxgodj0.net
教えてください
キャストが上手くできずに困っています
具体的には、VisualStudioでデバッグのウォッチウィンドウに
Enumerable.Empty<int>() is IEnumerable<object>
と入力するとtrueと表示されるので少なくとも条件が整えば
IEnumerable<int> は IEnumerable<object> に
キャストできるとおもうのですが、プログラム上で安直に
Console.WriteLine(Enumerable.Empty<int>() is IEnumerable<object>);
を実行すると画面にFalseと表示されてしまいます
ウォッチウィンドウ
402:上とプログラム上で何か条件の違いがあって このようなことが起こっているのだとは思いますが、理解が不十分で解決方法が分かりません そもそもIEnumerable<T>のTは共変なのでintがobjectにアップキャストできる以上 IEnumerable<int>も無条件でIEnumerable<object>にキャストできると 思っていたのですが、この部分に何か誤解があるのでしょうか VisualStudio15.6.7、コンソールアプリ、ターゲットフレームワーク4.7.1でテストしています よろしくお願いします
403:デフォルトの名無しさん
18/05/07 18:57:27.81 cAXvX5WKa.net
>>395
値型は不変だったような
URLリンク(ufcpp.net)
イミディエイトだとs演算子がtrueを返す理由は分かりませんw
何でしょうね
404:デフォルトの名無しさん
18/05/07 21:52:56.92 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になることはないのですが)
もっと良い方法があれば教えてもらえると嬉しいです
405:デフォルトの名無しさん
18/05/09 00:08:06.32 98vw71AM0.net
名前空間A と名前空間A.B がある場合に、A.B内からAのクラスを扱うにはどうすればいいのですか?
406:デフォルトの名無しさん
18/05/09 01:14:34.94 KTiGjU5t0.net
>>322
Aをusingすればよい
407:デフォルトの名無しさん
18/05/09 01:15:21.71 KTiGjU5t0.net
なんかすげーレス間違えたけど
>>398宛
408:デフォルトの名無しさん
18/05/09 01:47:53.29 lSrhXmV/0.net
そもそも名前空間ってどうやって扱うのが正しいの?
409:デフォルトの名無しさん
18/05/09 02:09:09.87 98vw71AM0.net
>>400
クラスとは違って、やはりそうやって使うものなのですか
410:デフォルトの名無しさん
18/05/09 02:25:39.99 PD0iDBLsp.net
完全表記しても良いんだよ?
411:デフォルトの名無しさん
18/05/09 17:57:38.22 8iDq54Sd0.net
嫌なら全部同じ名前空間内に入れ込んでしまえ
悩まなくて済むぞ
412:デフォルトの名無しさん
18/05/09 18:15:06.67 GFIhYWfG0.net
別に名前空間分ける意味ないよな。
413:デフォルトの名無しさん
18/05/09 18:19:36.14 nbiQ9nbF0.net
分業の為の仕組み
414:デフォルトの名無しさん
18/05/09 19:48:53.19 lSrhXmV/0.net
>>406
逆に無駄な混乱が起きない?
同じ名前のクラスとかあるとちょっと面倒じゃない?
415:デフォルトの名無しさん
18/05/09 19:49:33.69 D7X0frHnM.net
C#好きだけどnamespaceでネスト一つ深くなるのはあかんわ
416:デフォルトの名無しさん
18/05/09 20:08:50.17 4zjT3ksId.net
>>407
全て自分で書くコードならいいんだけどね。サードパーティのライブラリのクラスと衝突する可能性なんていくらでもあるから。
417:デフォルトの名無しさん
18/05/09 20:10:07.14 QZYGN7xi0.net
>>407
書き分けのために命名が歪むのは良くない
NM1.Class/NM2.Class
NM1Class/NM2Class
単にプリフィクス付けるだけなら
名前空間があろうとなかろうとやってる事は同じ
418:デフォルトの名無しさん
18/05/09 20:22:37.87
419:SavMNDDu0.net
420:デフォルトの名無しさん
18/05/09 20:54:59.54 EkWsGx0u0.net
やたら長い名前付けて重複を避けるのさ。
ダイビングがかったるいって?
最初のusingに書くだけだから大丈夫。
421:デフォルトの名無しさん
18/05/09 21:00:22.54 EHFfoX53a.net
>>407
自分(同じチーム)で同じ名前の違うクラスが必要になるケースは
少ないが(ないことはない)他人が書いたライブラリで既に使われているのと
同じ名前が必要になるケースなんかいくらでもあるよw
例えばSystem.Drawing.Point以外のPointが使えなかったら困るでしょ
あと、名前空間の目的は名前のバッティングの回避だけじゃない。
むしろ一番の目的は分類と整理でしょ。
名前空間が使えないライブラリは全部のファイルをデスクトップに置くできない人と同じ
適切に命名され適切な階層構造をもった名前空間は索引の機能を持つし、
コードのコンテキストを明確にする。
System.Drawing.PointがPointだけで2Dグラフィックの座標だと分かるのは、
プログラマはそれがSystem.Drawing内の型だと知っているから
422:デフォルトの名無しさん
18/05/10 00:36:27.80 yXMj8vMdM.net
using エイリアス ディレクティブ でggr
423:デフォルトの名無しさん
18/05/10 01:45:10.65 m/SOSTAZ0.net
>>413
普通にdrawingのcolorとmediaのcolorがバッティングしてるじゃん
それと自作のcolorとこれまた別の奴の作ったcolorがバッティングするだけでもう面倒臭くて死にそうになる
424:デフォルトの名無しさん
18/05/10 01:55:25.02 m/SOSTAZ0.net
もっというとwpfでも別のcolor作ってんじゃん
バッティングうぜぇんだよ
こんな簡単なクラスでもう再利用効かないんだから名前空間まで作って管理するなよバカっタレかよ
当のMSからもうまともなことやってねぇっていうかできないんだから
いい加減ファンタジー設計はやめるべき
いや、もうファンタジーじゃないな
メルヘンの領域まで入ってる
425:デフォルトの名無しさん
18/05/10 02:19:31.02 di97fd/ta.net
>>415-416
何を言ってるのか意味がわからねいよ。
426:デフォルトの名無しさん
18/05/10 02:30:05.52 yIfUPK8/0.net
この程度で死ぬほど面倒臭がってたら、プログラミング自体が向いてないな。
427:デフォルトの名無しさん
18/05/10 04:06:02.42 R4f/WJPq0.net
C#8.0のpreviewきましたねえ
URLリンク(github.com)
428:デフォルトの名無しさん
18/05/10 07:27:01.34 1WB9uyi8M.net
>>417
バカじゃん
何でwinformにcolorあるのにwpfでも作ったの?
再利用できてないじゃん
役に立たないじゃん
名前空間分けてそれで?
新しいもの作ったら元気一杯に捨ててるじゃん
ってとこに集約する
429:デフォルトの名無しさん
18/05/10 07:37:29.76 CKE2Ak/10.net
Color構造体とColorsクラスの事かな?
430:デフォルトの名無しさん
18/05/10 07:48:33.05 M9xdMPFN0.net
こいついつものアレだろ
触るな
431:デフォルトの名無しさん
18/05/10 08:08:52.60 1WB9uyi8M.net
>>422
反論できないならcolorクラスはもう作らせないぞ
432:デフォルトの名無しさん
18/05/10 09:17:58.68 l4uhHAvqa.net
全く話題になってないけどC#7.3も正式リリースされたぞ
念願の where T : Enum
433:デフォルトの名無しさん
18/05/10 09:36:24.91 EV77m/Hv0.net
>>423
> それと自作のcolorとこれまた別の奴の作ったcolor
> バカじゃん
> 何でwinformにcolorあるのにwpfでも作ったの?
え、なんで自分でcolor作ったの?
434:デフォルトの名無しさん
18/05/10 09:51:09.75 2wmh3oy2M.net
>>425
触るなって言ってんだろテメーマッチポンプか?
それとも別種の頭かわいそうな生ゴミか?
435:デフォルトの名無しさん
18/05/10 10:30:56.59 Yjx9MaDJp.net
つか、同じ名前で違う用途に割り当てる方が難儀だろ普通は名前変える。
436:デフォルトの名無しさん
18/05/10 12:33:21.16 kan/O/6Ed.net
>>427
だから世の中にどんだけクラスが存在すると思ってんの?
437:デフォルトの名無しさん
18/05/10 12:51:46.30 YLAKf1v1a.net
普通の初心者だったらSystem.IOのPathとWPFのPathが競合することが気になると思う
438:デフォルトの名無しさん
18/05/10 12:53:40.23 YLAKf1v1a.net
イギリスだったらつづりはcolour
439:デフォルトの名無しさん
18/05/10 19:43:14.60 M5rAF93d0.net
コロワァ
440:デフォルトの名無しさん
18/05/10 20:53:17.15 Yjx9MaDJp.net
>>428
自前クラスを組み込むクラスの組み合わせだけ考えりゃよかんべよ。
441:デフォルトの名無しさん
18/05/10 22:10:03.44 R4f/WJPq0.net
>>432
日本語で
442:デフォルトの名無しさん
18/05/11 00:30:31.25 F4aYSsq30.net
>>425
WPF「WinFormなんて爺さんのクラスなんて使えるかよ」
443:デフォルトの名無しさん
18/05/11 00:58:40.04 TW3IXpUfa.net
>>434
WinFormsが定年間近の爺さんだとしたらWPFは35歳無職童貞だな
444:デフォルトの名無しさん
18/05/11 13:52:55.21 sq5ITweXM.net
drawimageって自分でクリッピングしないとはみ出たら遅い?
445:デフォルトの名無しさん
18/05/11 14:13:09.38 NZxgVNkdp.net
formとwpfで、似て非なる部品ってどうにかならんの?
ネットで使い方調べる時、紛らわしいんだよな。
446:デフォルトの名無しさん
18/05/11 14:36:21.57 SfoScckv0.net
>>434
UWP「そろそろWPFさんにはご退場願おうか」
447:デフォルトの名無しさん
18/05/11 15:23:07.83 oUtXC/5od.net
>>438
メーカー「そろそろUWP用のコントロールつくっか?」
448:デフォルトの名無しさん
18/05/11 16:30:16.71 DPTi05MZM.net
親フォームからnewした子フォームは親とは非同期ですか?それとも同期処理となりますか?
449:デフォルトの名無しさん
18/05/11 16:50:42.60 Kz4/xaqBM.net
正しい言葉の使い方では非同期だけど、たぶん君が言ってるのは同期か非同期かではなくて同じスレッドかどうかだろう
それでいえば同じスレッド
450:デフォルトの名無しさん
18/05/11 17:48:49.51 n/c4W3DX0.net
つか、聞きたいのは、モーダルかモードレスかじゃね?
451:デフォルトの名無しさん
18/05/11 17:56:35.27 +Mrz0iyE0.net
ここで質問するときは自分が何をやりたいかを書いてもらった方がいいな
>>440
>>442の意味なら
方法 : Windows フォームをモーダルおよびモードレスで表示する
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
452:デフォルトの名無しさん
18/05/11 19:52:53.18 7YPYpwobM.net
>>441
同じスレッドなら同期ではないのですか?
>>442
モーダルとはなんぞやレベルなので出直してきます
>>443
参考サイトありがとうございます
453:デフォルトの名無しさん
18/05/11 20:39:18.87 A7KRRugp0.net
ポータブルアプリの設定ファイルを扱うなら何がスタンダードですか?
XmlSerializer使ってxmlファイルにするか
Win32API経由でレガシーなiniファイルにするか。
やっぱ前者ですかね?
454:デフォルトの名無しさん
18/05/11 20:42:59.37 H5+wAeJBM.net
>>445
今時はJSON
455:デフォルトの名無しさん
18/05/11 21:30:53.62 wYle0Ioy0.net
>>445
セオリー通りappsettings.jsonやろ普通
456:デフォルトの名無しさん
18/05/11 21:55:14.15 F4aYSsq30.net
>>445
人の手で編集するかどうか
するならcsvファイルかxlsがええで
Excel使えるから
xmlもiniもjsonも編集ツールが無くてゴミ
457:デフォルトの名無しさん
18/05/11 21:57:27.82 wYle0Ioy0.net
>>448
キチガイ
458:デフォルトの名無しさん
18/05/11 22:04:41.45 F4aYSsq30.net
>>449
ほう
じゃあ、編集ツール出して見ろよ
そんな誰も編集できないフォーマットで設定とか言ってたって全く説�
459:セ力ないよ はい、論破
460:デフォルトの名無しさん
18/05/11 22:08:27.43 KxM4SNOx0.net
yamlとかtomlもまぁアリだな
jsonはtailing commaがちょっと煩い
461:デフォルトの名無しさん
18/05/11 22:08:43.32 wYle0Ioy0.net
ごめんキチガイに触ってしまった
462:デフォルトの名無しさん
18/05/11 22:09:55.64 o64e7/8Ad.net
>>451
C#ならappsettings.jsonで良くね?IOptionとの相性いいし
463:デフォルトの名無しさん
18/05/11 22:11:29.14 KxM4SNOx0.net
>>453
JSONが標準だとは思うし, まぁJSONにする
が, リスト末尾のカンマは許して欲しい
464:444
18/05/11 23:25:00.79 A7KRRugp0.net
なるほど、今時はJSONですか。
ただ、少し調べて見たところweb系の構成ファイルとして使う?みたいで自分の思ってるのとは違うのかなと感じました。
後出しになってしまって申し訳ないんですが、自分のイメージしてるのはFormアプリで例えば「最前面に表示する/しない」だとか「昇順/降順で並べる」みたいな、チェックボックスやラジオボタンの選択内容を起動時に読み込み、終了時に書き込みする想定です。
appsettings.jsonは読み込みしかなさそうだったのですが、書き込みってありますか?自分でjson形式にコンバートしてベタに書き込みしろってことですかね?
465:デフォルトの名無しさん
18/05/11 23:28:06.24 gh5GwZAv0.net
>>455
その用途ならアプリ外からエディタで編集させることなんて無いだろうから、正直なんでも良いと思う
466:デフォルトの名無しさん
18/05/11 23:31:25.65 fVy+Ps+50.net
jsonならNewtonSoftがあるけどyamlシリアライザだとどれがデファクトなんだ?
467:デフォルトの名無しさん
18/05/11 23:31:53.13 fVy+Ps+50.net
jsonならNewtonSoftがあるけどyamlシリアライザだとどれがデファクトなんだ?
468:デフォルトの名無しさん
18/05/11 23:33:44.23 KxM4SNOx0.net
>>455
JSONで読んだり書いたりするなんてどうとでも出来る
まぁXML以外ならなんでもいいと思うけどね
469:デフォルトの名無しさん
18/05/12 00:31:10.54 wbfjgNFba.net
前も書いたけど騙されたらダメwww
.NETには標準のシリアライザがいくつも存在するんだから、特に理由がないかぎり
あえて外様を使うとか頭の悪い中学生じみてる
470:デフォルトの名無しさん
18/05/12 03:56:46.76 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の拡張子以外のファイルを抽出したいんだけど
大文字小文字区別せずに拡張子だけを比較する方法ないですか?
もっと効率いい方法ある気が・・・
471:デフォルトの名無しさん
18/05/12 04:18:13.81 ek+Myn8j0.net
!c.ToLower().EndsWith(extension)
で対応します
472:デフォルトの名無しさん
18/05/12 05:18:29.02 V3QYZkJA0.net
>.NETには標準のシリアライザがいくつも存在するんだから、特に理由がないかぎり
>あえて外様を使うとか頭の悪い中学生じみてる
いくつもあるの? どんなのがあるのか三つくらい教えてください。
ビルドするごとに消えるのでは使いにくいというか何度もビルドするのは普通だとおもうので
それでは使い物にならないので、ビルドしても消えないものがいい。
473:デフォルトの名無しさん
18/05/12 05:48:54.31 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 );
474:デフォルトの名無しさん
18/05/12 06:12:38.61 Qc7Beiuka.net
>>460
今時その認識は正直ヤバい
今の.NETの標準のシリアライザはJSON.NET
Core系では完全に標準シリアライザとしてフレームワークで使われてるし、MSDNにもJSONならJSON.NET使えと書いてる
475:デフォルトの名無しさん
18/05/12 06:16:13.33 9vavBtpKM.net
>>463
URLリンク(msdn.microsoft.com)(v=vs.120).aspx
476:デフォルトの名無しさん
18/05/12 06:20:19.72 9vavBtpKM.net
>>465
DataContractJsonSerializer でなくJson.net のソースは?
477:デフォルトの名無しさん
18/05/12 06:29:12.76 hwxaPbIq0.net
設定ファイルは、csv, yaml, json。
Java系のant, maven などは、XML。
Mac系は、property file
chef, vagrant では、Ruby。
Gradle では、Groovy
Haxe のserializer は、数個のプログラミング言語に渡って機能するし、
json, xml みたいに型情報が無くなったりしない
もちろん、Ruby, Groovy も、
プログラミング言語自体が設定ファイルだから、そのまま使える
478:デフォルトの名無しさん
18/05/12 07:13:07.72 Qc7Beiuka.net
>>467
URLリンク(msdn.microsoft.com)(v=vs.110).aspx
なんか勘違いしてるみたいだけど、DataContract系は通信に使うもので
ファイルの読み書きに使うことを想定されているもんじゃないよ
479:デフォルトの名無しさん
18/05/12 07:21:14.10 UP+Hygq+M.net
DataContractSerializerは絶対にファイルに書いちゃダメってわけではないけど、データのスキーマがあらかじめ決まってる場合には使えない
あくまで書く側と読む側とで解釈が共通でありさえすれればよくて、その中身を人間は気にしないよ、ってときに使う
480:444
18/05/12 07:26:10.70 4i84e4IV0.net
調べが足りずすみません。
NewtonsoftのJSON.NETというのを使えばいいみたいですね。
.NET標準のXmlSerializerと同じような感じの使い方ですね。
ちなみに、XMLはやめた方が良いと意見ありましたが、
どういった理由からでしょうか?
481:デフォルトの名無しさん
18/05/12 07:35:16.58 Qc7Beiuka.net
XMLは全世界共通の汎用データ交換フォーマットであることが採用する唯一の理由であり、
JSONが主流になった時点で既に存在意義が失われているから
482:デフォルトの名無しさん
18/05/12 07:45:11.57 hwxaPbIq0.net
XML は、JSON よりも可読性が高いから、人が見る・書く設定ファイル。
例えば、アプリのフォームのデザインの設定ファイルに使う
人が見ない、単にコンピューター間のデータの受け渡しには、JSON
XMLを使うと、ややこしい
483:デフォルトの名無しさん
18/05/12 07:52:19.68 yKmgHprg0.net
>>473
高くねーよ
タグの対応が外れたら素人に発見できんのか?
プログラマならともかくパンピーじゃ無理
484:デフォルトの名無しさん
18/05/12 08:08:53.44 V3QYZkJA0.net
XMLは可読性がわるい。つまり直観が効かない。機械向きで非人間的だから設定ファイルには不向き。
たしかに寄ってたかってよく考えてあるのは解る。それには感心するが、寄ってたかって考えすぎると
たいていは失敗する。その代表的な例としてはXMLもっとも良い例のひとつだろう。つまり駄作だなとおもう。
485:デフォルトの名無しさん
18/05/12 08:28:20.91 YrlOJuyZ0.net
jsonはいい加減コメントの使用を本家が認めるべきだわな
486:デフォルトの名無しさん
18/05/12 08:45:40.67 tydT0Seq0.net
>>473
XMLが読みやすいってwサヴァン症候群なんおまえ?w
487:デフォルトの名無しさん
18/05/12 08:49:00.82 KCIDKf2Q0.net
コメントがあると独自スキーマを作り始
488:めるからわざと外したと言っているけど病的だわ これだから実務屋でない奴は
489:デフォルトの名無しさん
18/05/12 08:50:11.44 KCIDKf2Q0.net
そいつC#スレとPythonスレでよく見かけるが
サヴァンかどうかはともかく発達障害は煩ってるぞ
490:デフォルトの名無しさん
18/05/12 08:52:02.93 Y49XSW9o0.net
>>461
EndsWithの第二引数は使えない?
491:デフォルトの名無しさん
18/05/12 08:57:27.63 vhGL8v7ea.net
>>478
悪名高いJSONライセンス(Good, not Evil)も作ってるからなぁ
492:デフォルトの名無しさん
18/05/12 09:22:58.61 9vavBtpKM.net
>>469
THX
493:464
18/05/12 15:24:16.94 Mhan8b8Mj
だれか…
494:464
18/05/12 16:52:37.99 Mhan8b8Mj
すいませんでしたぁあ~~!
自分の作った別のC++のプログラムで読み込んだら普通に透過してましたぁ!!
やっぱフォトショやその他のソフトがアルファチャンネル無視してただけでしたあ~
495:デフォルトの名無しさん
18/05/12 09:36:45.26 15xgRckc0.net
>>455
その用途ならこれで十分かと
URLリンク(docs.microsoft.com)
496:デフォルトの名無しさん
18/05/12 09:37:39.20 btyZbm2S0.net
XMLのタグの対応って言うけど
JSONも例えば}が数階層のどっかで一つ消えたら人間に対応できなくなるよね
497:デフォルトの名無しさん
18/05/12 09:45:59.03 iloBjJ0sM.net
データの規模が大きくなったらXMLのほうが断然有利
JSONとXHTMLを等価変換するスクリプトを書いてJSONだけでウェブサイトを構築する実験を社内でやった事があるがJSONのスコアは酷いものだった
JSONはネストが深くなると使い物にならん
498:デフォルトの名無しさん
18/05/12 09:49:55.91 15xgRckc0.net
>>487
どんな点で有利なのかすら書けないクズ
499:デフォルトの名無しさん
18/05/12 09:51:04.77 56F0arFd0.net
何のデータも示さずjsonは使い物にならないと言われてもねー
500:デフォルトの名無しさん
18/05/12 09:56:29.74 iloBjJ0sM.net
データは自社の資産だから常識的に勝手には公表できない
実験方法は簡単にだけど示したのだからデータが欲しければ実験して検証すればいい
逆にJSONが優れていると言うなら
根拠無しではなくデータなり検証方法を示してほしいね
501:デフォルトの名無しさん
18/05/12 09:58:57.02 yKmgHprg0.net
>>490
だったら発言すんなよ
消えろクズ
502:デフォルトの名無しさん
18/05/12 10:00:05.00 vhGL8v7ea.net
URLリンク(www.infoq.com)
同じくらいのパフォーマンスというならまぁ納得出来る
クソみたいなパーサ使わにゃネスト深さでパフォーマンスが悪化するわけねーだろ
503:デフォルトの名無しさん
18/05/12 10:00:18.08 56F0arFd0.net
>>490
再現可能なサンプルぐらい作れ
今のままだと説得力ゼロで誰も納得しねーよ
504:デフォルトの名無しさん
18/05/12 10:00:46.67 My8LWy2ka.net
XHTMLって死んだ技術だと思うが
10年ぐらい前の世界かな?
xmlが見やすいって人は初めて見た
505:デフォルトの名無しさん
18/05/12 10:08:59.85 iloBjJ0sM.net
>>493
5chに書き込むためだけに実験費用払いたくねえよ
こういう実験はサンプルとして人を雇わないとできないんだよ
思考停止ノータイムでボタン押さずに常識的に少し考えてからレスしてくれ頼むから
506:デフォルトの名無しさん
18/05/12 10:10:42.69 vhGL8v7ea.net
再現するJSONとXMLを一個ずつ用意すれば終わるのに自分以外の人間が必要か?
プログラ�
507:~ングやったことありますか?
508:デフォルトの名無しさん
18/05/12 10:19:11.86 iloBjJ0sM.net
>>496
あんたは論外
パフォーマンスの話なんて誰もしてない
今はみんな生産性、可読性、保守性の話をしてるんだよ
それを測るためにJSONとXHTMLを等価変換するツールを作った
グループAの人達にはJSONでタグ打ちさせてそのJSONをツールでXHTMLに変換した
グループBの人達にはXHTMLで直接タグ打ちさせた
完成するまでの時間や完成したXHTMLのバグ密度など様々なメトリクスを計測したら直接タグ打ちしたグループBのほうがスコアが高かった
グループAとグループBのスコア差はネスト数が深いほど大きくなった
そういう話な
パフォーマンス比較なんてくだらん話は他所でやってくれ
509:デフォルトの名無しさん
18/05/12 10:21:37.68 My8LWy2ka.net
>>497
人間のやることじゃないことを人間にさせて比較する意味がよくわからない
510:デフォルトの名無しさん
18/05/12 10:22:19.67 7mnYG5Gia.net
>>497
無駄な変数が多すぎて何を比較したいのか分からなくなってるな
仕事できなそう
511:デフォルトの名無しさん
18/05/12 10:22:47.54 vhGL8v7ea.net
>>497
人間がやる意味が分からん
512:デフォルトの名無しさん
18/05/12 10:25:26.75 FqtFYlf30.net
流石にこれは擁護できんわw
513:デフォルトの名無しさん
18/05/12 10:25:55.10 My8LWy2ka.net
テキストデータをバイナリエディタで書かせるような意味不明な実験を
やって悦にいる会社に勤めてかわいそうとしか思えない
上が暗愚だと下が苦労する
514:デフォルトの名無しさん
18/05/12 10:26:11.54 iloBjJ0sM.net
馬鹿しかいないのか
人間がやる意味がないとか言ってる連中は実験の趣旨を全く理解してない
だから思考停止してノータイムでボタン押すのやめろって言ってるんだよ
ほんと馬鹿の相手するの疲れるな
515:デフォルトの名無しさん
18/05/12 10:28:00.46 vhGL8v7ea.net
こいつはなかなか面白いな, 素でこのコミュ力ならなかなかの逸材だし作っているならよく理解している
516:デフォルトの名無しさん
18/05/12 10:30:21.85 My8LWy2ka.net
>>493
上が暗愚たと下も思考停止で伝染するんだな
バイナリデータでutf8の入力しづらさも検証したか?
517:デフォルトの名無しさん
18/05/12 10:31:58.09 My8LWy2ka.net
いや面白いな
どこかの技術系のサイトでネタにしてくれないかな
518:デフォルトの名無しさん
18/05/12 10:32:26.46 yKmgHprg0.net
結局、手動で設定するファイルであるなら
jsonもxmlもゴミだろ?
なんの話してんの?
519:デフォルトの名無しさん
18/05/12 10:36:00.72 My8LWy2ka.net
>>507
そうでもないよ
VScodeでjsonの各種設定ファイルを手で変えたりするけど
あれがXMLだととんでもないことになる
520:デフォルトの名無しさん
18/05/12 10:37:02.56 vhGL8v7ea.net
深くて3階層程度でそんなに行数多くないならJSONは苦痛は少ないかな
521:デフォルトの名無しさん
18/05/12 10:37:30.03 yKmgHprg0.net
>>508
そういう無意味な比較意味ないじゃん
xlsで設定できるアプリに使い勝手で勝てるの?
522:デフォルトの名無しさん
18/05/12 10:38:25.47 15xgRckc0.net
>>510
それが無意味に思えるなんて幸せなやつだな
523:デフォルトの名無しさん
18/05/12 10:39:01.19 yKmgHprg0.net
>>511
だってjsonもxmlもいらねーもんよ
524:デフォルトの名無しさん
18/05/12 10:39:07.44 PQYWGVmCd.net
>>510
xlsとかwwwバージョン管理システム使ったことすらなさそうだな
525:デフォルトの名無しさん
18/05/12 10:39:44.13 vhGL8v7ea.net
残念だけどXMLはクソオブクソだけどXLSとかCSVはそれをはるかに上回るクソなの
526:デフォルトの名無しさん
18/05/12 10:39:58.36 yKmgHprg0.net
>>513
csvでもいいよ
527:デフォルトの名無しさん
18/05/12 10:40:08.84 15xgRckc0.net
>>512
C#やめた方がいいよ
528:デフォルトの名無しさん
18/05/12 10:40:21.22 yKmgHprg0.net
>>514
理由は?
529:デフォルトの名無しさん
18/05/12 10:40:23.88 NuxM0Gnx0.net
せめてxlsxにしてくれ
530:デフォルトの名無しさん
18/05/12 10:41:06.38 PQYWGVmCd.net
>>515
反論する気すら起きんわ
531:デフォルトの名無しさん
18/05/12 10:41:21.27 yKmgHprg0.net
db(Sqlite)もあるぞ
532:デフォルトの名無しさん
18/05/12 10:41:32.86 wBO8DWf8M.net
>>497の実験は「XHTMLのデータはJSONで記述するには適さない」ということを示しているだけだな
そりゃXHTMLのスキーマはXMLで表現しやすいように設計されてるんだから、
JSONだと属性とコンテンツの区別がなかったりして記述しづらいのは当たり前だ
JSONにはJSONに適したスキーマ設計がある
533:デフォルトの名無しさん
18/05/12 10:41:52.87 15xgRckc0.net
やっぱGitすら使えなさそうだな
534:デフォルトの名無しさん
18/05/12 10:43:33.27 yKmgHprg0.net
>>522
gitでcsvの差分見れないの?
535:デフォルトの名無しさん
18/05/12 10:44:43.29 15xgRckc0.net
>>523
Gitでsqliteの差分見るのかい?
536:デフォルトの名無しさん
18/05/12 10:45:36.20 vhGL8v7ea.net
>>517
XLS: バイナリ, 標準化されてない(されてるかも知らんが概ねExcelないと読めん)
CSV: not well standarized
XLSX: zip圧縮されたXMLじゃん
537:デフォルトの名無しさん
18/05/12 10:45:58.87 yKmgHprg0.net
>>524
dbの比較は簡単
バージョン管理の機能にはないけど
538:デフォルトの名無しさん
18/05/12 10:46:25.99 iloBjJ0sM.net
>>508
VSCodeのセッティングはネストが浅くて比較的読みやすいし、VSCodeによるコード生成がうまく機能してるからね
539:デフォルトの名無しさん
18/05/12 10:47:06.15 15xgRckc0.net
>>526
もはや何を言っているのかわからん
540:デフォルトの名無しさん
18/05/12 10:47:34.43 yKmgHprg0.net
>>525
ビジネスでExcel入ってない環境とかあるの?
541:デフォルトの名無しさん
18/05/12 10:47:44.90 kT5GzpcRa.net
エクセルからマスターや設定をインポートするようになってるシステムは壊しそうで怖いわ
うっかりレイアウトがズレてて正しくデータが取れなくなるとかよくある
バージョン管理の問題にも関連するけど、再現性が乏しいんだよエクセルは
542:デフォルトの名無しさん
18/05/12 10:47:54.11 WIOr5zBad.net
>>526
おれsqliteのバイナリをテキストエディタで書き換える能力ないのよ
543:デフォルトの名無しさん
18/05/12 10:48:23.30 yKmgHprg0.net
>>528
DB同士のデータの比較したことねーの?
544:デフォルトの名無しさん
18/05/12 10:48:28.96 My8LWy2ka.net
>>521
そこの会社の内部の抗争があるんだと思う
いまどきxhtmlを使ってる派閥がいて
そいつらが不利になったので意味不明なテストでxhtmlすげーをやって
何も考えないやつがそれに賛同したと
エジソンが高圧送電は危険だと言って動物を殺す実験をしたようなもの
545:デフォルトの名無しさん
18/05/12 10:48:32.15 15xgRckc0.net
>>529
いくらでもあるよ
546:デフォルトの名無しさん
18/05/12 10:48:32.71 vhGL8v7ea.net
>>529
開発は仮想のLinux上とか普通にあるから