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

■ このスレッドは過去ログ倉庫に格納されています
2019/07/16(火) 15:36:23.74ID:i1fbuZ/pM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

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

■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/

■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part143
https://mevius.5ch.net/test/read.cgi/tech/1558002486/

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2019/08/24(土) 23:11:33.91ID:XZUr8QhOa
refやout, in引数のないdelegateなら
自分で定義せずにSystem.ActionやSystem.Funcを使う手もあるよ
425デフォルトの名無しさん (アウアウウー Sa09-Aknt)
垢版 |
2019/08/24(土) 23:15:15.44ID:dsz+mirUa
>>423
理解しなくていいよw
デリゲートを直で受け渡しなんかせず、素直にイベントの方を使いましょう。
2019/08/24(土) 23:54:17.30ID:GocaxRhS0
>>422
さすがにそれはお前がアホやで
2019/08/24(土) 23:56:09.98ID:4OMYNXZ10
使う手もあるというか余程じゃなければActionかFuncでは
2019/08/25(日) 00:04:50.89ID:dkxX1jtZ0
俺もActionを推す
2019/08/25(日) 00:26:08.77ID:DAHO6xPV0
MethodInvoker(´・ω・`)ボクも忘れないでね
2019/08/25(日) 06:55:23.52ID:Jlb1UCj1M
>>414
こういうのってbindingでどうにかするものじゃないの?
2019/08/25(日) 07:21:22.29ID:UfI3Un4o0
可変長の戻り値って実現できませんか?もしくは可変長のタプル
これを
public void hoge<T>(List<T> list, Func<T, string[]> selector) { ... }
hoge(list, listItem => new string[2] { listItem.A, listItem.B });
hoge(list, listItem => new string[3] { listItem.A, listItem.B, listItem.C });

public void hoge<T>(List<T> list, Func<T, params string[]> selector) { ... }
hoge(list, listItem => (listItem.A, listItem.B));
hoge(list, listItem => (listItem.A, listItem.B, listItem.C));
こんな風に書けたらいいのにって感じです
2019/08/25(日) 09:33:25.01ID:NieUwdLz0
>>424
さんくす、スマートに書けそうですね、他の人もさんくす、ただ考え中
>>425
今回はイベントで、ただデリゲート勉強するいいちゃんす
>>429
さんくす、ググったら実現したいことをピンポイントっぽい
>>430
さんくす、binding、さらにむずい、今までと違うアプローチっぽい
433デフォルトの名無しさん (アウアウウー Sa09-Aknt)
垢版 |
2019/08/25(日) 13:39:47.35ID:aNsJH+ura
>>431
何言ってるのか理解するのに5分かかったw
ラムダ式の右辺(?)の評価方法をジェネリックの型パラメータを確定する場面で指定するとか
普通に無理筋でしょう

hoge(list, listItem => new[] { listItem.A, listItem.B });

hoge(list, listItem => (listItem.A, listItem.B));
と書けたところでたいして嬉しいと思えんけど
2019/08/25(日) 14:04:21.51ID:UfI3Un4o0
>>433
おお、new[]で推論してくれるの忘れてました
new[]で十分スマートですねこれで問題ないです、ありがとうございました
2019/08/25(日) 22:03:25.03ID:4LqybIGY0
Formのプログラムで普通に動作してたOpenFormDialogを使ってる箇所が突然フリーズしてしまいます。
一旦そうなるとWindows自体が不安定になり、他のプログラムで恐らくOpenFormDialogを使ってる所が全てフリーズしOSの再起動が必要になります。
どんな要因が考えられるでしょうか。

プログラムはかんたんなグラフィックエディタで矩形やテキストを移動したり変形する程度です
2019/08/25(日) 22:12:11.72ID:hYfvTIib0
OpenFormDialog? OpenFileDialogじゃなくて?
OpenFileDialogならフリーズの話はあるから検索して
騒がれたのもう結構前だからまだ残ってるともあんまり思えないけど
2019/08/25(日) 22:13:53.33ID:hYfvTIib0
あ、残ってるってのはフリーズするバグを残してる環境の話ね
2019/08/26(月) 00:35:03.80ID:D54D8pf80
>>436
OpenFileDialogでした
cymon.sysの件は見つけましたけど家のPCにはありませんでした

地道にバグを見つけます
2019/08/26(月) 01:40:22.77ID:YZSrPKBs0
List<Employee> のIDとList<int> の一致するEmployeeを取得したいです。

List<int>をforeach、その中でList<Employee>をFirstOrDefaultで探して
新たなList<Employee>にAddする方法はできました。

これのforeachを撲滅して簡潔に書きたいのですがいい方法はありますか?
2019/08/26(月) 01:54:35.76ID:XYz1A7/c0
var employees = new List<Employee>();
var ids = new List<int>();
・・・・
var hitEmployees = employees.Where(employee => ids.Where(id => id == employee.id).Any()).ToList();
2019/08/26(月) 05:09:56.54ID:d+oJYvyp0
employees.Join(ids, _emp => _emp.ID, _id => _id, (_emp, _id) => _emp)
joinはクエリ構文の方が読みやすいな
from emp in employees join id in ids on emp.ID equals id select emp
2019/08/26(月) 06:09:07.86ID:LiZWIy1C0
Find
2019/08/26(月) 07:20:31.54ID:H4cvWJOz0
employees.FindAll(emp => ids.Contains(emp.ID))
2019/08/26(月) 08:56:15.22ID:WqA3OufOM
EnumSetってEnumの値を2のベキにすればいいから存在しないの?
2019/08/26(月) 11:40:26.35ID:Rhz6dR8od
イベントハンドラのいなづまアイコンってどういう意味なの?
気になって開発が手につきません。
446デフォルトの名無しさん (アウアウウー Sa09-Aknt)
垢版 |
2019/08/26(月) 12:01:50.23ID:EHOEsFfWa
地下鉄漫才かよw
2019/08/26(月) 16:00:24.81ID:7fzFkpCMr
execute
神がいかずちをもって手を下す

的な
2019/08/26(月) 22:32:00.17ID:YZSrPKBs0
>>440-443
どれもなるほど!と勉強になりました
ありがとうございます
今回はシンプルな>>443さんのでいきます!
2019/08/27(火) 07:54:15.38ID:wbq0Lfqra
おお、なるほど。LINQのクイズ集があれば面白そうだな。
2019/08/27(火) 08:59:40.07ID:S6vHFDx3d
443はlinqじゃないぞ
2.0の頃からあるListクラスのメソッドだけだ
2019/08/27(火) 10:18:31.48ID:AUeyxvTx0
>>450
ラムダ式が使えるようになったのはC#3.0から
2019/08/27(火) 11:47:29.33ID:S6vHFDx3d
>>451
そうそう。なのでデリゲート使って書く必要はあるけど
2019/08/27(火) 19:15:36.40ID:4aKZbpn00
次のようなことをしたいのですが、どうすればいいでしょうか。
async、awaitを使えばいいようにも思えたのですが、クラス内のループが止まらず・・・

1.ボタン押下でとある処理をするクラスのインスタンスを生成し、クラス内で処理を無限ループ
2.ボタン押下でクラス内のループを停止
2019/08/27(火) 19:21:08.99ID:a3Zgv65M0
>>453
ループさせているクラス内に止めるメソッド付けてボタン押したときにそれ呼び出せばいいだけでは
イベントメソッドは別のクラスでもできるから直にボタンのイベントに追加してもいいし
2019/08/27(火) 20:10:30.11ID:2XS9VBdia
CancellationTokenSourceを使うのが比較的妥当なやり方かな
2でボタンを押したらcancellationTokenSource.Cancel()
無限ループ側の処理では適宜cancellationToken.ThrowIfCancellationRequested()
2019/08/27(火) 20:56:45.60ID:LqXN8ItS0
低レベルな実装だと終了フラグの参照を渡しておくとか
2019/08/27(火) 21:11:30.63ID:fYPVnhP50
>>455
単純なループ処理でキャンセル例外が必要なければ
CancellationToken.IsCancellationRequestedをチェックするのでも良いね
2019/08/27(火) 21:12:50.98ID:4aKZbpn00
皆さん、ご回答ありがとうございます。

>>454
停止メソッドにより、ループ条件から外れるフラグを立てて
処理停止させるイメージでしょうか。

>>455
CancellationTokenSource初めて聞きました。
便利ですね!

>>456
すみません。フラグでの終了処理しか思いつきませんでした・・・
もう少しマシな実装になるとどうなるのでしょうか。
教えてもらえると助かります。
2019/08/27(火) 21:26:09.47ID:4aKZbpn00
>>457
そういった方法もあるのですね。ありがとうございます。
2019/08/27(火) 22:06:20.98ID:GZd8Fc/Qp
無限ループなんか組むな。
2019/08/27(火) 22:40:07.64ID:4aKZbpn00
すみません・・・
あるフォルダにファイルが保管されたときに
そのファイルを処理したくて監視に無限ループを使ってしまいました。
他に良い方法があれば、お教え願えないでしょうか。
2019/08/27(火) 22:43:30.90ID:4WMOl80S0
>>461
System.IO.FileSystemWatcher
2019/08/27(火) 22:46:14.03ID:4WMOl80S0
もしくは、win32ApiのFindFirstChangeNotification()か
2019/08/27(火) 22:46:46.91ID:4aKZbpn00
>>462
そんな便利なものまであるんですね!びっくりしました!
全然C#のこと知らなくて恥ずかしいです・・・
教えてくださってありがとうございました。
2019/08/28(水) 09:31:28.37ID:jmHHdju80
自分はC#といえば当たり前のようにWindowsFormでやってたけど
みんなは何使ってるの?
2019/08/28(水) 11:09:54.59ID:xlt6w80MM
>>465
特に必要なければwinform
というか、初期のブレンドが使い物にならなかったので、WPFやUWP?は必要になるまで覚えないことにした
2019/08/28(水) 11:18:52.44ID:kf58t1t/0
WinformからUWP APIを呼び出すことも出来るしな
2019/08/28(水) 12:01:00.80ID:nq/8XfUOM
WPFでやってるけど誰かにお勧めしたことはないしとてもお勧めできない
2019/08/28(水) 12:10:35.61ID:biFO59Yua
>>465
Winformなプロジェクトだが、XAMLでのレイアウトが好きだから自分の担当画面はWPF使ってる
2019/08/28(水) 12:29:45.46ID:XsRrDAKXd
>>465
ASP.NET Core
2019/08/28(水) 12:34:32.95ID:in2U0t2Ud
>>465
WinFormsやらWPFやらXamarin
2019/08/28(水) 14:05:53.46ID:xlt6w80MM
>>465
アンカーやドック追加してくれたのが嬉しすぎて、他に浮気してまで新たに覚える気にならないってのもあるかな
2019/08/28(水) 20:18:04.95ID:h4zgSqGZd
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

アクティブウィンドウのクライアント領域を取得するにはどうすればいいでしょうか?

上のメソッド使えば行けそうなんだけど、行き詰まってます。
2019/08/28(水) 20:23:25.50ID:7/MPDbwD0
C#関係ない
2019/08/28(水) 20:39:43.87ID:j6ZvHlbE0
>>473
それはアクティブになっているウインドウのハンドルを返すだけのもの
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getclientrect
RECTの構造体は自分で用意して上のURLではポインタが引数になっているけどC#なら
[DllImport("user32.dll")]
private static extern int GetClientRect(IntPtr hwnd, ref RECT Rect);
みたいに構造体をrefかoutで指定したらそこに戻ってくる
2019/08/28(水) 23:28:13.40ID:1vTqziPj0
c#楽しいね
直感ですぐGUIアプリ作れるからプログラミング覚えたいけど特に目標がないって人にはc#一択だと思う
2019/08/28(水) 23:50:51.61ID:RWMmexzc0
>>475
ほぼそのまんまのサンプルを見つけて問題はとりあえず解決しました。

https://ja.stackoverflow.com/questions/21328/c-processで指定した別プロセスのウインドウを-クライアント領域のみキャプチャしたい

アクティブウィンドウのクライアント領域の取得は、
c# + netframework ではできないのですか?
2019/08/29(木) 00:27:03.61ID:yP1vALXb0
できるよ
お前には一週間早い
2019/08/29(木) 01:19:09.27ID:wYLP5dcN0
次はListViewの要素の長方形を得たいとかかな
結局.netからは離れていきそう
480デフォルトの名無しさん (ワッチョイ d1da-ca7b)
垢版 |
2019/08/29(木) 01:53:51.70ID:KY//KYCr0
TreeViewの表示を標準の
項目1
┗項目2
  ┣項目3
  ┗項目4

から、
項目1━項目2┳項目3
           ┗項目4

にするにはどうすればよいでしょうか?
2019/08/29(木) 01:59:31.63ID:AZY1Uw460
owner draw
2019/08/29(木) 02:11:15.91ID:HoxlVuhE0
普通にカスタムコントロールを作った方が早そう
2019/08/29(木) 07:51:27.50ID:JXiDsy0oa
>>473
GetActiveWindow()って無かったっけ?
2019/08/29(木) 07:52:24.70ID:JXiDsy0oa
↑ああ、早とちり
485デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 21:10:43.61ID:euEksp6k0
ドラッグアンドドロップで拡張子を.txt→.jsonに変更するプログラムのコードをください
2019/08/30(金) 21:15:43.51ID:a95S+czO0
batでやったほうが早そうなレベルだけど
fileをrenameするだけでしょ?
487デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 21:18:37.15ID:euEksp6k0
renameするだけですね
どうしてもC♯でやりたいんです
2019/08/30(金) 21:30:48.63ID:m5yHWiCc0
>>487
拡張子の書き換えは
System.IO.Path.ChangeExtension(filepath, extension)
ここはコードを代わりに書くスレじゃないのでキーワードはあるのだから後はググってください
489デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 21:39:06.95ID:euEksp6k0
一日ググってもわからなかったので聞きに来ました
2019/08/30(金) 22:13:39.42ID:LYP1s7Gj0
誰が一日ググれば聞いていいって言ったんだよ
ひと月はググれ
2019/08/30(金) 22:15:07.21ID:gOJh05ROp
>>488
それだけじゃ変数領域にあるファイル名しかリネームされてない予感
2019/08/30(金) 22:16:45.05ID:5knN0MFU0
むしろググる以外のことをしろ
一日やったらわかったこととわからんとこぐらいあるだろ
2019/08/30(金) 22:17:38.29ID:a95S+czO0
どこがわからなかったのかくらい書いてくれないと説明できんよ
ドラッグアンドドロップの受け取り方?
拡張子の変え方?
コンソールアプリなの?デスクトップアプリなの?
494デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 22:22:42.01ID:euEksp6k0
https://www.ipentec.com/document/csharp-accept-drag-and-drop-from-explorer
https://dobon.net/vb/dotnet/file/changeextension.html
ここの二つのサイトを参考にして組み合わせれないかと色々やってみたんですけどうまくいかないんですよね
それぞれ片方ずつならうまく動きます
2019/08/30(金) 22:27:14.34ID:a95S+czO0
上手く行かないとは何かを説明して
コンパイルできない?エラーが出る?例外が出る?
実はmoveできてるけど別のフォルダに作ってるとかないよね?
2019/08/30(金) 22:27:46.98ID:Eq4lHDlT0
答えが出てるから色々試そうぜ

あと1日試してやり方がわからないのなら
>>1にある
>■コードを貼る場合は↓を使いましょう。
>http://ideone.com/
>https://dotnetfiddle.net/
にコードを張ってここからどうやれば良いかを聞いてくれ
497デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 22:47:12.10ID:euEksp6k0
http://ideone.com/4eJIcv
これで貼れてますか?フォームアプリケーションです。
ここの57行目のファイルのパスをドラッグアンドドロップして得たパスに変更したいんですけどうまくいかないんですよね
2019/08/30(金) 22:58:41.75ID:m5yHWiCc0
>>497
private void Form1_DragDrop(object sender, DragEventArgs e)
{
string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
for (int i = 0; i < files.Length; i++)
{
string fileName = files[i];
textBox1.Text += fileName + "\r\n";
System.IO.File.Move(fileName, System.IO.Path.ChangeExtension(fileName, "bak"));
 }
}
これでいいでしょ
ボタンクリックでやりたいのならフィールドでファイルパス持たないと
499デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 23:12:12.27ID:euEksp6k0
>>498
できました、ありがとうございます
こんな簡単だったんですね・・・・・・
2019/08/30(金) 23:59:42.45ID:Nv4TyFgP0
>>498
重箱の隅で本質とは関係ないけど、
"\r\n"はEnvironment.NewLineの方が良いな
2019/08/31(土) 00:15:27.52ID:yACTwzu40
テキストボックスのテキストも環境の影響受けるんか?

おれは環境によらず出力一定のほうが安心する
2019/08/31(土) 00:24:05.20ID:8S6g8PTE0
どちらかと言うと定義済みの定数としてだな
2019/08/31(土) 02:02:25.00ID:XD/oUD8U0
コンソールとGUIの改行が同じという保証なんて無いんだが
2019/08/31(土) 04:03:11.60ID:5bIs7pBL0
>>503
同意
2019/08/31(土) 08:13:13.94ID:auI6O9iK0
JSONを扱いたいのですが.NET標準機能では
JSON.NETにあるJsonPropertyのような変数名とは別の名前で
出力できるような機能は無いでしょうか?
2019/08/31(土) 08:26:54.85ID:/xXRK3gd0
>>505
DataContractJsonSerializer使って
[DataMember(Name="別の名前")]
とか?
2019/08/31(土) 08:38:53.92ID:auI6O9iK0
>>506
うぉぉぉ
できました。ありがとうございます!
508デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/31(土) 15:26:10.82ID:pxkHJ9ge0
クロームにURL開かせるプログラムって作れるのかな
509デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/31(土) 15:34:24.66ID:pxkHJ9ge0
標準ブラウザで開くのがありました
2019/08/31(土) 17:12:50.00ID:3HNIz5om0
引数にURLを入れて起動すればいいんじゃない?
やったことないけど
2019/08/31(土) 18:30:37.90ID:OVCgKeDNa
headlessでできるよー
2019/08/31(土) 18:34:41.41ID:lSinYyRY0
>>510
どんなブラウザでも、標準でそうなってる(べき)と思ってる。meも
2019/08/31(土) 20:59:16.96ID:DOQSWUJb0
start url
って叩きゃ標準ブラウザが立ち上がるでしょ
引数ってブラウザのexeパス調べてそこに渡すの?
OSが知ってんだからOSにぶん投げればいいだけじゃん
2019/08/31(土) 22:02:09.86ID:3KJgwSNk0
>>508
Seleniumだな、それこそ。
2019/09/02(月) 13:12:29.24ID:x5YZ9uix0
Span<T>をコレクションに貯める事って出来ないんでしょうか?
受け取ったbyte[]から一部のみを必要としていますが、startIndexとlengthを一々記録するのも面倒であるため、現状は新たにnew byte[length]を作りコピーをして貯めています
別にこれでも全く困っていませんが、あんまりスマートではない気がしているので元のbyte[]を.AsSpan(startIndex, length)したものをコレクションに貯められればスッキリするのですが
2019/09/02(月) 13:30:51.46ID:DTXhuRLF0
できないよ
array[3..7]とかでSliceするとか元の配列を使うならArraySegment<T>使うとか
517デフォルトの名無しさん (アウアウウー Sa55-HWcK)
垢版 |
2019/09/02(月) 14:07:32.18ID:/BuOMso5a
へーSpanってそんな制約があるのか知らんかった
https://stackoverflow.com/questions/52484998/the-type-spanchar-may-not-be-used-as-a-type-argument
2019/09/02(月) 14:41:25.59ID:ZSYwkq3t0
>>508
例えば、Ruby, Selenium Webdriver なら、

下のファイルを、test.rb とすると、端末で、
ruby test.rb "ここにURL"
と入力すると、引数がARGV[0] に入ってくる

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new

options.add_argument('--headless')
options.add_argument('--disable-gpu')

driver = Selenium::WebDriver.for :chrome, options: options

driver.navigate.to ARGV[0] # URL
2019/09/02(月) 17:47:47.05ID:btOIY8sya
>>515
MemoryExtensions.AsMemory()を経由してSystem.Memory<T>を管理するのはどう?
2019/09/02(月) 22:24:59.33ID:yMcQzedZ0
>>518
C#で書かないならスレチ
2019/09/03(火) 00:14:45.15ID:nBDYMOwL0
なんで突然ruby?
2019/09/03(火) 00:20:55.08ID:UWVASv0T0
>>521
ソイツはいくつかのスレタイにRuby禁止といれることになった元凶だから、考えるだけ無駄よ
2019/09/03(火) 04:53:21.49ID:uBbuO65f0
これもう半分まつもとゆきひろだろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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