C#, C♯, C#相談室 Part97
!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
■Visual Studio 2017 Community(無償の統合開発環境)等はこちら
http://www.visualstudio.com/downloads/
■コードを貼る場合はこちら
http://ideone.com/
■前スレ
C#, C♯, C#相談室 Part94
https://mevius.5ch.net/test/read.cgi/tech/1553075856/
■次スレは>>970が建てる事。
建てられない場合は他を指定する事。
C#, C♯, C#相談室 Part96
https://mevius.5ch.net/test/read.cgi/tech/1639965805/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured >>188
それ全部層が別なんだ
以下俺の理解
まず下に行くほど上位層になる
様々な状況を無視して強引にフォルダにしてみると
c:\MAUI\Windows App SDK\WinUI3
・WinUI3
windows用の新しいGUIライブラリ
C++で書かれててc++にもXAMLの恩恵が前より受けられるらしいのだが魔術に近いコードを書かされるゴミ
目新しさだけで近づくと絶望感しか感じられない残念なプロダクト
↓
・Windows App SDK
windows上で現在色んな技術 win32 winrt winUI3 などがごちゃごちゃにあって
それを統一的には無理だけどアクセスできるレベルに合体させようと言う残念な仕組みのゴミ
この世にドラゴンボールのフュージョンはないと思い知らされる凄いプロダクト
↓
・MAUI
マルチプラットフォームでiPhone,android,windowsなどいろんなシステムを横断して最大公約数的に使う仕組み
本来は開発工数が下がるはずなのだが個々のシステムをかなり理解していないと何もできないゴミ
各プラットフォームでの学習+MAUIの学習と言う学習時間フルコースプロダクト
ある意味超人オリンピック MSのFAQから意訳
UWPで開発で満足してる人は焦ってWindows App SDKに移行する必要はない MSは基本的にwindowsアプリ開発のベースをUWPで見てる節がある
それ以外の人にもUWP並みの恩恵をと言うのがWindows App SDK MSもElectron使ってるし、実際ゴミしかないので
WPF以降はもうWebベースに移ったほうがいいかなって思ってる Webベースっていうと語弊があるな、ブラウザベースか >>195
ElectronってVScodeだけじゃね?
OfficeとかWinUI3っぽいしVSもC#じゃんね?
UnityもUI部分の画面はC#みたいだぞ >>191
ありがとう
そりゃいつまで経ってもWinFormsが無くならんわけだわ
なんなら一番成功してるまである >>200
VS2022でなんか対策入ってなかったっけ? >>198
Desktop版Teams糞すぎでweb版使うよね XAMLとロジックを分離することでデザインだけに特化したプロフェッショナルに任せられるとかいうけどそんなことしてるところあるのかね XAMLに文句言ってる人もべつになにかもっと良い代替案があるわけでもないんだろ?
jsonかyamlかあるいはまたなにか独自仕様でも作るか。 Windowsデスクトップアプリの次のスタンダードはWebView2に決定してるよ
C#とも何の問題もなく連携できるから、もう何も心配することはない
ただHTML/CSSだけできればよい WinFormsだけを強化/ブラッシュアップして行くだけでいいのに
今現在Microsoftが決定してることは全部間違った方向 HTML,CSS,JavaScriptほど密結合の強い組み合わせないと思うけどな
WinFormもそうか >>206
現実には無いね
Web開発ではHTML/CSSですら自分で書けるデザイナーは稀であり、デザイナーはお絵描きするだけでHTML/CSSはエンジニアが書くのが普通だ
ましてやC#エンジニアしかまず目にしないXAMLを扱えるデザイナーなんて存在しない xamlはさくっと簡易なgui作る程度なら便利ではあるがxamlだけだとboolの反転すらできないから結局コード書くことになるんでbindingクソ喰らえってなる XAMLでも何でもいいから
ひとつこれと決めてしっかり枯れるまで面倒見てほしい x:Bindだとコンバーターは普通のスタティックメソッドでコンパイル時に型チェックしてくれるから大分良くなってるんだけどね >>209
>Windowsデスクトップアプリの次のスタンダードはWebView2に決定してるよ
もう2ひねりぐらいしないとコレ常用は厳しいなあと思う
HTAの再発明の上に実行環境がフォルダ掘ったりで劣化しとるのにスタンダードになるとは到底思えない
外人にも概ね評判悪いみたいだし >>208
xamlなんて使わないで、C#でUIを簡単に定義できるようにすればいい
覚えることも減るし、コードとの親和性も良くなる >>206
扱えるデザイナとそもそもツールがないような? >>220
WPFはXAML使わずC#だけで書けるからそれが良けりゃ自分でライブラリ作れよ >>223
今flutter取り組んでるけど、
単なるデザイン処理がコード中に占める割合が高くて
めちゃ読みにくて慣れんわ GUI黎明期は間違いなくコードでUI記述してたわけで
先人がこれはあかんと否定してきたものを今更リベンジさせる必要があるんだろうか 今WinUI3で5chブラウザ作ってるんだがレスのアンカーだのハイパーリンクだと画像のリンクだのを抜き出す処理を考えてるんだがどうしたものか迷ってる
当然その書かれた位置にそのボタンやリンク貼り付けなきゃいけないんだがアンカーやリンクとその他記事は同じ行にはない(<br>で区切られてる)と仮定して<br>でSplitかけて行ごとでRegexとかを行おうと思ってるけどこの方法あってるか? >>227
自前でパーサー書くよりもその手のスクレイピングライブラリは数多あるからそれ使った方が早いと思う WebViewならこれでlinkClickedにjsで独自処理書くなりそこからC#呼び出しするなり
<a xxx="~" href="~" yyy="~" >○○○</a>
↓
<span class="link" data-info="ここに情報を入れる" onclick="linkClicked(this.getAttribute('data-info'))"
>〇〇○</span> 正規表現もこんな感じので充分やろ
<a.+?href="(.+?)".+?>(.+?)</a> >>229
置換だとコントロールが作れない(ハイパーリンクコントロールなどがそれぞれ必要) WebViewでいけたらいきかったけどMVVMのBingingができんかった…(要素名.NativeToString(HTML))なんだけどXAMLにそれがなかったわ…orz >>234
1.ビヘイビアを作る
2.ユーザーコントロールにWebViewのっけて依存関係プロパティーを設置してVMからコントロール
3.サービスを作ってVでWebViewのっけてからVMにインジェクションする
このどれかが普通かな? 初歩的な質問だと思うが書き込み失礼
win32APIでArduinoとシリアル通信をするコードを書いてる
static void Main(string[] args)
{
SerialPort serialPort;
serialPort = new SerialPort("COM3", 9600, Parity.None, 8, StopBits.One);
serialPort.Open();
while (true)
{
var pt = GetCursorPosition();
Console.WriteLine($"X:{pt.X} Y:{pt.Y}");
if ((pt.X > 500) && (pt.X < 1000) && (pt.Y > 300) && (pt.Y < 600)) {
serialPort.Write($"X:{pt.X} Y:{pt.Y}");
}
else
{
}
Thread.Sleep(100);
Console.Clear();
}
serialPort.Close();
}
Mainの部分がこんな感じなんだが、if文の中にマウスカーソル位置の範囲指定をしていて、カーソルがその範囲に入るとシリアル通信が始まってArduinoに接続したモータが動く(ここまではできた)
でも指定範囲を出るとそのモータが初期位置に戻るコードがうまく書けない。C#側でシリアル通信を中断して初期の段階に戻すような方法ある?elseの中に何書けばいいかわからない。 >>238
else
{
serialPort.Write(初期位置);
}
で何か問題あるのかな?
初期位置が何を示すのか知らんけど、シリアルはフロー制御なしなら基本垂れ流しになるから、
開始とか中断の概念は持たない
else節で100ms毎に初期位置座標を送り続けるのが嫌なら送信フラグでも持って送ったか判定すればいいのでは シリアル通信ってただのbyte列のやり取りでしかなく、中断とかの概念は存在しない。
Arduino側はreadlineかscanfかやってるだけでしょ?
この場合はifのtrue側で$"set:{},{}"、false側で$"default:"を送るのがいいんじゃない?
「初期の段階に戻す」とやらが何をするのかは知らんが、C#側が黙ってたらArduinoは何もできない >>240
Arduino側はSerial.availableで信号読み取ってる
それがいけないのか
初期の段階に戻すのは、(Arduino側でサーボモータの初期位置を0度にしてるから)指定範囲を出るとサーボモータが0度戻るようにしたい。(つまり信号が送られる前の状態に戻したい)
でもあんまりArduinoの話すると板違いって発狂するだろ サーボモーター云々の話なら座標以外に「初期の段階に戻す」のシリアル命令をarduino側で定義すればいいだけなのでは >>241
C#というよりプログラミングの初歩的な設計の話だから怒られんだろ
板違いってのはそういうことな
>>239が大体答え言ってるじゃん 電電板にArduinoスレがあるの知らないかもしれないから一応リンクを。サーボやArduino自体の使い方とかはそっちで
Arduino初心者熱烈大歓迎質問スレ part36
https://rio2016.5ch.net/test/read.cgi/denki/1672830085/ >>243
ツンツンしてんな~
相談室なんだからいいだろ パソコンのWebから秀丸の文書を開きたいのです。例えば、C:\\Data\\sample.txtというファイル
で、URLスキームというのを見つけました。
https://qiita.com/kojimadev/items/74100c8557a92939ef69
ここでレジストリにHidemaruを設定したら、秀丸を起動はできました
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\XXX]
@="URL:Hidemaru Protocol"
"URL Protocol"=""
[HKEY_CLASSES_ROOT\Hidemaru\shell\open\command]
@="\"C:\\Program Files (x86)\\Hidemaru\\Hidemaru.exe\" \"%1\""
ですが、%1 のところですが、ブラウザから呼ぶときに
Hidemaru:C:\\Data\\sample.txt
としても、Hidemaru:C:\\Data\\sample.txt というフルパスが秀丸に与えられて頭のHidemaru:が邪魔になります
なので、このスキーム部を削除するために、ここではC#を使って加工しているのですが、このC#はどこにどう配置したらいいのでしょうか
私はC++等のプログラムはできますが、C#とかは初めてです
このC#はクライエントのhtmlファイルに<script></script>とかに入れてつくるのでしょうか。やってみたのですがうまく動きません
どうしたらいいでしょうか?
クライエントは、簡単に
<!DOCTYPE html>
<html>
<head>
<title>テスト</title>
</head>
<body>
<a href="Hidemaru:C:\\Data\\sample.txt">sample.txtへのリンク</a>
</body>
</html>
としました なんか勘違いしてるっぽいな
URLスキームで、hidemaru.exeではなくて自作のexeに関連付けて、
自作のexeでmainに引数として渡されてきたURLを加工して
hidemaru.exeを改めて起動するって話だよ
C#でないとできないことではないし、C++に慣れてるならそれでCreateProcessすればいいんじゃない? ああ、そういうことかあ、2段階踏まないとダメなのね
自作の簡単なC言語のHello!みたいのを作ってその引数に
http:---が入ってきてそれを加工して秀丸を起動しないといけないってこと?
htmlファイルだけで直接起動は出来ないのね 確かURLスキームはセキュリティホールになるから世界中で使われなくなってきたはずなんだけど
今更なんで使うんだ? もし、ブラウザのHTML から、ローカルPC 内にアクセスできたら、
世界中のパソコンが乗っ取られているはずw
ローカルPC内で起動しているサーバーを通さないと、アクセスできないはず
Ruby on Rails などのLinux ウェブ系をやっていない、
Windows の香具師は、平気で恐ろしい事を考える >>246, 248
カスタムURLスキームでそういうことをする場合は、わざわざC#で作らずとも、一旦WindowsビルトインのWSH(JScript)で中継してパラメータをサニタイズするといいよ(レジストリ登録(*)さえ済ませておけばどこでも動く)
(*)下記のようにwscript.exeに対して「パラメータをサニタイズ+それを任意のプログラムに渡して起動するJScriptのパス」と「パラメータ」を渡す
C:\Windows\System32\wscript.exe "C:\script.js" "%1" >>252
ありがとう。AHKで作りました。ローカルで使うのでセキュリティとかは大丈夫です >>227
適当なパーサライブラリでASTに変換
ASTからParagraph(Microsoft.UI.Xaml.Document)を構築
RichTextBlockのBlocksにParagraphを追加 いい加減MAUI君に構うのはやめろよ
全然C#固有の問題じゃないし…
winforms,WPF,ストアアプリ、UWPで専ブラ作ってたけど
そういうところも含めて自分で考えて実装するのが醍醐味じゃないのかなあ?
考えてもわからないなら過去にオープンソースで開発されたものがたくさんあるんだからそれを見て見るとかやりようがあるんじゃないかと C#でつくったアプリをMSRemoteApp化したら、Cursorを変更しても反映されないの? 皆さんnintって使ってますか?
他とやり取りすることなく、メソッド内で完結するただの変数として使う場合、とりあえずintを使いますよね
でも今後64, 128ビット幅が主流になったときを考えれば、nintって書いといた方がいいですよね?(そんな時代がくるかはともかく)
少なくともコンパイルされた時点でnintはintと同等かそれよりも効率がいいと(個人的に)思うんですが、でも誰もnintなんて使っていません
32ビット(何なら8でも)以上あれば問題ない、というケースでnintを使わない場合というのは、単にintの方が慣れてるからだけなんでしょうか? nintとnuintはIntPtrとUIntPtrの別名なので、ポインタ(かポインタオフセット)にしか使わない
つまりはプラットフォーム依存であることの明示なので、
他のint型との相互作用(大量に出てくるだろうね)を考えるだけでかなりの脳のリソース持ってかれる 全部でBigIntegerを使っとけば間違いないよ 結局既存のメソッドを呼び出したりするときにintにキャストしなきゃいけなくなるんでしょ
ごくわずかに数字演算のパフォーマンスが改善したところで毎回キャストするコストのほうが余計にかかりそう 画面の実座標がいまだにshortで足りる範囲とは思わなかったなあ
人間はそれほど目に頼っていないということなのか shortって32767だろ
そんな解像度要るわけないじゃん 8Kディスプレイで4画面を横に並べればってとこか
当面要らんな >>262
どうせマシン語になって同じレジスタに入る分にはコストは変わらん
浮動小数点→整数とかならコスト掛かるけど >>259
普通の人は使わない
C++やwindowsのAPIやwinprocやDLLみたいのとやり取りする人間にだけ必要な機能で自分には非常にありがたい 今時点でC#内で完結する内容でnint使う局面はないと言える データベースの列名に合わせて、クラスのフィールド名を日本語で表そうと思います。
しかし、インテリセンスで頭文字でフィールドの候補を選択する便利さはアルファベットのフィールド名に劣るので、合わせ技で次のようにフィールド名を定めようと思います。
public string BookName__書籍名;
アルファベットだとより複雑な意味を持つ名称でニュアンスがつかみにくいので、このように合せ技を、使おうと思うのですがどうでしょうか。 >>271
>public string BookName__書籍名;
これだと英語名その対訳の組み合わせを間違えないように覚えてないとだめなのでメンテナンスコストがあがるだけな気がする
データディクショナリを整備したりインテリセンスのmigemo対応を頑張ってみるといいんじゃまいか? >>273
たしかに。
日本語名称だけにしておこうかと思います。
ドット打って、一覧から素直に候補を選びたいと思いました。 >>272
そういう上司いません。いるけど、専門外。 変数名に日本語使われてるの見ると、ここの開発者ゴミだなってなる 世の中にはいろんな人がいて、様々なケースがあることを想像できない世間知らず 普通はフィールドを単独の変数として扱わずにテーブル毎のクラスを作って管理する
DapperやEntityFrameworkなどのORMでは強制的にそうさせられる
これを機にORMへステップアップしてみるのも面白いと思うよ 自分一人で作って自分一人で使うのなら好きにすればいいんじゃね? >>279
ストアドプロシジャ主体の昔からのシステムなので、おっしゃるようなコードファーストの考え方と噛み合わないところがあります。
いまは、ストアドプロシジャを作成することなく、コードファーストでデータベースへの指示はEFに任せるのかなぁ。 >>287
通常は通常でしかないよ~
選択は自由
C#でプロパティを使いだしたのはget;set;自動実装で簡単になってからでそれまでは結構public fieldは使われてた
一番困るのは何でプロパティを使うべきなのか全員を納得させられる答えがない
WPFもUnityもフィールドをpublicにして使ってる
そこを突っついてプロパティにしろって言うのは違うだろと 別にお前を納得させるつもりはないからどうでもいいよ
プロパティを使うべき理由なんて調べればいくらでも出てくる 悪党のようなかっこええ捨て台詞痛み入ります!
こいつらしっかり考えたこともないし実際に使ってこなかったから言葉が弱いんだよな
誰も説得できないか弱さ