C#, C♯, C#相談室 Part95

■ このスレッドは過去ログ倉庫に格納されています
2017/10/17(火) 00:41:22.60ID:JxIRdCj70
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/

■コードを貼る場合はこちら
http://ideone.com/

■前スレ
C#, C♯, C#相談室 Part94
http://mevius.2ch.net/test/read.cgi/tech/1492843013/

■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured
2020/01/07(火) 01:21:55.02ID:j8v37+r+0
IIS Expressは?
2020/01/07(火) 01:28:51.16ID:ROWMtFOx0
C#で作られたらしいのになぜか他言語推しするやつw
2020/01/07(火) 07:07:29.19ID:HzCvb3eG0
WCFという言葉を聞いた事があるのでそれかと思います
調べてみます
ありがとうございます
2020/01/07(火) 07:12:14.82ID:HzCvb3eG0
>>717
古い技術だから推奨されないのでしょうか
後学のためにお伺いしたいです
2020/01/07(火) 16:22:44.68ID:W35nJ2lzM
.NET 5で何か変わると思う?
2020/01/07(火) 17:03:30.97ID:muv+YNpYM
.NET5は4.x以前とは全くの別物であり、何もかも変わると思っておけばいい
業務ドカタは永遠に4.8から移行しないだろうから、Web系との間で深刻な分断が生じることになる
2020/01/07(火) 18:26:40.26ID:RhWBTAz60
未だにwin7な企業もわんさかいるし4.8は向こう5年くらいは現役になっちゃうだろうねー
2020/01/07(火) 18:51:41.45ID:4CH2lMXx0
ぇー
4.8から5に移植する必要がでてくるの?
2020/01/07(火) 19:12:37.85ID:ROWMtFOx0
そんな変わらんから
2020/01/07(火) 20:12:30.06ID:muv+YNpYM
>>730
WebFormsが使えないから、既存の.NETアプリの半分くらいは完全に死亡するよ
2020/01/07(火) 20:26:57.89ID:muv+YNpYM
あとヤバいのはWCF&.NET Remoting死亡あたりだな
経験上、Classic ASP.NETは使ってるつもりがなくてもユーティリティ類を使ってしまってるケースが結構多くて、大規模なアプリはだいたい死ぬ
2020/01/07(火) 20:32:52.17ID:muv+YNpYM
あと厄介なのがNuGetの依存関係ね
SDKのバージョンを上げるとだいたいNuGetパッケージのバージョンアップ祭りになるんで、だいたいどっかの破壊的変更を踏んで逝く
2020/01/07(火) 22:31:07.85ID:o9NgJRxS0
>>728
まだVB6アプリが現役なんだぜ
FW4.8は2050年くらいまで持つんじゃね?w
2020/01/07(火) 23:04:37.23ID:wcxyvOp00
>>734
VB6はC#より早いしWinFormsと見た目もそれほど変わらんからな
2020/01/07(火) 23:20:19.80ID:b0Bey+qG0
VS2010以降の操作性に慣れたらVB6には戻りたくないわ
2020/01/07(火) 23:26:15.05ID:8JDfUSzea
.NET CoreはLTSでも3年でサポートが切れる
もし.NET5も同じならドカタITでは互換性以前に検討にも値しないレベル
738デフォルトの名無しさん (ワッチョイ 7fad-wbog)
垢版 |
2020/01/08(水) 00:38:18.01ID:HFuLNThA0
Java8的な感じで残りそうな気もする
4.8で打ち止めなら枯れて安定してるし
2020/01/08(水) 17:07:05.84ID:Jh9kZvPt0
WinFormのTextboxやRichTextBoxを使用して、
エスケープシーケンスの様に文字単位で色を変えることは可能でしょうか?

String str = "例文:\red赤\r\n \green緑\r\n \black黒\r\n"; // \red \green \blackは仮想のエスケープシーケンス
TextBox.Text = str;

例えば上記で、赤・緑・黒の色がそれぞれ変えるのは可能でしょうか?
それともエスケープシーケンスは改行やTABにだけ対応していて、
色までは対応していなくて不可能でしょうか?
2020/01/08(水) 17:42:23.45ID:S7vQ7ZowM
\redって赤と復帰文字+edの区別つかないじゃん

それはともかくRichTextBoxとRTFを使えばまあ似たようなことはできる
RTFを一から書くのは拷問だけど
741デフォルトの名無しさん (アウアウウー Saa3-7oRq)
垢版 |
2020/01/08(水) 18:32:11.60ID:6iphn5xQa
>>739
ちょっと何言ってるのかよく分からないけど、
C#のコードでエスケープシーケンスを含む文字列リテラルを書いた時、
それがそのままバイナリになると勘違いしてない?

あれ、コンパイラが対応する文字に置き換えてるんだよw
2020/01/11(土) 10:46:33.04ID:IVNUyUW+0
C#でできることってすべてF#で(多少複雑になったとしても)実現できますか?
同じ共通言語基盤上にあってもC#だけで可能なことってあるんでしょうか。
(もちろん、どちらも計算完備なのでC#でできることは
それこそBASICでもできるでしょうが、そういう意味ではなくて
.NET上での共通性の話です)
2020/01/11(土) 12:49:57.55ID:Uc6AtsCZM
>>742
もちろん
チーム全員が関数型言語に習熟しているならあえてC#を選択する理由はないよ
2020/01/11(土) 16:36:56.68ID:IVNUyUW+0
>>743
ありがとうございます。

(ちなみにですが、関数型っていうか対話的に実行できる仕組みが欲しかったんですよね)
2020/01/14(火) 09:13:37.09ID:/tPlPF6x0
https://www.atmarkit.co.jp/ait/articles/1710/03/news018.html
一応C#も対話的に実行できる
2020/01/14(火) 09:19:18.61ID:HiotJy5MM
>>745
へーこれってどんな仕組み?コンパイル必要としてないの?
2020/01/15(水) 18:27:50.06ID:YlxQUfnE0
>>745
知りませんでした!
折角教えてくださった>>743様には申し訳ないのですが
C#インタラクティブを使ったほうが私めの望みを満してくれるので
そちらにします。
2020/01/15(水) 21:17:39.40ID:jOuGOKj7M
なんだと…ゴゴゴゴ
2020/01/15(水) 23:02:14.43ID:k9iUnicj0
C# Interactive, 64bitで実行できるようになるのはいつなのかねえ。便利なんだけどたまに困る。
xamarin workbookとかも代替であるんだろうけど。
750デフォルトの名無しさん (ワッチョイ cd90-JESV)
垢版 |
2020/01/16(木) 00:16:18.83ID:CC5bpFwG0
誰だってわかりやすくて書きやすい言語でプログラミングしたいに決まってんじゃん

C#はまだわかるけど難解ぶってるオナニー言語は滅んだ方がいいね
2020/01/17(金) 01:22:15.96ID:atTN5w3j0
まあ、たしかに defun(((((( なんか嫌だもんな。
2020/01/24(金) 22:14:55.39ID:k9osu5pp0
forおじさんなるキーワードを知ったんだけど今forは使っちゃいかんの?
c#には直接関係ないけどさ
2020/01/24(金) 22:23:17.00ID:ckgx8D9Z0
他にbetterな方法がある場合でも、とにかくforをつかえってのを揶揄してるだけでしょ
2020/01/24(金) 22:59:35.08ID:1f1Z8E2rM
マーティンも今どきforは臭いからパイプライン使えみたいなこと言ってたな
2020/02/04(火) 07:23:29.54ID:2P9jYwzY0
ifとforで何重にもネストさせるやつ未だにいるからな
レビューで暴言吐きそうになって困るからやめてほしい
2020/02/04(火) 08:13:40.65ID:oN9vo+PdH
>>755
for回さなくていいって記事読んだとき「なんじゃこりゃ〜」って叫んだわ
あ、おわかりのとおりわたし爺ですw
2020/02/04(火) 12:44:04.58ID:M0ahQJ780
見た目だけじゃなくて処理効率も変わるのかな?
C#みたいな言語だとforだろうがmapだろうがコンパイラがよしなに最適化してくれそう(適当)
2020/02/04(火) 19:03:41.12ID:XAK/YcTOr
実際意味は違うので用途次第ということ
2020/02/04(火) 22:00:23.17ID:kfb5o96m0
期待通りの順番で処理してもらえるのか?
不安なんでfor使ったりすることあるね。
2020/02/04(火) 22:07:47.88ID:Z8KA+tSJM
順番が気になる処理はなるべく書かない
2020/02/04(火) 22:56:53.13ID:ozqUNPd80
馬鹿の一つ覚え
762デフォルトの名無しさん (ワッチョイ 9f6a-56gX)
垢版 |
2020/02/05(水) 00:50:35.93ID:+dC8QpOa0
>>754
すまん、ジジイなんで勉強したいからソース教えてほしい
2020/02/05(水) 13:31:41.51ID:OSDzuje90
>>757
linqとforeach、forだと処理効率かなり違う
だからといってlinqで書けるものをforで書く程ではないが
2020/02/05(水) 14:05:00.81ID:AaNsO0iwM
可読性より性能重視でfor使いまくることあるです
2020/02/05(水) 14:14:25.44ID:N1rQ6Y7rM
性能が必要なら言語かえますし
2020/02/05(水) 18:36:26.77ID:NPiSCXLeH
アセンブラ最速(要最適化)
2020/02/05(水) 21:42:19.79ID:qmME163kr
レベル高いのはlinqやforをちゃんと使い分けれる人
レベルが低い人はどちらかしか使わない人
2020/02/05(水) 23:51:29.21ID:JHMrCxaG0
Linqってnullがあった時面倒な印象がある
実装当時はselectみたいな予約語を中途半端に実装したってどっかで見た記憶があるけど増えたのかね?
769デフォルトの名無しさん (ワッチョイ 5797-IOUD)
垢版 |
2020/02/06(木) 11:04:45.02ID:y+neP3Z40
もちろんLINQでもforでも書けるけど、LINQで遅そうな処理で、それが作っている
ソフトの決定的なパフォーマンス問題につながりそうなら、forで書いてみて
ベンチマークしてどっちを採用するか決めるかな。
forの方がありとあらゆる言語で書ける書き方だから当然書けるけど、
LINQの方はPythonの内包表記やmap/filter/reduceの書き方に近くいから
こっちも当然書けるし、短いし一時変数用意しなくていいから基本LINQ使っちゃうよね。
2020/02/06(木) 12:27:26.13ID:BIpKXfQOM
forでないと書けないってコードが汚いだけの場合が殆どだからまずそっちをリファクタリングする
すると自然とLINQで書けるようになる
LINQで遅いのは件数が多すぎるかキャッシュを使ってない場合なので実はforに変えただけじゃたかが知れてる
2020/02/06(木) 18:42:57.79ID:ePr9F6TEr
あまり大したことに使ってなさそう
2020/02/06(木) 18:45:07.13ID:ePr9F6TEr
> forでないと書けないってコードが汚いだけの場合が殆ど

そうは思わないけどw
2020/02/06(木) 18:54:05.90ID:ePr9F6TEr
>>769
これも一見もっともそうなことを書いてるけどよく見ると変だよね
forでも書いてるならベンチ取る必要ない
2020/02/06(木) 18:55:11.26ID:ePr9F6TEr
linqでしか書けない人は最下層
forでしか書けない人はそのやや上
2020/02/06(木) 19:33:48.33ID:BIpKXfQOM
forでしか書かない人は使い物にならないおじいさん
無理してでもLINQでしか書かないのはまだまだ研鑽が足りない
意識しなくても自然とLINQになってるのが達人プログラマ
2020/02/06(木) 20:55:07.31ID:WBT6cCNm0
POSTとかGETのレスポンス速度って、自分の回線速度と相手側のサーバー速度依存ですか?
プログラムの処理でコンマ数秒でも早くする方法ってあったりします?
2020/02/06(木) 21:12:13.83ID:ePr9F6TEr
普通はないよ
アメリカとかにPOSTして帰って来てるんだとしたらそもそも物理的な距離も問題になる
2020/02/06(木) 21:16:32.05ID:ePr9F6TEr
どうでもいいけど回線速度と言うのも変な表現だな
帯域依存だな

最初のレスポンス自体が帰ってくる速度は同じだけど取れる帯域が広いと早くダウンロードが終わる
2020/02/06(木) 22:57:37.84ID:O+zcmlkO0
ダウンロードの時間じゃなくてレスポンスの話だろ
帯域よりレイテンシのほうが問題だと思うが
2020/02/07(金) 08:11:56.59ID:EMrYQo7/H
相手側のサーバーまで全部依存ですよね
ちなみに、普通にwebとかで見えてるサーバーは、必ずping返してくれるの?
2020/02/07(金) 12:33:07.85ID:etaMDs5Yr
ping返さないサーバはいくらでもある
782デフォルトの名無しさん (アウウィフ FF9b-VM48)
垢版 |
2020/02/07(金) 17:30:10.02ID:PWhN+bN7F
>>776
htmlに埋め込まれてるアンカーを
バックグラウンドで先読みするタイプのブラウザがあった
評判は悪いみたいだが
2020/02/07(金) 20:27:13.28ID:q5ptBTCZa
フォームデータなのに?
784デフォルトの名無しさん (ワッチョイ 571d-uqPE)
垢版 |
2020/02/07(金) 23:07:36.53ID:GxNDg+Fe0
【与沢翼】労働収入を高くしても無駄!税金でほとんど持っていかれますよ。
金持ちになるにはたった2つしか方法がない
https://www.youtube.com/watch?v=A-5lQ2rDmc0
【与沢翼】サラリーマンとして生きるのはリスクでしかない。従業員は創業者に
利用されているだけだということに気づきなさい
https://www.youtube.com/watch?v=uPoTvbr5VDk&;t=78s
【与沢翼】「世の中は罠だらけ。これに気づかない人はカモにされ続ける。」【思考の革命】
https://www.youtube.com/watch?v=qUk7HFabMeQ&;t=70s
【与沢翼】現状に対する疑問を持てない人はずっと辛い労働をして生きてください。
今自分達が不自由であるということに気づかない人はどうぞご勝手に
https://www.youtube.com/watch?v=YGykF9IHv-w&;t=41s
【与沢翼】時間を売るような働き方をしてはいけない。自分の24時間をどれだけ
増やせるかという発想で仕事しなさい。最終決定権がない仕事はビジネスとは呼べませんよ
https://www.youtube.com/watch?v=g0WXpcqg4oA&;t=51s
785デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/08(土) 18:20:20.80ID:0YppiA+B0
OS:Rasbian Stretch
ランタイム:Mono JIT compiler version 4.6.2 (Debian 4.6.2.7+dfsg-1)
ソース:https://i.imgur.com/cFLOcYN.png
パッケージ:https://i.imgur.com/bWRI0Zg.png
エラー:Method 'System.Net.ServicePointManager.CloseConnectionGroups' not found.

Windowsでは正常に動作します。
エラーの原因と解決策を教えてください。
786デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/08(土) 18:23:37.92ID:0YppiA+B0
AngleSharpを入れるとこのエラーがでます。
AngleSharpを入れるとバイナリのフォルダにSystem.***という大量のDLLができます。
787デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/08(土) 18:24:23.44ID:0YppiA+B0
ターゲットは.NET Framework4.6.1です
2020/02/08(土) 19:17:58.13ID:1TiVu9qyr
>>787
Linux用には.Net Framework 4.6.1はないんじゃない?

.net coreと.net frameworkは別物
789デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/08(土) 19:25:53.91ID:0YppiA+B0
>>788
回答ありがとうございます。
Mono4.6.2と.NET Framework4.6.1は互換性ありませんか
790デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/08(土) 19:31:11.67ID:0YppiA+B0
AngleSharpを入れるとそれを使用しなくても関係ないところでエラーが出る理由がわかりませんね
 
2020/02/08(土) 19:41:46.38ID:1TiVu9qyr
バージョンがあってないからだろ
初心者向けのふらっとスレに行け

まず
.Netにはいろいろ種類があると言うことをしり特性を知れ
次に.net standardが何か調べろ
そして使いたいフレームワークが.net standardで何に当たるか調べろ

次にServicePointManager クラスが自分の使いたいフレームワークで使えるかどうかMSのサイトをみて調べろ
792デフォルトの名無しさん (ワッチョイ d735-oJhu)
垢版 |
2020/02/08(土) 19:54:30.33ID:0YppiA+B0
こちらの質問は却下します
2020/02/08(土) 19:59:03.78ID:1TiVu9qyr
standardというパワー綴り
2020/02/13(木) 11:12:59.64ID:cLFC91tC0
startupでデフォルトのDB接続先でapp.CreatePerOwinContextを登録してるのだが
途中でDB接続先を変更出来たりしないですか?
コントローラーのOnActionExecutingでfilterContext.HttpContext.GetOwinContext().Set(wkUserManager);
で変更したんだが、他画面にいくとリセットされてるというか元が変わってないというか
2020/02/13(木) 19:44:16.71ID:o7NRbkWy0
ライブラリの話が出ているので自分も質問させて頂きたいんですが、SevenZipSharp(by squid-box)使ってる方いないでしょうか?
分割されたRAR5.0を解凍する際にファイルが壊れてる的なエラーが出て解凍できないことがあるのはバグでしょうか?(純正7Zipアプリでなら正常に解凍できるため実際には壊れていない)
どうやら1GB程以上の大きい分割ファイルだとそうなることが多いようで、数百MB程度の分割ファイルなら問題なく解凍は出来ます
単体のRARであれば1GB以上の巨大圧縮も解凍できるためメモリ周りのエラーと言う事でもなさそうなのですが
2020/02/15(土) 13:09:48.07ID:M9LrwgB50
TabControl上の『選択されていないTabPage上の』ボタンをプログラムからクリックしたいんだが、どうすればいいのだ?

試したことは以下。
((Button^)ctrl)->PerformClick(); // ボタンが見えてないと(ボタンのあるTabPageが選択されていないと)ClickEventが発生しない(以下※1)
((Button^)ctrl)->OnClick(gcnew EventArgs()); // protected なメソッドなので呼べない
((Button^)ctrl)->Click->DynamicInvoke(gcnew array<Object^>(2){ctrl,gcnew EventArgs()}); // C3918、データメンバではないため、マルチキャストデリゲートに直接アクセス出来ない
((Button^)ctrl)->Click(ctrl, gcnew EventArgs()); // C3718, Clickにraiseメソッドがないから駄目

環境
.NET Framework3.5(Form), VC++/CLI, VS2008EE

目的
GUIの画面をバッチ処理しようとしていて、
ボタンの名前をスクリプトに書いておけば順にクリックしてくれる、みたいなものを作っている。
見えていればPerformClickは動作するので、今はその都度SelectedTabを切り替えて逃げているが、
バッチ中に一々画面が変わるので出来ればそのままで処理したい。
2020/02/15(土) 13:10:05.98ID:M9LrwgB50
※1
書いてあることとはこちらの状況と合致しているわけでもないが、とにかく見えてないとPerformClickは動作しない。
> TabControl.TabPages コレクションに少なくとも1つの TabPage が含まれている場合
> (Click、DoubleClick、MouseDown、MouseUp、MouseHover、MouseEnter、MouseLeave、MouseMove)、
> TabControl クラスでは、次のイベントは発生しません。 コレクションに少なくとも1つの TabPage が存在し、
> ユーザーがタブコントロールのヘッダー (TabPage 名が表示される) と対話する場合、
> TabControl は適切なイベントを発生させます。
> ただし、ユーザーの操作がタブページのクライアント領域内にある場合、TabPage は適切なイベントを発生させます。
> https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.click?view=netframework-4.8
自動翻訳がイマイチなので英語も。
> The following events are not raised for the TabControl class unless there is at least one TabPage in the TabControl.
> TabPages collection: Click, DoubleClick, MouseDown, MouseUp, MouseHover, MouseEnter, MouseLeave and MouseMove.
> If there is at least one TabPage in the collection, and the user interacts with the tab control's header (where the TabPage names appear), the TabControl raises the appropriate event.
> However, if the user interaction is within the client area of the tab page, the TabPage raises the appropriate event.
> https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.click?view=netframework-4.8
798デフォルトの名無しさん (アウアウウー Sac3-+wK4)
垢版 |
2020/02/15(土) 14:11:22.37ID:D6Qol+wpa
>>796
表示されているかどうかの問題ではないと思う。

TabPageのコンテナ(およびその上のコントロール)はそのページが初めて
表示されるまで「作成」(CreateControl)されない仕様だった気が。

知らんけど
2020/02/15(土) 14:34:26.54ID:M9LrwgB50
>>798
過去一度でも表示されたことがあるか、なら、確実に一度は表示されている。(初期画面のタブなので)
そして一応、直前に表示した状況でも試してみたが、やはりPerformClickは反応しない。
(「スクリプト実行ボタン」と「スクリプトから押したいボタン」が同一TabControlの別ページにあるので、
タブを切り替えた直後に実行ボタンを押してみたが、駄目だった)

ただしその挙動は少し覚えがあるというか、
大量にコントロールを並べていて描画がもたつく場合、タブを切り替える毎に再描画している雰囲気はあるから、
それに近い可能性(見えてないタブのコントロールを剥がすとか)もありえるとは思う。
2020/02/15(土) 15:26:28.37ID:cTwFsuY/0
リファレンスには書いてないっぽいけど
ControlのCanSelectがtrueじゃないとPerformClick()はイベントを発生させない
https://referencesource.microsoft.com/#system.windows.forms/winforms/managed/system/winforms/Button.cs,346

ボタン側を拡張したりボタンが呼び出してるメソッドを直接呼べない状況なら
素直にTabをSelectする以外にないんじゃないかな
2020/02/15(土) 15:33:35.56ID:cTwFsuY/0
InvokeOnClick()呼べる?
こっちなら何もチェックしてないっぽいけど
2020/02/15(土) 15:39:09.67ID:px7CuDIEM
別にボタン押すとこまで律儀に再現しなくても良いよ
イベントハンドラかその中で呼んでるサービスを直接呼び出せばいい
803デフォルトの名無しさん (アウアウウー Sac3-+wK4)
垢版 |
2020/02/15(土) 15:48:29.89ID:D6Qol+wpa
>>799
なるほど確かに初回表示済みかどうかにかかわらず表示されてない時はダネだねw
これなら問題なかった
static class Extensions
{
  public static void RaiseClick(this Control control)
  {
    var t = control.GetType();
    var m = t.GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
    m.Invoke(control, new[] { EventArgs.Empty });
  }
}
2020/02/15(土) 15:58:13.85ID:M9LrwgB50
>>800
おお、ありがとう。
ググりまくりはしたが、ソースコードをチェックするという発想はなかった。

> このプロパティは、System.Windows.Forms.ControlStyles の Selectable 値が trueに設定されていて、
> 別のコントロールに含まれていて、コントロール自体が表示され、
> 有効になっていて、すべての親コントロールが表示され、有効になっている場合に true を返します。
> https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.control.canselect?view=netframework-4.8#System_Windows_Forms_Control_CanSelect
なんだかよく分からんが、かなり条件が深いのは分かった。
CanSelectはリードオンリーだから、素直に表示させるのが一番マシなようだ。

>>801
InvokeOnClickもprotectedなので駄目のようだ。(C3767)

ただ、なんでCanSelectなんだよ?とは思ったので、なるほどInvokeOnClickか!とも一瞬思ったが。
何がしたいんだよこの仕様(CanSelect必須)は。
GUIが有効か見ているわけだが、それをプログラムからの操作に噛ませる意味はないはず。
2020/02/15(土) 16:08:02.82ID:M9LrwgB50
>>803
ありがとう。

ただ、リフレクションは嵌る原因になるので出来る限り回避している。理由は以下。
・C#ならさておき、VC++だとググッてもヒットしない。
・ならば勿論C#を参考にするわけだが、本来同じCLRでMSILなので全く同一の筈なのだが、
 何故か一部異なっていたりして、そこで嵌る。(というか嵌ったことがある)
勿論使ってはいるが。
ただ、確かに今回はリフレクションでも対応出来る状況なので、最終的には使うかもしれないけど。
2020/02/15(土) 16:16:32.88ID:ZLgOs4gBa
バッチ処理なのになんでFormsなんだ?
2020/02/15(土) 16:45:32.12ID:9gQJd/YW0
IEコンポーネントの代替品って何? ChromiumベースEdge のものは既に用意されてるの?
808デフォルトの名無しさん (アウアウウー Sac3-+wK4)
垢版 |
2020/02/15(土) 17:23:14.18ID:D6Qol+wpa
>>805
ならこれでも出来た。
何か気づいてない弊害があったらごめんね
public static void RaiseClick(this Button button)
{
  var parent = button.Parent;
  if(parent is TabPage)
  {
    button.Parent = null;
    button.PerformClick();
    button.Parent = parent;
  }
}

個人的にはこういうバットノウハウ感全開のコードは嫌いw
2020/02/15(土) 17:54:52.64ID:M9LrwgB50
>>808
さすがに動的に剥がすのは色々副作用が発生しそうで怖い。
今のところ以下のコードでやっている。このままか、>>803にするかのどちらかだと思う。

if (ctrl->Parent->GetType()->Name=="TabPage") ((TabControl^)ctrl->Parent->Parent)->SelectedTab = (TabPage^)ctrl->Parent;
((Button^)ctrl)->PerformClick();

キャストが入ってうざくなっているが、要はボタンの親のタブページをその都度選択(表示)させている。
これで動いている。ただしタブが勝手に切り替わるので知らなければギョッとする。
直後に戻せばいいだけかもしれないが、それはそれで無駄にイベントが発生するし、とりあえず放置だ。
仕様だと分かったので諦めはつく。

しばらくこれで試して、問題がなければこのまま、といったところ。
現状TabControl内のTabControlなんて無いから、おそらくこの方法で問題ないと思っている。
(TabControlが入れ子になっている場合、おそらくリフレクションしかない)
2020/02/15(土) 17:56:21.16ID:KAWVCWpT0
ボタンのコードを呼び出すのは駄目なの?
2020/02/15(土) 18:28:50.09ID:M9LrwgB50
>>809訂正
× TabControlが入れ子になっている場合
○ TabControl内にGroupBox等があり、そこにボタンがある場合

809のコードだと直接の親しか見てないので、
TabControl内のボタンは階層的に直接TabPageに貼られている必要がある。
そうでなければ親を再帰で辿るか、リフレクションするか、だろう。
2020/02/15(土) 19:38:08.16ID:VwQX+D5fr
馬鹿がこんがらがってるイメージ

ボタンクリックのイベントハンドラを表示
private void button1_Click(object sender, EventArgs e)
{
//
}
始めの{と終わりの}の間をすべて選択する
右クリック クイックアクションとリファクタリングを選択
メソッドの抽出を選択
適用をクリック
2020/02/15(土) 19:45:46.32ID:nU62WrWUM
>>812
だよなあ
おそらく「ボタンを押すこと」が目的化してしまってる
クライアントの要件は多分そういうことじゃない
814デフォルトの名無しさん (アウアウウー Sac3-+wK4)
垢版 |
2020/02/15(土) 20:31:48.09ID:D6Qol+wpa
>>812
その程度の話なら既に指摘されてるよw

イベントハンドラは動的に変更されるかもしれないし、
ラムダ式や引数で与えられるデリゲートかもしれない。

だから普通質問者さんの問題意識は理解できると思うよw
イキってる君以外の人にはw
2020/02/15(土) 22:59:55.86ID:ZLgOs4gBa
>>814
その動的に変わるかもしれない処理とやらを抽出するだけだろ?

Form: btnFoo.Click += this.Model.Foo;

Model: void Foo() => _foo?.Invoke(); // _fooは動的に変化するかもしれない

スクリプト(オレオレマクロの文法がわからんから例としてpowershell)
$form = $AppHost.Container.Resolve("MyForm")
$form.Model.Foo()
画面を見なくていいならより直接的に
$model = $AppHost.Container.Resolve("MyFormModel")
$model.Foo()
816デフォルトの名無しさん (アウアウウー Sac3-+wK4)
垢版 |
2020/02/16(日) 00:18:48.74ID:s243OsDZa
なんかもうバカの壁だねw

ボタンのクリックをシミュレートしたいというのは十分理解できる話だし、
それをなるべくそのまま表現できるようなコードを書きたい、という動機も
普通に理解できる話だと思うんだけど。

>>815的な発想の問題点は、

(1) プログラマの意図と実際のコードに乖離がある

(2) だから呼び出しているメソッドが今本当にButtonのイベントハンドラに登録されているものと
同一であるか、という検証の必要性が発生する。

(3) ButtonのPerformClickの「仕様バグ」を回避するため、
という非本質的な目的のためにコードの設計に手を入れるのは本末転倒

なにが「だろ?」なんだろうね
スギちゃんかよだっせーwww
817デフォルトの名無しさん (アウアウウー Sac3-+wK4)
垢版 |
2020/02/16(日) 00:20:18.56ID:s243OsDZa
>>813の人も思いっきり倒錯してるねw
2020/02/16(日) 00:28:16.86ID:lYNu13iwM
>>816
それより前の問題としてプログラマの意図がまず間違ってんだよ
魚をさばくのにノコギリでやろうとしてる状態
そこを正してからじゃないと話にならない
正さずにむりやり進めようとしてるからボタンクリックエミュレートなどという頭の悪い発想に固執する
挙げ句の果に画面上で見えてないと処理が走らない(涙)なんてバカバカしい罠にどハマリしちゃってるわけだ
はっきり言ってリフレクションはハマりやすいからダメだなんて言ってる場合じゃないよ
2020/02/16(日) 00:38:37.35ID:lYNu13iwM
だいたいクライアントのやりたいことは自社アプケーションのオートメーションサポートだろうよ
それを素人の思いつきレベルの発想でUIのオートメーションに目的をすり替えたのが運の尽きだわな
レイヤの考え方が全くわかってないアマチュアの設計だからすんなりうまく行くはずがないんだ
見えてないと発火しないこと以外にいったいどんな罠が潜んでるかわかったもんじゃない
俺が提案した方法ならUIインフラに依存しなくなるから実行時の安定性と罠が少ないぶん高い生産性が期待できる
2020/02/16(日) 01:57:42.29ID:iNVxJNOu0
アセンブリが自分や所属チーム/組織のコントロール下にないんじゃないのかな
違う理由かもしれないがそれと同じような制約下での話だと思われる
2020/02/16(日) 03:27:20.73ID:QSu9wuIh0
>>796

>GUIの画面をバッチ処理しようとしていて
UiPathとかAutoIt使いな。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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