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

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

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

■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part138
https://mevius.5ch.net/test/read.cgi/tech/1528194762/
■コードを貼る場合は↓を使いましょう。
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/
2018/09/06(木) 20:12:45.37ID:RXSnHqjc
WPFはWindows10のスケーリングに対応しているのかね?
Winformで作ったらWin10スケーリングな人からボロクソに叩かれたからリベンジしたい
2018/09/06(木) 20:14:49.96ID:vwxBR5u1
Windows7で作っていたWinformのアプリがたくさんあったけどWin10にしてスケーリングで問題出たものは一つもないな
2018/09/06(木) 21:15:20.65ID:vsw29ZWk
>>413
4.6.2以降ならmanifest宣言すればPer Monitor DPIもWPF内でやってくれる

https://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI
ここのDeveloper Guideを参照

WinformsはSystemAwareの範疇でも見ても中途半端に対応していたせいで
Win32生でやるよりHiDPIで崩れてるアプリが多い気がするなw
2018/09/06(木) 23:08:09.49ID:fUpyP9r6
>>412
WPFは仮想DPIなので元々何もしなくてもスケーリング対応(System DPI aware)
※Per Monitor DPIでは無い
4.6.2以降はmanifestで宣言すればPer Monitor DPIも対応
4.6.2未満もapp.configで宣言すればPer Monitor DPI対応するらしいけど、確認はしてない
2018/09/06(木) 23:14:44.26ID:DFj+i+04
でもPer Monitor DPI自体がポンコツで使い物にならんからなあw
活用してる人がどれだけいるか
2018/09/06(木) 23:54:26.00ID:ZAMf2Fva
他のアプリケーションの持ってるDataGridViewをゴリゴリ弄りたいんだけど何かいい方法ないでしょうか。
持ってるプロパティやデータも読みたい。
しこしこSendMessageするのは現実的ではないと思いまして。
2018/09/07(金) 00:07:44.07ID:edPtcLES
流行りのRPA使えば
2018/09/07(金) 22:13:02.02ID:UPnWNaJM
RPAは自動化処理としては不完全
SendMessageしこしこした方が確実なのは言うまでもない
2018/09/07(金) 23:15:50.54ID:JDDOE++X
ほとんどのプロセサに共通して言えるのは
整数演算性能はどうでもいい扱いになってることだな
2018/09/09(日) 18:37:21.78ID:P2ummhES
エクセルを『ClosedXML』で読み込んで、A2からセルを順に下に見ていってセルが空まで繰り返すって、どの繰り返し文が理想ですか?
2018/09/09(日) 18:43:33.91ID:FyKgo8MI
>>421
while(true){}

空行が100行続いたら抜ける的な
2018/09/10(月) 01:32:47.82ID:Jsw/KSGz
private void AAA()
{
var list = new List<Myclass>();
var numberList = new List<int>()
{
1, 2, 3, 4
};

Myclass mc = new Myclass()
{
Nunber = 0,
};

int i = 0;

foreach (var n in numberList)
{
if(n == 1){
mc.Nunber = 1;
list.Add(mc);
Console.WriteLine("1={0} ", list[i].Nunber);
}

else if (n == 2) {
mc.Nunber = 2;
list.Add(mc);
Console.WriteLine("2={0} ", list[i].Nunber);
}


つづく
2018/09/10(月) 01:33:12.59ID:Jsw/KSGz
else if (n == 3) {
mc.Nunber = 3;
list.Add(mc);
Console.WriteLine("3={0} ", list[i].Nunber);
i += 1;
}
}

foreach (Myclass n in list)
{
Console.WriteLine("res= {0} ", n.Nunber);
}
}
}

public class Myclass
{
public int Nunber { get; set; } = 0;
}
2018/09/10(月) 01:35:58.68ID:Jsw/KSGz
上記を実行すると

1=1
2=2
3=3
res= 3
res= 3
res= 3

となります
list.Add(mc) でlisの要素の最後に追加しているのに
res ではすべての要素が"3" になっています
なぜなんでしょう?
2018/09/10(月) 01:41:58.64ID:4pnQI32t
mc一個しか作ってないからだろ
2018/09/10(月) 01:58:50.78ID:u3SYaGhq
list={ mc ,mc ,mc}になっているんだよな
ループ中でインスタンス毎回作らないと
2018/09/10(月) 06:41:51.42ID:k9vEXAki
c#と言うかプログラミングの勉強始めたばかりなのですが、例外とエラーコードの違いがよくわかりません
2018/09/10(月) 07:45:28.87ID:ndgOlWH8
使い分けるものではないから違いを気にする必要はない
エラーコードはどうしても必要な特別な場合を除きC#では使わない
人によっては業務エラーは戻り値を使うべきだとか色々な主張があるが、今はまず標準的な方法を学ぶ段階であり、そのような意見は無視せよ
430デフォルトの名無しさん
垢版 |
2018/09/10(月) 09:34:21.75ID:uDZUf97M
全部Expect型で解決してるわ
2018/09/10(月) 10:07:06.77ID:WqnqKse5
期待すんな
432423
垢版 |
2018/09/10(月) 11:43:05.11ID:Jsw/KSGz
>>426-427
なるほど!よく考えればそうですね
ありがとうございました
433デフォルトの名無しさん
垢版 |
2018/09/10(月) 13:13:32.38ID:aMpMOsPb
コントロールの名前を小文字で始めると「名前指定の規則違反です」と出るけど
デバッグは通ります
何か問題出ますかね?
あとCamel形式になじめず変数の命名する時
単語の連結にアンダーバー入れたい衝動がハンパ無い
一人で完結するなら問題ないだろうけど
チームでやるようになると嫌がられるのかなあ?
まあ無いだろうけど
2018/09/10(月) 14:25:56.49ID:j74hNM/I
>>433
デバッグ通るなら問題ないでしょ
コーディングスタイルの設定を変えればそういう警告は出なくなるんじゃないかな

チームでやるならチームのスタイルに合わせる、簡単なことじゃん
チームのみんなを納得させられるほどの合理的な理屈があるなら説得してみればいい
2018/09/10(月) 16:32:06.78ID:YgCo9XUL
名付け方式がPascalだろうがCamelだろうが小文字アンダーバーだろうがぶっちゃけ通ればいいよ
チームで嫌がられたらその時合わせ方を考えればいい
2018/09/10(月) 17:35:00.22ID:ed5IUta3
>>433
その手の表記法は余程不合理な物でない限り慣れの問題
少なくとも俺は1週間で慣れる

>単語の連結にアンダーバー入れたい衝動がハンパ無い
これはむしろアンダーバーを入れる表記法の方が冗長で不合理なので、
一旦キャメルやパスカルに慣れた後では間違いなく逆の感覚を抱くようになるw
掛けてもいいよ
2018/09/10(月) 18:05:47.60ID:JmcP0T+k
じゃあ俺のスーツを
2018/09/10(月) 18:07:33.75ID:hb3Qyg+S
俺は靴下
2018/09/10(月) 18:40:22.87ID:lrNRw7rP
web屋、というかPHPerはsnake caseじゃなきゃヤダ!派がやっぱ多いよね
440デフォルトの名無しさん
垢版 |
2018/09/10(月) 18:55:37.19ID:DjrEsgmz
そかあ・・慣れねぇ・・・

ところで「小文字で始めると規則違反って警告が出る」って話だけど
よくよく観察したら
VSがデフォで自動命名したのでも警告出るんだけど・・・・なんで?
例えば
private void button1_Click() の button1_Clickとか・・・
441デフォルトの名無しさん
垢版 |
2018/09/10(月) 19:07:39.58ID:okAQrHmq
日本語メンバは邪道?
442デフォルトの名無しさん
垢版 |
2018/09/10(月) 19:16:20.74ID:BcdHqxqC
アンダーバーを入れない理w
バカ怖るべしwww
2018/09/10(月) 19:17:08.96ID:7Twb5yy4
>>436
単語の間に空白を入れると視認性が高まるという研究結果があるらしい
それを信じるなら、空白ではないがセパレーターが間に入るスネークケースとケバブケースは理にかなってるはずだ
何はともあれまずは実験してみるべきだろう
444デフォルトの名無しさん
垢版 |
2018/09/10(月) 20:53:55.15ID:DjrEsgmz
>>440
自己レス
オプションのコーディングスタイルの
「フィールド以外のメンバー」がパスカルになってたから
これを削除したら出なくなったわ
キャメルにしたかったけど選択肢に無かったから削除にした
よく分からないけどこれで良いんだろうか?www
445428
垢版 |
2018/09/10(月) 21:01:52.45ID:ZrUglARC
わかりました。とりあえず例外の使い方を勉強します。
2018/09/10(月) 21:27:12.53ID:j74hNM/I
キャメルでもパスカルでもスネークでもケバブでもどれでもいいと思うけどな
コーディングスタイルにこだわる理由が分からん

見やすさならスネークとケバブだとは思う。理由は英語自体がスペースで区切る方式だから
と言いながら個人開発では慣れたキャメルやパスカルだけどさ
あ、個人サイトのURLはスネークケースだわ
2018/09/10(月) 21:29:11.62ID:j74hNM/I
>>444
いいんです
コーディングスタイル設定に基づいた単なる警告だから
2018/09/10(月) 21:47:33.87ID:98dDshqq
コンボボックスやテキストボックスを引数にしたい場合って、object?control?
2018/09/10(月) 21:51:04.49ID:BpMg5Aug
>>448
デザイナのソース見ればわかる。そのままComboBoxとTextBox
それ以外なら何に使いたい引数なのか言わないと分からない
2018/09/10(月) 21:56:41.48ID:98dDshqq
入力のエラーチェックでカンマが入ってるかどうかチェックするのに引数で持ってきたい場合はどうすれば?
まぁコンボボックスは入力するところではないんですけど...
2018/09/10(月) 21:59:41.61ID:BpMg5Aug
>>450
それは入力したテキストだけを参照したらいいのでは?
2018/09/10(月) 23:13:48.33ID:j74hNM/I
>>450
カンマが入ってるかどうかチェックする値を引数にすればいいのでは?
2018/09/10(月) 23:31:45.25ID:JmcP0T+k
普通コンボボックスごと渡したりしないよな
2018/09/11(火) 00:38:00.63ID:fWYCS2WK
見知らぬ人が作ったVBを勉強がてらC♯変換しててVBがそうなってたもので. ..
テキストを渡してやることにします。
2018/09/11(火) 01:07:46.00ID:R24CyBtF
横槍だがそれにつけるメソッド名どんなのにすればいいの?
参考に教えて

GetStringDeleteComma()
とか?
2018/09/11(火) 01:09:08.78ID:pVzZZpUQ
デリートコンマでよくね
457デフォルトの名無しさん
垢版 |
2018/09/11(火) 01:09:51.19ID:HX9tNh9Z
>>450
カンマなど余計な文字数とってやるって手もある
2018/09/11(火) 09:24:30.87ID:3oMSZQth
見知らぬ奴のソースは踏襲しないほうがいい
2018/09/11(火) 12:37:34.88ID:LDsiYPvK
>>453
例えば、エクセルを読み込んでその各列の値をそれぞれ複数のコンボボックスに入れる時はどうしたらいいですか?
追加部分を別クラスに書いて、引数はフォーム、列のカラム、コンボボックスなど渡してやったりするのは駄目な書き方?
2018/09/11(火) 13:17:21.96ID:glgNbbLv
>>455
「カンマが入ってるかどうかチェックする」「テキストを渡してやることにします」だから

bool CheckComma(string checkText)
とかじゃね?
2018/09/11(火) 13:22:18.04ID:ik07SMEJ
HasComma
2018/09/11(火) 13:27:52.11ID:glgNbbLv
>>461
MSのコーディングスタイルに準拠するならそれだな
2018/09/11(火) 13:47:02.45ID:OkaM0mAN
>>453
場合による
2018/09/11(火) 13:48:11.63ID:SNgh1+C8
>>460
それだとカンマが含まれてる場合にtrueとfalseのどっちが返ってくるか判断できんやろ
2018/09/11(火) 14:33:59.50ID:bYPr0L5F
ほんじゃカンマ以外が入っていたらどーすんのってなるから数値以外削除して返せばいい

って思ったけどどういう関数名にするんだ?
2018/09/11(火) 14:36:57.03ID:928ZQD1C
?w
2018/09/11(火) 14:51:12.92ID:glgNbbLv
>>464
そう言われればそうだな。そこら辺の配慮を忘れてたわ

やっぱHasCommaが最適解か
メソッド名だけで返り値が分かるしな
2018/09/11(火) 15:00:09.50ID:Arul2OBN
hasも英語として不自然なのでcontainsを使ってw
もっと言うなら、StringのメソッドにContainsが既にあるので
わざわざカンマを含むかどうかを検査する専用メソッドに存在意義があるとは俺には思えん
2018/09/11(火) 16:42:24.04ID:AGybRa2Z
データグリッドビューを別フォームに渡して
コンストラクタで受け取ります

このとき元のデータグリッドビューと切り離す琺瑯教えてください

複製したいです
この時データセットやデータテーブルは駄目です
2018/09/11(火) 16:45:15.78ID:AGybRa2Z
琺瑯→方法
2018/09/11(火) 16:47:43.89ID:ylc2S0TC
DataGridViewじゃなくてDataSource受け渡しでDataSourceをコピーじゃダメなの?
2018/09/11(火) 16:49:08.34ID:GlOIz1sj
同じRowとColumnの数の新しいDataGridViewを作り、それぞれのValueを書き込んでください
2018/09/11(火) 16:57:15.28ID:TAVTHaAT
新しくnewしたDataGridViewに手作業で必要なプロパティ設定していく
ColumnsとRowsはforeachしてそれぞれCloneしたのをAddする
イベント類はまあどうでもいいか
474デフォルトの名無しさん
垢版 |
2018/09/11(火) 17:00:09.28ID:qpgjCo1u
継承したフォームにデータセット渡す
2018/09/11(火) 17:27:08.25ID:Arul2OBN
>>469
何言ってるのかさっぱり分からんけどこういうこと?

〜 Form1 〜
Controls.Remove(dataGridView1);
var form2 = new Form2(dataGridView1);
form2.Show();

〜 Form2 〜
public Form2(DataGridView dgv)
{
  InitializeComponent();
  Controls.Add(dgv);
}
2018/09/11(火) 17:33:47.77ID:Arul2OBN
移動元でControls.Remove不要みたいだね
こんなの必要になったことがないからやったこともなかった
2018/09/11(火) 18:15:11.25ID:K2tTWTaM
XMLに書き出して新しく作ったFormにロードするのが一番シンプル
478デフォルトの名無しさん
垢版 |
2018/09/11(火) 19:28:23.64ID:FmRL3j/P
俺も気になるわこれ
DataGridViewでCloneできればいいのに

画面上のソート順を保つためDataGridViewごと他フォームに渡したりする
でも元フォームでデータ変更されると渡したDataGridViewも変わるから
それが嫌だったことある

そん時は元フォームで1行ずつ先頭から呼んで別のDataSet作ったけど
2018/09/12(水) 02:22:23.95ID:vTtqi/en
素人だからデータの保持や別データとのやりとりはListでやっといて
更新される度に毎回DataBindings初期化していちいち読み込んでるわ
動くから……いいかなって……
2018/09/12(水) 13:02:32.22ID:Jn68slr9
データグリッドビューでやるのは無理なんですね…
一行ずつ新しいデータテーブルに読み込んで複製します
ありがとうございました
2018/09/12(水) 13:22:31.80ID:Nj/C/MXJ
そうじゃなくて、だからそもそも何言ってるのか誰も理解できないんだってw
まともな日本語書けと

他人に通じるまともな文章に書き直したら答えが返ってくる問題かもしれんよw
2018/09/12(水) 14:36:44.55ID:Jn68slr9
フォームのデータグリッドビューを
別フォームのクラスに渡してコンストラクタで受け取るんです
DataGridView dgv = srcDvg;

そうすると元フォームのデータグリッドビューを変更すると譲渡先のdgvも変更されちゃうんです
コレを止めたいです
元を変更してもdgvは渡されたときの状態を保つ方法が知りたいです

なお、この時データセットやデータテーブルを使用せず
データグリッドビューのままやる方法はありませんかと言う質問です 👀
Rock54: Caution(BBR-MD5:1341adc37120578f18dba9451e6c8c3b)
2018/09/12(水) 14:37:39.66ID:Jn68slr9
なんでRocketや…
2018/09/12(水) 14:47:38.46ID:SYobtT/Z
参照元の状態を反映するのはC#の仕様なんだから新しいインスタンス作って
何らかの形で中身コピーする必要があるのはどのクラスでも一緒(Bitmapとかも)
2018/09/12(水) 16:52:38.09ID:9GvVVUqs
面倒くさいことはしたくないって思考だな
2018/09/12(水) 16:59:40.03ID:fIpfvqUu
面倒くさいことを楽にしようというのがソフトウェアだからな
2018/09/12(水) 17:04:10.32ID:Jn68slr9
ありがとうございます
大人しく作り直します
2018/09/12(水) 17:25:49.83ID:MyqFbSbG
初心者用なのに初心者に厳しい自称プロさんたち
2018/09/12(水) 17:37:25.30ID:JkfDtodY
>>488
ここに来るのはみんな初心者
スレタイ読めないのか?
490デフォルトの名無しさん
垢版 |
2018/09/12(水) 18:45:38.51ID:6MfZXYju
>>478
継承しろや!
2018/09/12(水) 22:45:44.44ID:JSQG/Jue
linq
リンキューですか?
ラインクですか?
2018/09/12(水) 22:59:50.57ID:HCZYwh62
リンクじゃないのか?
俺はアクセントがわからない
2018/09/13(木) 01:12:43.13ID:xXJqEk25
リンクだと思ってた
2018/09/13(木) 03:37:55.81ID:4tq0ggVx
>>490
したない
495デフォルトの名無しさん
垢版 |
2018/09/13(木) 05:03:38.49ID:wmIVPXZe
byte a;
byte b;
byte c = a + b;
だと型が合わないとエラーが出る
左辺をint cにするか、右辺を(byte)(a + b)にする必要があるんだな
なんで型が合わないのか分からず一日ドツボにはまった
入門レベルの参考書には載ってないし
でもバイト型とバイト型を演算したら答えはイント型に変わるって
根本的におかしくね?
2018/09/13(木) 05:09:18.59ID:1YFyErS3
why?
2018/09/13(木) 06:06:29.57ID:4tq0ggVx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/byte#conversions
2018/09/13(木) 08:17:24.20ID:IoXWiQ4j
>>491
リンクだとlinkって感じなので心の中ではリンクゥって言ってる
2018/09/13(木) 08:18:16.41ID:Ts60fXh8
>>495
CPUはそういうもん
小さな型でもいったんCPUに応じた処理しやすい自然なサイズに変換してから演算する
32/64bit CPUと呼ばれる所以だ
もちろんbyte同士なら演算後に勝手にbyteにキャストする仕様もありうるけど、
そんなことをしてもせっかく255を超えてもオーバーフローせずに表現できてるものを
わざわざ余計な処理入れて切り捨てるなんて無駄でしかないからCPUの仕様に合わせている
2018/09/13(木) 08:44:11.24ID:eHHJ6hTJ
>>491
https://www.microsoft.com/ja-jp/mic/seminar/programing_linq.aspx
>統合的なデータの問い合わせを実現したテクノロジ LINQ (リンク)
2018/09/13(木) 10:09:10.44ID:7r2vSdtk
LINQ職人の方に聞きたいのですが

var 元 = new[] {
  new {Index = 0, Value = "あ"},
  new {Index = 1, Value = "い"},
  new {Index = 3, Value = "う"}
};

みたいな羅列があって、こいつを平凡な string[] に変換したいです。

[0] → "あ"
[1] → "い"
[2] → null
[3] → "う"

LINQ 1発でバシって出来ませんか?
2018/09/13(木) 10:15:23.01ID:vxp+pG1B
普通にはできません
2018/09/13(木) 10:49:45.94ID:uKwFSQ+m
LINQ 外部結合
ぐらいでググったらそれらしいのあるが、やめとけ。
2018/09/13(木) 10:55:31.20ID:n/Ia9Ufb
さくっとできる
2018/09/13(木) 10:59:56.20ID:n/Ia9Ufb
rangeとzipな
2018/09/13(木) 12:50:08.04ID:gBmhWXZp
>>495
今まで気づかなかったけど、C#もintに揃えるCの手抜き実装を踏襲してるんだなw
これはシンプルに「大きい方の型に揃える」ルールにして欲しかったね
2018/09/13(木) 15:34:46.60ID:B76L2xUy
>>501

var 元 = new[]
{
new {Index = 0, Value = "あ"},
new {Index = 1, Value = "い"},
new {Index = 3, Value = "う"}
};

var array = Enumerable.Range(0, 4).Select(index => 元.Where(moto => moto.Index == index).FirstOrDefault()?.Value).ToArray();
2018/09/13(木) 15:38:33.86ID:TO6ro8xf
ちなみにFirstOrDefaultはFunc<T, bool>を引数に取れるからWhereはなくていいよ
2018/09/13(木) 16:23:35.73ID:B76L2xUy
>>508の指摘にそって改良

var 元 = new[]
{
new {Index = 0, Value = "あ"},
new {Index = 1, Value = "い"},
new {Index = 3, Value = "う"}
};

var array = Enumerable.Range(0, 4)
.Select(index => 元.FirstOrDefault(moto => moto.Index == index)?.Value)
.ToArray();
2018/09/13(木) 16:34:26.33ID:n/Ia9Ufb
zipで一行
2018/09/13(木) 16:48:55.75ID:Mtznb6SP
>>510
コードで示して
2018/09/13(木) 16:51:19.42ID:n/Ia9Ufb
コードは甘え
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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