ふらっと C#,C♯,C#(初心者用) Part144
レス数が1000を超えています。これ以上書き込みはできません。
!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 もしわかったら助けてください
VS2017 c# Windowsフォームで、textboxのKeyDownイベントで別のTextBoxをアクティブにする関数を作ったのですが
なぜかフォームが非アクティブになってしまいます
KeyDownイベントでなく、テストボタンを作ってClickイベントで関数を呼び出すと正常に動作します
何か考えられる原因ってあるでしょうか… >>3
下キーで別のコントロールにフォーカスが移ってるのでは? フォームが非アクティブ=別フォームor
デスクトップがアクティブでは無く? keydownでなくkeyupイベントで処理したら理想通りになりました
どうして…?
>>4
multilineのテキストボックスで移動はしていないようです
>>6
そもそもフォームを1つしか作っていないんです キーダウン後にセットフォーカスなんじゃん?
キーアップだとセットフォーカス後なのでうまくいくとか? >>3
こういうことやりたいの?
http://ideone.com/JvzEb7
Atexで入力しようとするとBtexがアクティブになってそっちに文字入力される
ただしAtexで入力された最初の一文字はこのコードだと捨てられるから、それも入力したいのならもうひと手間かけないと
ここ参考に
TextBoxに数字しか入力できないようにする
https://dobon.net/vb/dotnet/control/numerictextbox.html#section1
KeyDownでもできるけどKeyPressでやるのがより一般的っぽい
ただe.Handled = trueやe.SuppressKeyPressを外してもフォームが非アクティブになるのは無いから、それは書いてない別の原因があるはず DateTimePickerの継承コントロールを作っているのですが、カレンダーや手入力で日付を変更しても、Valueの値が変わりません。
何が原因でしょうか?
※Deleteキーが押されたらnullになり、その他のキーが押されたら、nullになる前の日付が表示されるようにしたつもりです。
http://ideone.com/BRM6jo ほんとにしょーもない見落としでした(´・ω・`)
コンストラクタに、
TextChanged += (sender,e) => Value = DateTime.Parse(Text);
入れたら動きました。 正常な日付 or null のどっちかにしかならない必要があるので、以下のほうがよかったです。
TextChanged += (sender, e) =>
{
if (String.IsNullOrWhiteSpace(Text))
Value = null;
else
Value = DateTime.Parse(Text);
}; ASP.NETのWEBフォームで特定のページを誰かが開いていたら他の人は開けないようにしたいのですがどういう実装で実現出来るでしょうか?
ページをオープン中という状態を知る術が見付からずに困っています
C#で作っているというだけで使う技術は多岐に及びそうですがよろしくお願いします 定期的にajaxで閲覧中のステータスを5秒おきにサーバに送信して
最後の送信から15秒くらいの時間が経過したら
他のユーザーにアクセスを許可すれば良いんじゃね? ちょうどそんな実装してるけど、ロック掛ける(+掛けれなかったら掛けてる奴返す)ためのajaxで呼ぶAPIと、ロック解除するAPI作ってる。
ロックはTTL60秒。クライアントから30秒ごとに延長かけてる。
JSのoncloseかなんかでロック解除API叩いてるけど、たたき漏れは今のところ無い。 webからダウンロードした画像をメモリ上に保持してるんだけど
dispose忘れがなかなか厄介
GCでdisposeさせるかそれに近い動作をするものってないものかな >>16
逆にGCは何をすると思ってるの?
マネージドの場合事実上「GCでDispose」されると思っていいはず。
だから本当に怖いのはdispose忘れじゃなくて、
イベントの購読の解除を忘れるとかして参照を間接的に握られ続けること すみません。
予想通りに動いたと思ってたんですが、"Value = 値" という方法で値を設定すると反映されません。
どうすればよいでしょうか・・・
http://ideone.com/UcN1cB Value = DateTime.Parse(Text);
じゃなくて
DateTime.TryParseを使って、日付に変換できる場合のみセット そりゃbase.Valueに値設定しなけりゃ表示変わらんでしょ お知恵をお借りしたく。。。
public struct LogsData
{
public double total;
public long starttime;
}
var aaa = new LIST<LogsData>();
totalだけが入ったLISTを作りたい
ぶん回す方法はできたのだがもっとスマートな方法はないだろうか。
var bbb = new List<double>();
foreach (var ccc in aaa)
{
bbb.Add(ccc.total);
} var bbb = aaa.Select( x=> x.total ).ToList(); >>14
なる程
webを質問するとC#の枠組みを超えてしまうのでアレですが有用なアイデアありがとうございます >>17
てっきりbitmapは明示的にdisposeしないとメモリリークするのかと思ってたんだけど
都度GC.Collect()してみたらdisposeしなくても大丈夫だったわ
ありがと >>26
disposeすると今すぐメモリを解放してくれる。しないとガベコレが走るタイミングまで待たされる。GC.Collectは今すぐガベコレする。 >>27
大手の担当者(客)とか絶対理解できないから定期実行(十分に一度)してるわ
やらないと
リークだリークだうるせぇんだこれが >>27
bitmapを凄い勢いで作るプログラムを前に書いたら
メモリ不足で例外を吐いた事があったのよ
んでGCで解放されないのかと思ってたわ >>29
でもVSのモニタを見るとGCって結構な短期間で動いてくれるんだよな
GC.Collectはブラシーボ効果しかない Bitmapはファイナライザを実装してるから2回GCが走らないと解放されない
あと頻繁に動いてるのは最も浅い世代のGen0GCで、GCを生き残って昇格してしまったオブジェクトを回収させるにはGC.Collectは有効 >>30
遅いマシンで
割と重めのアプリを一日経ってからやってみ
3分ぐらいはフリーズするよ
stop the worldというだけはある >>30
試してみたらGCが一度も走らずに即死した
GC.Collectしないとマズそう
https://i.imgur.com/sR1A0ME.jpg 時間はかかっても、MSゴシックなら正常に動作するんですが
游ゴシックを指定すると、なぜか文字が重なり合ったりして正常に表示されません
g.DrawString(new String('@', 5000000), drawFont, Brushes.Black, 0, 0); >>34
描画先に十分なスペースはあるの?
フォントサイズ減らしたら改善するとかは無い?
それで無理なら一行ずつ描画するしかないな あ、Rectangle指定しないと折り返さないのか?
https://dobon.net/vb/dotnet/graphics/drawstring.html
>>36
意図的に無茶な指定しているのなら不具合が起こってもしょうがないと思う Webbrowser で表示されているある部分をクリックしてAjaxで動的にHTMLが変化する場合
documentcompleted は発生しませんが
HTMLの変化を検知するにはどうするのがいいのでしょうか?
タイマーを使ってWebbrowser のHMTLの内容を比較するくらいしかないですかね? >>38
UWPのWebViewなら、スクリプトを直接呼び出して完了待ちとか出来るよ
FormsやWPFからでも使えるようになっているみたいだから頑張ればなんとかなる
勿論UWPで作るってのもアリだが >>39
理想的な動作です
UWPでやってみます
ありがとうございます どんな処理に対してどんな例外処理をすればよいのか理解出来ないのですが、
「〇〇メソッドが投げる可能性がある例外」という感じの一覧みたいなものってないでしょうか? >>41
Docsの.NET Framework API リファレンスの各メソッドの説明に載ってる >>41
他にも、VisualStudio上でメソッドにカーソルを合わせると出てくるツールチップで「例外」箇所に型が載っていたり
F12で定義に移動した後のコメント中で「例外」箇所に型と理由が載っていたりする >>38
WinFormのWebBrowserでajaxで読み込みはタイマーみたいなの使って取れてる ざっくりで失礼します。
面白半分にc#でエロや風俗系を作れたらいいなと思ったのですが案ありますか?
なかなか思いつかなくてw >>45
C#+Unityのエロゲなんかいっぱいあるでしょ
そしてこの板で聞くことじゃない >>46
言われてみればそうですね
失礼しました。 変態さんでいっぱいだ
前スレのエロ画像スクレイピングマンは成功したのかな エロ画像なんて厳選して保存しないとすぐ500GBぐらいいくだろうに 動画ならともかく画像で500GBはベテランの領域。 コンテキストメニューを定義して、それを別コントロールに割り当てて、
それを更に別のフォームからクリックで実行したく、下記の構造にしているのですが、ControlExの公開プロパティになっている点に、なんとなく違和感感じています。
もうちょっと綺麗な構造に出来ないでしょうか?
public class ContextMenuEx : ContextMenu
{
public ToolStripItem OpenMenu { get; private set; }
}
public class ControlEx : Control
{
public ContextMenuEx ContextMenuEx { get; set; }
public ControlEx()
{
ContextMenu = ContextMenuEx;
}
}
public class ViewControl : Form
{
private ControlEx MyControlEx = new ControlEx();
public ViewControl()
{
MyControlEx.ContextMenuEx.OpenMenu.Click += //クリックイベント
}
} コンテキストメニューがnewされてないから例外が出るね 普通にメニュー出してsendmessageでええよ? なんとなくの違和感なんて知らんが
要するに何をどうしたいんだか 違和感
スポーツ選手みたいやなw
右肩に違和感を・・・
○○.cppに違和感を感じ納品を見送ったとのことです 質問する技術が足りてない
とにかく違和感とかいう抽象的なことじゃなくて具体的に 配列添字演算子付のpropertyはありますか?
イメージ的には
public int MyIDList[int]{
set{this.myIDList[idx] = value;}
get{return this.myIDList[idx];}
}
みたいな事がしたいです できない
インデックスの渡し方しか考えてないようだけど
それだとLengthやforeachで回せる機構など
配列に必要な関数群も仕組みもないだろ?
素直にListから継承させるか
インデックスを引数で渡せばいいじゃない それはクラスにインデクサが付く話だし
プロパティには持たせられないじゃん >>63
質問者がやりたいのはそのリンク先の「余談: VB のインデックス付きプロパティ」のこと
C#で出来ないようにしている理由はリンク先に書かれているし >>62 も書いてくれている まあたださ
class p {
List<double> da;
double center[int index]{
get {return (da[index+1] - da[index]; }
}
}
みたいに、クラスの配列データを元に
仮装配列的なものを作りたいんだろうなと思う
昔俺もやりたくて調べまくったよ
これを今のc#で実現しようとすると、わざわざプロパティごとにクラス化なきゃいけないし
クラスの生成や配列を振る舞うクラスに元データを渡すのとか非常に面倒になる
そこまで出来たとしてもメリットはインデックスを[]で渡せるだけで
配列(っぽいもの)ですよとコード上で示せるだけ
普通に関数実装で[]表記以外は同じことが出来るので
コードの美しさ的には不満があるけど
実装上は困らないんだよな
単純に関数の引数は()でも[]でも囲めるようにしてくれたら簡単なんだけどね constって継承できないもんかな
継承クラスで定数を変えたいんだけど
何か上手い方法はないだろうか できないので、諦めてオーバーライド可能なメンバでやって
そういう機能が欲しいなら、githubで提案してくるとよい
ここで喋っても入らないのでそのつもりで高説は垂れるように >>68
隠蔽(new)は出来るでしょ
継承というかoverrideはインスタンスメンバーを上書きするものであり、
constは本質的にstaticメンバーなんで、継承でconstを変更という発想はそもそも矛盾してるんじゃないの? constは埋め込みだから無理
コーディングを見やすくしてるだけなんよ
static virtual readonly とか…できるんかな書いたことないけど 単純にこんな実装がしたいんだよね
オブジェクトの詳細で表示する名称表示とかさ
class BaseObject{
const virtual string ObjectName=“(基底クラス)“;
string GetObjectName(){return ObjectName;}
}
class TextObject:BaseObject{
const override string ObjectName=“テキストボックス“;
}
class LineObject:BaseObject{
const override string ObjectName=“直線“;
}
class EllipseObject:BaseObject{
const override string ObjectName=“楕円“;
}
大して文字数も変わるわけでもないし、やっぱこう実装するよりないか
override string ObjectName{ return “楕円“; } >>68
定数を返すだけの読み取り専用のプロパティにする >>72
読み取り専用プロパティはもうちょっとコンパクトに書ける
override string ObjectName => "楕円"; >>75
おお、いいですね!活用させてもらいます! MacでC#勉強してみたいんですがVisual Studio入れないと厳しいですか?
VS Codeだけでは難しいですか? MacでC#を勉強するメリットはないから他の言語にしとき
唯一意味があるのはUnityでゲーム作る用途だから、Unity入れてC#やってみるのはまあアリ >>79
言語の学習目的なら.NET Core SDKとVSCodeでじゅうぶん >>79
変な意地をはらずに一番イージーな道を選択した方がいいよ
つまらないことに時間を浪費したいの?w >>83
その理屈だとBootcampでWindowsをインストールするのが最善ということになってしまう
VS for Macなんかほとんど誰も使ってないんだから、時間の浪費という意味ではVSCodeといい勝負だわ Listでindex aのアイテムをindex bにインサートするスマートな方法はないだろうか
aをremoveしてbにインサートすると、a>=bならいいけど、a<bの時 removeでインデックスがズレるので狙いより1つ下に行ってしまう
一番下だと範囲外の例外が起きてしまう
できればこれを実行するメソッドを作って既にあるList<T>を拡張したいんだけど
ヘルパークラス的なものって作れないかな? >>85
「拡張」という言葉の意図がわからないけど
ヘルパークラス作って静的メソッドや拡張メソッドとして定義すれば良いんじゃない?
List<T>を継承したオレオレListでメソッド定義、という方法は止めとけ >>87
2 to 9なのに1が9に移動しちゃうでしょ? 申し訳ない、コードを見直したら質問の前提を間違えてました
やりたかったのは
List<T> というリストがあった場合に
リストに入っているかわからないオブジェクトaを
リストに入っているオブジェクトbの1つ後に挿入する
…というメソッドを作りたかったんです
List<T>.MoveAfter(T b,T a) //リスト内bの後ろにaを挿入、aがList内にある場合は元の位置から移動させる
で、このメソッド自体の実装はできているんですが
いただいたサンプルのextensionsの記述がよくわからず質問しました
おかげでうまく実装できました、ありがとうございます! >>79
他の人も言ってるけど、unityでC#使ってるよ
C#自体の勉強ならこれで出来る
当然、WindowsアプリをC#で作れるようなスキルは得られないが c#とvsの至れり尽くせり感に慣れすぎて他の開発環境でできなくなりました そうなんだよなー
VSは使いやすすぎる
Delphiの開発者を引き抜いてきただけあるわ 最低限IDEで自動ビルドなら慣れれば貧弱な環境も楽しいよ
インテリセンスなんかないから長い識別子をダブルクリック & Ctrl + C ⇒ Ctrl + V
ばっかりしてたら左手が腱鞘炎になっちゃったけどw 秀丸御殿が建ってる偉大なエディタに対して「ですら」って 大昔試用したことあるけどまだ存在するんだw
いい加減タブ化とかしたのかな
しかし、日本人も真面目に作者に金払って使う人結構いるんだね いや秀丸はすげーと思うけど言語解析までするIDEと比較してテキストエディタですら入力補完あるのにコピペ頑張らんでもええやん、って話
タブ化は10年前くらいには対応してたはず
vscodeも良いけど軽さはやっぱ秀丸のほうが良いから今でもちょいちょい起動するよ Nif●y の決済システムってまだ稼働してるんか
最近使ってないから知らんけど 俺も秀丸とvscodeの併用だね
秀丸は起動が速いから xyzzyなら一時期使ってたなあ
道具にこだわるたちじゃないんで、金払ってまで禿丸さんを使う気にはなれなかった きたああああああああああああああああああああああああああああ
https://i.imgur.com/Q7qeopR.jpg >>102
道具にこだわらないのにWindowsは金払ってまで使うんだ ここにいる人は趣味プログラマーが多いんかな
本業なんだけど経験ないC#開発もやらないといけなくなったって人も結構いたりする? windowsはみんな使ってるからこだわってるとは言わない。普通。 >>106
本業だけどWin32から.NETへの移行期はC#の経験ないところから始めたね 同じく本業。
事前に経験ってほどのものがあったことなんかほとんどないような気がするけどなあ。
最近なら python をやってみたり。これ ruby っぽくてそんなに好きになれそうにないや。C# は大好き。 本業C#erだわ
趣味時代はCとかPythonとかやってた 組み込みだけど本業の開発よりc#でGUI作ってるほうが楽しい! 聞きたいこと
ライブラリ内の数値を、メインのプログラムで参照した。
arduinoを動かそうとプログラムを書いているのですが、
hoge.h
内に、
enum class Button : uint16_t{
A = 0x0001,
B = 0x0002};
というクラスがあります。
これを、
#include <hoge.h>
void setup()
{
const int BtPt[2] = {Button.A,Burron.B};
}
のように、代入したいんですけど、うまくいきません。
どうすれば参照できるんでしょうか。
そもそも概念的に間違ってるのかもしれませんが、、、 俺も最近CからC#に移行したんだが、下痢ゲートだとか阿弥陀式とか、ワケ分からないw 1000万越えのC#erはいないのか?
てか、そのくらい高額になるともはやコード書く仕事ではなくなるからC#erを名乗らなくなる? そういう話はさすがにスレ違いでプログラマ板でやった方がいいと思うが、
C#に限らずサラリーマンプログラマで1000万越えは少ないだろうね。
フリーランスの優秀な人はもっと貰ってるかもしれない。
意外だろうけど零細企業は景気がいい時は大手より高給が貰えるところもある。
ただいかんせん不安定
プログラマに限らんけど、優秀な人はアメリカにでも行った方がいいね。
日本はいろいろ終わってると思うw そうですね、確かに年収ネタは荒れやすいしすれ違いでした。これでこの話題は終わりにしときましょう。 まあ色々な意味でも終わってるのかもねw
この不寛容さの社会を作ってしまった「市民」として責任を少しだけ感じます C言語スレとマルチですが質問がスルーされてるので質問させてください。
コマンドライン引数というのは具体的に何が出来る引数なのでしょうか?
WisdomSoftって入門サイトと苦しんで覚えるC言語って本を読んでるのですがイマイチ何が伝えたいか分かりません。 ファイルをダブルクリックされた時に
なんのファイルをダブルクリックされたか
知るためなどに使う 関連付けされたファイルをダブルクリックして起動された時などに…だな
言葉が足りなさすぎた >>126
ありがとうございます。
しかしファイルをダブルクリックしても何も起こりません;
読んでるサイトにはD&Dすると白紙のメモ帳にプログラムが書き写されるみたいなこと書いてあるので
試しましたが何もおこらず・・・
使ってる環境VS2019なのですがそれが駄目なんでしょうか? >>128
その読んでるサイトとやらのURLを見せてみ? >>125
まあなんだ、引数を指定してバッチ起動できるわけよ。
すると引数に応じた処理をすることが出来たりする。 >>125
アプリ実行時に引数で指定した文字列の配列を渡せるだけ
それを使って何が出来るかはアプリ次第 >>129
http:ああwisdom.sakura.ne.jpあprogrammingあcあc32.html と
https:ああ9cguide.appspot.comあ17-03.html です
URL禁止みたいなのでスラッシュを置き換えてます。スイマセン
後者に関してはstdin等なんの説明もなく使ってるので更に分からないです >>130-131
メモ帳とかを使ってそれを実行できたりしないのでしょうか?
わかり易く解説してサイトとかあったら教えて頂けると助かります; もしかして実行して一瞬チラッと何か出てすぐ終了する感じ? >>133
関数に引数を渡すのは知ってる?
渡す引数の内容でその関数の動作は変わるよね?
コマンドライン引数はmain関数への引数になる
その引数はファイル名だったりexeを起動する人が入力する文字列だったりする
まずはコマンドライン引数を出力してみて何が入っているか確認しよう
出力先はテキストファイルでもコンソール(stdout)でもいい >>133
これコンパイルして、以下のようにコマンドライン引数渡して起動してみて。
C:\どっかのフォルダ> MainClass.exe 引数1 引数2 引数3
using System;
public class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("最初の引数は" + args[0]);
foreach(string s in args)
{
Console.WriteLine(s);
}
Console.ReadLine();
}
}
バッチ使うなら、exeと同じフォルダに、以下の内容のバッチファイル(***.bat)置いて、バッチファイル起動してみて。
hello.exe 引数1 引数2 引数3 >>134
いえ、コードをVS2019で実行して実行画面を出したままデスクトップのメモ帳をD&Dしました >>125
どのスレのどの書き込みがマルチポスト元なの?
質問系のスレならスルーはあまりないと思うけど書き込むスレ間違えてない?
↓のスレあたりで、開発環境やコンパイラー種類、実行している方法などを添えて書き込んで見ればいいんじゃない
C言語なら俺に聞け 152 https://mevius.5ch.net/test/read.cgi/tech/1560763630/l50
スレ立てるまでもない質問はここで 149匹目 https://mevius.5ch.net/test/read.cgi/tech/1529199088/l50 >>137
実行画面にドラッグアンドドロップするのではなく実行ファイルにする
ファイルの上にファイルをのっけるってこと >>139
あまり深く考えたことないけど、それでドロップしたファイル名がとれるのってどこで仕様化されてるのだろ OSの仕様だね
実行ファイルにファイルをドロップすると
ファイルのフルパスが引数になって起動する
複数ファイルドロップするとファイルが全部引数で入る
送る(sendto)フォルダにexeのショートカットを置いて
右クリックして送るとやっても同じ動作をする ダブルクリックとかドラッグ&ドロップよりも
dirやpingとかの例から教えてやれよ
説目下手かよw 君は質問者がCUIを知らないとわかった途端に
必死でマウントするタイプっぽいねw
まあ文句があるなら君が教えれば良いじゃない OSというかエクスプローラの仕様では?
まぁOSみたいなもんだけど
macも一緒だっけ? まあコマンドライン引数という言葉は出てるんだからコマンドラインとはこれのことって説明にはコマンドプロンプトを用いる方がわかりやすいかもしれないけどどっちもどっちかなあ プログラミング初心者に
PC初心者がいないと思える方が理解に苦しむ >>140
Win32API なら WinMain の LPSTR lpCmdLine 定義なら
HKEY_CLASSES_ROOT\exefile OSの仕様とAPIの仕様とC言語の仕様がごっちゃになるから
昔より初心者は大変よな。
ただ質問の仕方はジャンル関係ないから
もうちょっと伝わるように書いた方がいいと思うぞw 最も低コストな2点間時間差の測定って何なのでしょうか?
元々DateTime型を利用していましたが、超高精度である必要もなくマシンの長時間稼働で符号が反転することがあるのを承知でEnvironment.TickCountを利用しています。
Environment.TickCountよりも低コストなものはあるのでしょうか? コストの意味によって違う。
プログラム量なのか、費用なのか、所要時間なのか。 C# で無限Undo/Redoが出来るテキストエディタコンポーネントを探してるんですが、
使い勝手がいいものは何でしょうか? >>155
兆円単位の資産持ってる人がスーパーの食材の値段を比較するような話で、
意味ないよそんなのw
コストなんかどっちにしろゼロと同じだ >>155
https://referencesource.microsoft.com/#mscorlib/system/datetime.cs,1503
ご覧の通りDateTime.operator -()は
InternalTicksプロパティ内部でのビット論理積各1回と、減算と、TimeSpan型のコンストラクター呼び出し(内部はlong値の代入のみ)だけで
最適化されたら小さな計算だけになると思うんだが
Environment.TickCountを使ったほうが優位な速度差が出ると測定したの?
測定して有意差があってかつ本当に速度を追求する場所ならEnvironment.TickCountはintだけで低コストだろうから使えばいいし
そうでないのなら「早すぎる最適化」について調べればいいよ
>>156
少なくともWPFのTextBoxはUndoLimitプロパティがあって、初期値では無制限になってる >>158
減算のみだとそこまでの差は無いのかもしれませんが現在のタイムを取得する命令もセットで測定した場合に結構な差が出たため乗り換えました。
具体的にはこのような方法で現在時刻を取得し
int lastTime = Enviroment.TickCount;
DateTime lastTime = DateTime.Now;
下記のようにして指定秒数以上立ったかなどの判定を行っています
if (Enviroment.TickCount - lastTime > 10000) {}
if ((DateTime.Now - lastTime).TotalMilliseconds > 10000) {} その辺りはDDKの領分だから深入り
しない方が吉かも
尚、OSとしての仕様と実際に動作している
ハードの仕様の差異もあるし >>159
一定時間経過したかをより正確に判定したい、が本当にやりたかったことか
ドキュメントによるとEnvironment.TickCountは「resolutionは通常10〜16ms」とあるけど
DateTime.Nowでは「0.5〜15ms」とあるから
判定1回の処理時間ではなくて、精度を測定したほうが良いと思うよ
Stopwatchクラスは「high-resolution performance counter」を使えるから精度出るんじゃない? 指定秒数経過の判定で実行パフォーマンスを気にするのが間違ってる
そういうのは秒間1万回処理する必要があるとかいう処理で考えるべき
OS上で動作するからミリセカンドより細かい粒度での正確性はそもそも無理
stopwatch以上の細かい精度が必要ならC#じゃ厳しい
どんな要件か知らんけどそんな細かな精度なくても大丈夫
120FPSのゲームでもフレーム間で80msあるんだから 文章読んでる限りそんな頭悪そうじゃないのに
何でそんな部分の最適化は無意味だっていう簡単な事実が分からないのかねw
昔からそういう人一定数いるけどほんと不思議 >>164
この人が該当するかはわからないけど、発達障害で脳の特性により一般の人よりも拘りが強いという人は珍しくないよ。知能の高低ではなく、引っ掛かるところが普通と異なる。相手に自覚がない場合、いくら理屈で説明しても受け入れてもらえないことが多い。 どうでもいい細部に拘って動けなくなるのは中途半端に知恵がついてきた初心者にありがち
俺も経験あるからわかるわ
そこから経験を積んでいくとスケール感がわかってきて「ゴミは無視」ができるようになってくるもんだけど、
そうならずにどんどん偏屈になっていく人も一部存在する
質問者がそうでないことを祈る どうでもいい細部かもしれないんですが、フォーム名やイベント名は、動詞と名詞どっちを先にするのがいいのでしょうか?
例えばユーザー登録フォームの場合、RegisterUserForm と UserRegisterForm
ユーザーが選択された時のイベントの場合、 SelectUserEvent と UserSelectEvent
どっちがいいでしょうか? >>168
私は旧人なので、まずは Formですよが知りたい(プレフィクス派)ので、
Formユーザー登録
w
イベントはイベントハンドラー名そのまま(わざわざ変えない) まあ、全ての時計は独自の時間を刻んでいるので、そもそも一致させるのは不可能だし無駄なんだけどな。 >>168
イベントはUserSelectedが基本じゃないかな >>161>>162
具体的にはゲームのスキルクールタイム計算なので、数十ms程度の誤差は別に許容範囲であるため高精度である必要はないと書きました
深刻な回答してくれた方が多いようですが、別に今の方法でボトルネックになってる訳でもなく単純にこれよりベストな方法あるのかな?程度の感覚で聞きました ゲームなら共通の世界時計を持っといて各ゲームコンポーネント側でそれに基づいて時間の差分を取るようにするべき
各自が勝手に時間を測るとポーズの実装とかで困ることになるよ 誤差が許容できるんだったらコードから意図が読みとれる奴がベター >>165-166
今朝のテレビでコンビニに苦情入れて出禁になったと訴えていた被害者が
まさにそんな感じの人だった
(苦情自体は正当でコンビニにミスがあったのは確かだが
コンビニが謝ってるのにどうでもいいことで納得しないで文句言い続けてた) ファイルを大量に更新するアプリを作ってるんだけど
クラウドストレージ上でやると同期に問題が多くて困ってる
単一のファイルをディレクトリのように扱えて
可変長・不特定多数のデータをファイル名をつけて格納できる
ライブラリとかないものだろうか
クラウドで同期して別のPCで実行したりするので
環境変数やサーバ構築、DBエンジンのインストールが必要なものは避けて
ポータブル系アプリのようにUSBで持ち運べる実装にしたい
理想は仮想ドライブを動的にアプリ内でマウントして
読み書きさせるような感じ
なにかいい知恵はないものだろうか… ただの質問から人格攻撃にまで発展してる奴の方が妄想癖ありそうで怖いわ
なんかC#スレやVSスレって変な奴増えてきてるな >>168
https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/names-of-type-members#names-of-events
イベント名は動詞か、時制つきの動詞にするのが習慣
既に書かれてるけど UserRegisterd や UserSelected のような名前にするのが一般的かな
命名に困ったら.NET標準のものを参考にするといいよ
>>169 のような「いちいちFormをプレフィックスにする」のは少なくとも.NETにはそぐわない
>>172
> 別に今の方法でボトルネックになってる訳でもなく
やはり「早すぎた最適化」について知っておくべき
>>177
> 単一のファイルをディレクトリのように扱えて
> 可変長・不特定多数のデータをファイル名をつけて格納できる
についてもう少し詳しく
もっともクラウドで同期の問題があるのなら、どんなライブラリを使おうとも大して変わらない気もするけれど パフォーマンス系の質問に対して無意味系の答えが返ってくるのって質問者も大体織り込み済みな上で質問してるだろうしそれなら返さなくて良いんじゃないかね
ガチの初心者ならまだしも質問者のレス内容的にその辺は分かった上で聞いてるだろう
まぁ初心者スレでパフォーマンスに関する質問する方が悪いとも言えるが >>177
データベースのblobにファイルを突っ込むのが一番手っ取り早いが、速度や効率はまあ... つか、クラウドストレージでやると同期の問題ってどんな問題か気になる >>177
サーバー型のDBがだめならsqlite使えば? >>183
例えばonedriveだとフォルダ下のファイル数が一定数を超えると
フォルダに警告表示が出て同期できなくなったりする
あと変更箇所のチェックで異様に時間がかかるようになるんだよね zipだと圧縮されている10万ファイルのうち
1個変更しただけでも再圧縮が必要にならない? あ、ごめん
zipって結構柔軟性あるんだね
削除も追加もできそうだしやってみる
sqliteも試してみる
ありがとね >>177
OLE複合ファイルってのがwindows標準
只、私ならZipで実装するね なんか昨日一日まったく5chにアクセス不能だったけど、
俺の環境固有の問題だったのか普通に書き込んでる人いるなw
>>168
UserRegistrationFormとか?
Formはサフィックスするなって意見もあるが、これは少数派の意見だと思うので
真に受けない方がいいと思う。
ほとんどの場合は付けた方が結局分かりやすいね。
あと、コントロールの変数名だけはハンガリアンを認める人も結構多い。 昨日アクセス不能だったのは事実
ただし鯖は生きてたのでDNSの問題
回避できるDNSのアドレス知ってるひとは
そっちに変更して普通に読み書き出来てた
方法は避難所に書いてあった
今は元に戻しても通常通り読み書きできる状態 ついでに言うとDNSが死んだ原因は
2chを乗っ取った5chのjimの会社が
米の銃乱射の件でテロリスト認定されて
DNSサービスの停止になったってこと
さらにjimは指名手配で逃亡
5chは復旧したけどいつまで続くか判らんω >>190
スマン、質問の「フォーム名」を見落として「イベント名」だけ拾ってしまっていた
フォーム名ならFormのプレフィックスやサフィックスを付けるのは全然問題ないね SelectedTextやSelectionStart、SelectionLengthのような機能をカスタムコントロールに付けたいんですが
やっぱりMeasureStringとかでいちいち文字列の長さを測定したりするんでしょうか?
もしくは2次元配列を用意して1文字ずつその文字コードと座標を格納しておくか コレクションに要素が存在するかを判定するとき、Count > 0ではなくLinqのAny()を使う意味ってあるのでしょうか?
可読性のためだけにこちらを使ってるんですかね? >>195
TextBoxコントロールを使わないのならそうなるだろうね
等倍フォントなら少しは楽できるけどやることは変わらない
IMEの操作も考えてるんならAzukiっていうエディタコントロールを参考にすると良いよ >>197
ありがとうございました
何行目の何文字目とか指定できれば簡単なんですが
いちいち文字列の長さを測定しなければならないというのは不便ですね >>196
リンクの式はイテレータを返すだけだからCountやLengthのプロパティを持ってない。Count()メソッドがあるけどこれは全件評価が走ってしまうので、最終的に欲しい値が件数の場合以外は使わない。
その状態でイテレータに引っかかるのがあるかどうかを判定する際に使うのがAny()。普通のリストや配列に対してCountやLengthを使わずにAnyを使う意味はない。 >>199
ありがとうございます
SortedDictionaryに対してAny()で判定していたので、これについてはCountプロパティがあるのでCount > 0で良いということですね どこが「初心者用」だよ?って質問と回答ばかりだけどなww
昔は上級者用の質問スレもあったようだが
まあ一つに集約されてるほうが情報収集には便利だけど
スレタイはこっちが気に入ってるし
シャープとフラットをかけてる辺り NuGetパッケージの管理より
Seleniumパッケージを最新にしました。
しかし、それから
Chrome は自動テスト ソフトウェアによって制御されています。
という文言が画面に出る様になってしまいました。
options.AddArgument("disable-infobars");
を指定する事でこれまでは、
この様なエラーメッセージは表示されていませんでした。
どうすれば消えますか? >>203
標準でもなんでもないサードパーティーライブラリの話はスレ違い
↓あたりで適切なスレを探して
web制作管理 - 5ちゃんねる掲示板 https://mevius.5ch.net/hp/
WebProg - 5ちゃんねる掲示板 https://medaka.5ch.net/php/ >>203
その文言そのままgoogleにブチ込んで見る人生よ >>204 >>205
新しいNuGetパッケージについての
解説ブログはないんだよ。 >>209
君が解説ブログかけばいいんでは?
てか解説ブログあること前提なの?
リリースノート見るなりソース読むなりすればいいのでは?
できないならなんでバージョンあげたの?
問題出たならバージョン戻せば?
なんのためにnuget使ってるの? ちなみにこれってエヌユーゲッツなんかねヌゲッツなんかね。稀に他人と会話することがあるんだけど口頭で言う時に困る単語のひとつ…! >>211
常に最新を使った方がいいのかな〜と思いまして。
戻した事がなかったので調べてみます。
この手の技術系は、
詳しい人がブログにまとめてくれてるのでいつもそれらを参考にしています。
>>212 >>213
エヌユーゲット 漏れは、Ruby で、Selenium WebDriver を使っているけど、
「Chrome は自動テスト ソフトウェアによって制御されています」というメッセージは閉じれるけど、
その部分を閉じても、その幅が消えないから、使える画面が少なくなる selenium君もruby君もスレからずれたレスしないでね >>213
ヌゲットにしとくかな…
Nuclear unlimited gigantic enhanced technology selenium君はRuby君を反面教師にするといいよ。
スレ違いを繰り返すのがどれだけ他人から見て迷惑でみっともない行為なのかをこれ程上手く伝えられる教材はとても稀だから。 誘導を無視することは正しいことですか?
ライブラリの問題であって言語の問題ではないから誘導しているのです
使用しているのがC#であっても言語の質問でなければ正しくはありません
問題が言語なのかライブラリなのかわからない人もいるので初めてレスするなら何の問題も無いし、誘導してくれるでしょう
今まで何度誘導を無視しましたか?
長期間、言語ではなくライブラリを起因とする質問を繰り返すのは正しいのですか? 芸人の押すなよは押せって意味だからどんどんやっていいよ
どうせ過疎スレで人口なんか恐らく数十人しかいないw 1に書いてあることと同じだけど、どのへんがあなたの意見なの? そもそもWinFormsもWPFも言語仕様じゃなくてライブラリだ
ライブラリを外せってのは余りに酷い暴論だよ ライブラリが即NGじゃなく
サードパーティ制のライブラリがメインの質問&原因だからスレ違いでしょ
標準ライブラリは勿論OKだし
C#に関連の深い.NETやVisualStudio周りなら多少逸れてもOKだろうし
サードパーティでも例えばODP.NETとかのら基本的な質問なら答えても文句言われないでしょ
逆にUnity絡みならC#であっても専門スレのが有益だから誘導されるだろうし
誘導には、スレが汚れるから他所へ行けって側面と
ここだとまともな回答が得られないからこっちを当たれって案内の面があるんよ >>217
この前マイクロソフトの人柄ヌゲットと言ってたからヌゲットでOK 標準とか外部ライブラリーって>>1のどこに書いてあるんだよ
つまり「個人の感想です」だな つかSelenium君の問題は、Seleniumの問題というより
彼の頭の悪さの問題なんだよ
それを解決するのはこのスレじゃない
そこは明白だろ 誘導してる人の動機が利他的なものなら素晴らしいことだけど、
実際は人を批判しないと気が済まないだけだからねw
そこを見透かされてからかわれているのに、それがわからないところが何とも滑稽だね
だいたいこんな過疎スレで周辺分野の質問があって誰が困るのかねw
誰も困らないと思うけど。 質問者本人が(回答を得られないという点で)困るだろ 質問者以外も、どうでもいいやり取りを見せられて迷惑だと思うよ。
過疎っていても適切な話題が書き込まれていた方が良い状態だと思う。 >>231
君のようなオナニー野郎が1番気持ち悪いよ そもそも
C#もSeleniumも根本はC++で実装さえれている
Seleniumに詳しいヤツがいないから
いいがかりつけられてばかりでかわいそう >>236
かわいそうって、自分が?
何で実装されているかなんて尚更無関係だろうに、そんな頓珍漢なことばかり言ってるから煙たがられるんだよ。 >>236
そんじゃこれからはC++スレで質問してね
Seleniumに詳しい奴もいっぱいいるだろうからお前の助けになるだろうよ C#の言語自体がC++で作られてる事をしらんふぬけども そもそもかなり長期間seleniumの質問が投げられてるのにseleniumに詳しい奴からの回答なんてruby君以外からほぼ無い状態
だからこそ誘導してるんじゃないか
スレ趣旨から多少ずれてようがわかる範囲なら回答してる
回答した上で誘導までしてるのに誘導だけは無視して延々と質問を投げるなら嵐とかわらんじゃないか >>239
GitHub - dotnet/coreclr: CoreCLR is the runtime for .NET Core. It includes the garbage collector, JIT compiler, primitive data types and low-level classes.
https://github.com/dotnet/coreclr
コア部分は間違いなくC++で開発されているから安心して巣立ってくれ 聞きたくなければ黙ってseleniumをNGワードに入れれば良い
匿名掲示板なので日記書くやつもいるだろうし
他人の服装まで直す行為は無駄
ごちゃごちゃ発言するな いいかげんseleniumの話題はやめて欲しいよね 業務アプリケーションでElectron.NET使ってる人いる?そういった技術も習得してた方がいいかな? どうしてなの――ッ!!
どうしてエレクトロンしないのよーッ!! 業務アプリって比較的新しい技術ってあんま使わなくね?
使えるように勉強するのは多いに結構なことだとは思うけど RPAスレはSeleniumの話題OKだからそっちいきなよ Seleniumスレでも発達障害は解決できるとは思えないけどな options.add_argument( '--disable-infobars' ) # 通知バーを消す
Ruby で、こう書いても、通知バーを消せない!
Chrome なんて、仕様をコロコロ勝手に変えるし、文書も作らないだろ。
ソースコードを読めって、無茶苦茶だろw
各ブラウザの機能なんて、相手にしないほうが良い >>246
WPFやFormアプリケーションで描画しきれないケースのみ採用するパターンが多いかと。
習得する分には、もしもの時に出せる手札が増える(知見が広がる)ので良いとは思います。 業務アプリは大規模開発だったり要件が機能追加(既存ソースの流用)だったりが多いから知ってる人が少ない技術は敬遠される傾向があるよね・・・ dapper で、dynamic型で取得したレコードのカラム名は、どうやってプロパティにマッピング?すればよいでしょうか?
以下のようなイメージです。
var list = connection.Query<dynamic>(@"SELECT cd, name FROM hoge_table").ToList();
list.ForEach(item =>
{
this.cd = item.cd; //cdカラムは存在しているが、この方法では取得出来ない。
}); >>248,>>252,>>253
今はあんまり使われていないんだ
休みだし今後のためにチラッと触ってみる using (var conn = new SQLiteConnection("Data Source=:memory:"))
{
conn.Open();
conn.Execute("CREATE TABLE test (cd INTEGER, name TEXT)");
conn.Execute("INSERT INTO test VALUES (@cd, @name)", new { cd = 1, name = "a" });
conn.Execute("INSERT INTO test VALUES (@cd, @name)", new { cd = 2, name = "b" });
foreach (var row in conn.Query<dynamic>("SELECT cd, name FROM test"))
{
Debug.WriteLine($"{row.cd} - {row.name}");
}
}
問題なかったけど?
コンパイルエラーになってるんだったらその内容書いて 常駐するアプリを作るとき、serviceにすると何が嬉しいのですか? >>255
dapperはdynamic使うのが簡単でウマーだから >>262
ちゃんとパラメーター変数使ってるジャン >>261
cdカラムとかを指定して取り出したいなら結局クラス作った方が楽やん 大文字小文字の問題とか無いのかな?
止めて変数rowをウォッチしてみてね >>266
うん、だけどそれで悩んでるのは事実やん >>251
やっぱりそうだよね。
Seleniumを使いこなせないPGがC#パーには多すぎるのが問題だな まあ、Ruby では、
driver.execute_script で、JavaScript(JS)のソースコードを実行できるから、
通知バーの要素を取得して、その部分を、JS で削除できるかも知れない
例えば、漏れは普段、Showroom の多くのアバターなどを、こうやって削除している
jsCode = <<'EOT'
var elem = document.getElementById('js-avatar');
elem.parentNode.removeChild(elem);
EOT
driver.execute_script jsCode 一人でも煩いスレ違い居座り野郎が、二人になって相互作用まで始めてしまったか。 だから。相手にすんなよ。
しつこくても枯死するまで放って置けばいいのに。 >>273
いくらやめろと言われてもところ構わず唐突にRubyの話を始める頭のおかしい奴が、この板にいついているから。スレタイにRuby禁止と書かれているスレがいくつかあるが、コイツが原因。 C#っつーかプログラミング言語一般の話になっちゃうかもしれないんですけど
勉強してて例外のところに差し掛かったんですけどめっちゃ色々種類あるじゃないですか
んでもって例えば関数一つ作るにしても考えようによってはほんと沢山の種類の例外が発生する可能性がありますよね
そういうのをとにかく可能性が少しでもあれば例外をスローするようにしてたらコードが例外ばっかになっちゃう気がします
書く例外と書かない例外の境界線はどこにあるのでしょうか >>276
よくわからん理屈だな
仮にその例外を「書かない」と判断したとして、その「例外的な状態」を例外の代わりにどう処理するつもり?
放置しても問題なく動き続けられるorその場で適切な対処をして回復できるなら、そりゃ例外投げるよりその方がいいに決まってる >>276
ライブラリ関数に渡す引数が正しくないとかのように、自分が書いているコードが正しくない場合に発生する例外、逆に言えば正しいコードを書けば発生しない例外は基本的にその場ではいちいちcatchしない。
ただし完全にバグがないということを保証するのは困難なので、プログラムの上流でまとめてcatchして何らかのメッセージを出すなどした方が良い。どう対処すべきかはそのシステムに求められる要件次第だけど。
ファイルにアクセスできないとか、ユーザからの入力データが正しくないことにより発生するような例外とか、自分のコードの外部の要因で発生する可能性のある例外は、その都度catchして適切に対処する必要がある。 四則演算やっても
オーバーフローもゼロ除算もあるしね
一番上のcatchでまるっと処理したほうがええ >>276
その処理内で対処できるなら投げない
できないなら例外なげる
>>279-280
キャッチする話じゃなくて投げるほうの話だろ
まあ、キャッチも同じ考え方で、自分で対処できる例外はキャッチする
それ以外はそのまま上位へ
今はこういう考え方が主流だと思う >>276
そんなの手を動かさずに机上で考えてるからそうなるだけw
処理できない問題は(基本的には)例外を投げて呼び出し側に通知するしかない。
処理できない例外は投げるしかない。
処理できないのにcatchして握りつぶしてよい例外なんかない。
何が難しいの? 初心者マークの人へのアドバイスとしては
例外をthrowするケースは
・事前条件が崩れる場合、例えば引数がおかしい場合や処理の準備が整わない場合
・処理に失敗したことを伝える場合
まずはこのあたりを基準に
逆にcatchはむやみやたらにしてはいけないし、特に握り潰してはいけない
他人のソースをたくさん読んで、たくさん考えて書くしかないよね javaみたいに「このメソッドはこんな例外を投げるから必ずtry-catch書けよ」ってできなかったっけC# >>284
Javaの最大の失敗の一つだね
C#に採用されなかったのはもちろん、Kotlinですら省かれた そもそもチェック例外を採用した言語ってJava以外にあったか >>276
動作止めたくないなら例外拾って全部ログに書き込む 全部のケースを全部継続可能か不可能か判断してケース分けするに決まってんだろ。
甘えんな 俺はtry入れないでまず作って
例外が頻発する箇所に追加していく感じ
最初から丁寧に入れていくのは時間の無駄が多い いやとにかく
(1) 例外を投げるかどうか
(2) 例外をcatchするかどうか
こんなことで悩むなんてありえないよ。悩む理由がない。
悩みどころなんて、どの例外を投げるかの選択、あるいは例外をどの程度
場合分けするか、ぐらいしかない。
これは例えば、引数が変だった場合にとにかくいつでもざっくりArgumentExceptionを投げて済ますか、
引数がどう不適切なのか、細かく場合分けしてより適切な例外を投げるようにするかの選択
余談だけどこういうと怒る人もいるかもしれんが、個人的には例外の場合分けなんて
本当はどうでもいいと思ってるw
役に立つことはほぼないwほとんど場合プログラマの自己満足だw
そのコードを見られる場合にはね。(だから他人が使うライブラリを書いてる場合は別問題) あと、そもそもメソッドのデザインとして
例外を投げる代わりにout引数か戻り値でnull(あるいは例外オブジェクト)
を返すって選択肢もあるから、そこで迷うってケースもないことはないけどね。
呼び出し側でいちいちtryブロックを書く必要があるのは鬱陶しい、
って需要もあるから キモいRuby厨はスレ追い出されてC#スレに引っ越した >>289
たぶん環境が緩いというか品質が知れるわ 昔はout使う構文が嫌いだったけど、7.0でインライン宣言出来るようになってからそうでもなくなった ValueTupleにエラーコード入れて返すじゃ駄目なの? >>294
TryParse的な物を想定して書いたけど>>291じゃ端折り過ぎて意味不明だね申し訳ない
戻り値nullは(メソッドじゃないけど)as的な物を想定
例外オブジェクトをout変数で返すのはたぶんやってる人はほどんどいないけど、
tryブロックが嫌いなら場合によっては便利かも >>272
JavaとJavaScriptは別ものだ
あほ
Slenium以前の問題 例外はログ拾う時に絶望したくないから適切に投げるなぁ。
どうでも良いという論調は作るだけで保守しない人の発想みたいで少し嫌かもしれん。
アプリケーションのロジックをバッチでも使いたい、みたいな時に、毎度戻り値を検証するんじゃなくてバッチの一連のトランザクション自体落としちゃいたい時に二度手間な気がするんだが、その辺どう作ってるんだろう? >>301
二度手間と思うのは一人で全部コード書いてるから。 >>299
え?なぜjsを指定してると思うの?
元々javaのつもりで書いてるんだけど。
沸いてるの?? >>303
javaの拡張子は【.java】だよ
【.js】は、思いっきりJavaScriptの拡張子
少しググって勉強してね プログラム板住人は煽られるとすぐムキになるから、転載アフィブロガーの種まきに最適な場所になっちまってんだろう Seleniumって便利だな
もっとユーザが増えてほしい >>304
え?全然噛み合わない。
なにこのアスペ Ruby on Rails では、作者のDHH が、2014年に「TDD(テスト駆動開発) is dead」と発言して、
ユニットテストから、Selenium を使った、E2E(end to end)テストへ移行した!
それで、Rails 6 では、
DHH のいるBasecamp 社から、GitHub へ移籍した、Eileen Uchitelle によって、
テストを複数CPU コアで、並列実行する機能が実装された! >>303
なんでJavaのつもりで書く必要があったの? >>307
あんたの272の近辺にはJavaの話は全く出てきていないが、もしかするとRubyがJavaだと思った? エスパーすると、ASP.NETがあるがデスクトップアプリがメインだったC#よりまだJavaスレの方がまだselenium詳しそうなやつ多そうだから、せめてjavaスレ行けって事だろ。
ほんとこれぐらいもエスパーできなきゃアホやろ それなら「Rubyスレに行け」が流れ的に当然であるのに何故か「Java」
彼にとってサーバーサイドの言語は全部Java
ほぼ「ゲーム機を全部ファミコンと呼ぶおかん」状態と考えるのが妥当と思われる seleniumがjavaで書かれてるからじゃないの
>>236->>238のC++云々からの流れかと思ったけど KeyValuePair c=func1();
cをnull判定できないんですがどうしたらいいですか?
Myclass c=func2();
の場合、null判定できます。
クラスは出来て、KeyValuePairは出来ないのは何故ですか? KeyValuePairにnullなんて入らないからな >>316
流石に頭が悪すぎるのでこれ以上会話するのは不可能 >>319
func1をTryParseみたいにbool func1(out KeyValuePair c)にして値入れたくないときはfalseを返すようにしたら?
構造体にnullは入れられないし、どうせそのあとnullで分岐するでしょ >>316
先走った場違いな発言を認めたくなくて必死過ぎ、こーゆう使えない部下は直ぐに切るからこいつは低収入確定 >>319
KeyValuePair?
を返すようにしたらいい そりゃ、C#・Java は、静的言語で同じだから、
静的言語になれているなら、Selenium の話は、Java で聞くのがよい
動的言語なら、Ruby, Python で聞けばよい
Seleniumデザインパターン&ベストプラクティス、2015、オライリー
これは、Rubyでテストを書いた本
ウェブ系・HTML は基本、Ruby。
まあ、Java のSelenium の本も出てるけど
Java は、Spring Boot か?
動的言語のGroovy じゃないのか? javaの話が出てきても勘所がないから検討違いな粘着になるんだよな
Seleniumについて知識があれば文献的に充実してるのはjavaだろうに c#からc#をインタプリタで実行できるライブラリってありますか? WinForms で質問です。
標準の Form から継承した MyForm を abstract で作りました。
この MyForm は abstract なのでデザインで開けません。
(ここまでOK)
MyForm をもとに SubForm なるものを継承して作りました。
これには abstract は付けていないのですが、これもまたデザイナで開けません。
あまりに残念すぎる挙動だと思うのですが、これは仕様でしょうか。 Visual Studio .NET (2002) から続く仕様だよ .NETではフォームの継承は推奨されていません
共通化したい場合はユーザーコントロールを使用してください
なお、WinFormsは既に開発が終了しており、今後改善される可能性はありません やっぱりですか。
デザイナが使えないと不便なので、MyForm 側にabstract 付けないで、virtual 定義しているのですが
継承先で「いじり必須」なものを忘れてしまうため、本当は abstract したいのですが・・
WinForms の開発が終わったって、世の中、VS で弄られてるソースの9割は WinForms だと思うんですけどねぇ うちは自社開発企業だがFormsはとっくの昔に淘汰された
Formsで作ってたアプリは全部WPFで作り直した visualstudioを利用しているのですが最近デバッグ時にフォームアプリを動かすと
System.InvalidOperationException: '有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'hoge' がアクセスされました。'
の様なエラーが出て止まる様になりました
しかし出来たプログラムをふつうに動かす分には異常ありません
今まで作ってきた問題のなかったすべてのバージョンでこの様な現象が起こっています
これは何が原因でしょうか? >>335
騙されたらあかんw
継承後のフォームもちゃんとデザイナで開けるし
コントロールを追加したりいろいろ出来るよw
フォームの継承なんて10年以上やってなかったが
今実際試して確認したから間違いない >>337
先日MSがWindowsUpdateでやらかしたのが原因で、結構話題になっているから検索すると見つかる
「windowsupdate vb」 で >>338
「abstract な継承元から継承すると、継承先フォームがデザイナで開けない」
という意味でしたけど、こちらだと VS2019 でも叱られてしまいます。。 継承元が abstract じゃない単純なファームの継承だったら、まったく問題ありません。 >>340
なるほど。
abstractにこだわる必要が本当にあるのかなとも思うけど、
何ならコンストラクタをprotectedにすりゃ機能的にはほぼ同じだね。
(abstractメンバーはもちろん書けないけど)
これならそういう不具合は起こらないっぽい 蕎麦とラーメン間違えるとかもう簡単ケータイにしたほうがいいんじゃね。
たぶんVPNとか使わわんだろうし。
俺もIntelだからもう日産もゴーヤチャンプルーも同じ味付けで食える。 Keyvaluepairの.Keyをnull判定したら
nullできました。
構造体だけどnull判定できましたが??
keyvalueopair本体はできないけど
KeyまたはValueはnull判定できました。
何故???まぁ良かったんですけど それはKeyプロパティが返した値をnull判定しているのであり、KeyValuePairが構造体であることは全く関係ない
直行する問題の分離ができない人はプログラミング向いてないよ 構造体はnullにできないからKeyValuePair?使えって言ってんのに >>346
ようはList<KeyValuePair<string,double>>
"レタス" 100
"キャベツ"120
"トマト" 120
こういうリストで、ピーマンって探すと
Keyがnullになってくれたので、良かったです。
KeyValuepairがnullじゃないのが不思議ですが
null判定できてよかった 構造体はnullにできないと何度も言われてるのになんで不思議に思うんだろう
ピーマンを探すときのList.FirstOrDefault()の戻り値は
KeyValuePairをデフォルトコンストラクタで初期化したものだよ >>349
keyvaluepairは構造体
構造体にはnullが存在しない
構造体にnullが存在しないことと構造体の中身がどうなっているか関係ないので、中身がクラスであるならnullにもなりうる
君がやったことは構造体ではなくその中身がnullかどうかのチェックしただけ
構造体とクラスの違いが理解できないなら今後も躓くのでkeyvaluepair含め他の構造体の使用も封印したほうがマシ
まぁintだって構造体だから全部避けるなんてことは無理だけど listに入れるならdictionaryでいいんじゃないか…?とか話を一切聞いてなかったりとかkeyvalue君のレス見てるといらつくし
説明してあげる>>351は優しいだろ >>349
null返ってきたのはkeyの型(string型)の初期値がnullだからなんでねか? >>349
ピーマン探してnullが帰ってくるのはおかしいだろ。
ピーマン探したら見つからないのが正しくないか? Form1以外のクラスでlistboxに入力したいのですが
他クラスで入力する方法って望ましくないのですか?
他に方法はあるのでしょうか? MVVMなら他クラスで用意するのが普通。
INotifyPropertyChangedとObservableCollectionでばっちりよ >>356
松茸採りに行っても見つからなかったらバスケットは空で帰って来るしか無いだろ? でもバスケットはあるから、バスケットの中の松茸の数がゼロになるんだよね? バスケットが空なのと、バスケットにnullが入ってるのは違うんじゃねえかな?
参照型は瓶と水みたいな感じで、瓶だけ持って帰ってこれても、
値型みたいな、それ単体が実体のものは言うとおり松茸みたいなもんで、取りにいってなかったら何も持って帰って来れないと思うが。
無理矢理何か持たせるのがFirstOrDefaultで、坊主だった親父がとりあえず当たり障りのないものを魚屋で買って帰るようなもんでは?
FirstOrDefaultは無かったときにnullを返すためにあるんじゃないんだから。
ちゃんとチェックしてから取ったほうがいいと思うよ。 ちゃんとチェックしてからとるならFirst()でよくね? >>358なんですが誰かお願いします
別クラスでテキストボックスとかいじるのって普通のやり方ではないんでしょうか? 別クラスでいじるって、
class Hoge {
public void SetText(TextBox textBox, string text) { textBox.Text = text; }
}
みたいな?
コントロールを外部に渡すというのはまあ一般的ではないな >>359
返してくださったのはありがたいんですが
その3つの単語全て知らなくて、ググってみても高度すぎてわかりません
コンソールアプリケーションをフォームアプリケーションに移植しようとしているのですが
Console.Write()で出力していたものをlistBoxやtextBoxに出力したいのですが出来なくて困っております
どうかアドバイスお願いします 外部でstringの配列なりListなり作った上でそれを
ListBox.DataSourceプロパティにセットすればいいんじゃないの >>369
■ 選択肢1
FormにAddToLogみたいなメソッドを作ってConsole.WriteLineを
LogForm.AddToLog
■ 選択肢2
Console.WriteLineを、記録する文字列を通知するイベントに置き換える。
Formはそのイベントを拾ってListBoxに表示
後者を推奨
基本的にUIの参照を握らせるのは悪い手 移植したいコンソールアプリ
class Program
{
static void Main(string[] args)
{
var op = new Output();
op.MainProcess(400);
Console.Read();
}
}
public class Output
{
public override int MainProcess(int count)
{
for (int col = 0; col < count; col++)
Console.Write(col);
}
} 作ってみたフォームアプリ
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var op = new Output();
op.MainProcess(400);
}
}
public class Output
{
public override int MainProcess(int count)
{
for (int col = 0; col < count; col++)
listBox1.Items.Add(col);//←ここが動かない
}
}
こんな感じです
>>371
ありがとうございます。さっそく試してみます なんでいきなりバックグラウンドワーカーが出てきてるか知らんけど、ドゥーワークは別スレッドで実行する内容を記載するところで、UIスレッドにアクセスしたらダメ→コントロールを触ったらダメ
リストボックスにアクセスしたかったらリポートプログレスもしくはコンプリートでUIスレッドにマーシャリングしてから 簡略化して書いていますが凄い長い計算なので計算中でもプログラムが反応する様にbackgroundWorkerにしています
backgroundWorkerかでなくとも、他クラスからフォームをいじるということが出来なくて困っています >>375
1.他のフォームからコントロールを操作する
https://dobon.net/vb/dotnet/form/accessanotherformdata.html
2.BackgroundWorkerからコントロール(UIスレッド)を沿操作する
https://dobon.net/vb/dotnet/programing/progressdialogbw.html またはInvoke
今の段階では1+2をやりたいんだよね
設計的なものに口だすのは良くないけど参考までに
>凄い長い計算なので計算中でもプログラムが反応する様に
ListBoxの一つのアイテムごとに時間がかかるのならMainProcessでループで一気にAddせずに
BackgroundWorkerの中で「計算実行→ReportProgressで別フォームListBoxにAdd」をループさせてもいいんじゃないの >>366
ログ出したいん?
なんかプロパティのフラグ立てる必要なかったっけ? 関係なかった
自分が昔出なかったのは
AppendTextしてなかったからだったw
すまんかった Invoke調べてみました。いけそうな気がしますが書き方が難しいです
上記のコードの場合どのように記述すれば良いのでしょうか? パッと見で適当だけど、formにコントロールの変更記述して、コールバック登録してtaskはしらせればいいの違うのか?invokeは当然 doubleって整数のほうに偏りがあったら
小数部分は短い精度になるんですが、これ何とかなりませんか?
doubleは精度高いから小数点第5位とか精度余裕だろwwwwwwwwwww
989〜〜〜132.1235212596 算出結果
989〜〜〜132.1235312314 正解
え???????????
ちょwwwwww
助けてください >>384
何を言ってるか人に分かるように書かないと誰も答えようがないよw
一般論として、演算誤差を累積させずに
演算可能かどうかはどういう演算をしてるかによるので、
具体的な処理が分からないと何とも言えん >>384
浮動小数点とはそういうもの
小数点以下何桁かではなく全体で何桁か Form1, Form2, CounterForm があります。
CounterForm にカウントを表示して、0 になったら、Form1 か Form2 のメソッドを実行するにはどうしたら良いでしょうか?
やりたいこと
5. 4. 3. 2. 1. 0 と表示 → form1.DoSomething();
CounterForm と Form1 の部分はできているのですが、
複数class間で通知する方法がよくわかりません。 >>390
var f1 = new Form1();
var f2 = new From2();
foreach(var i in Enumerable.Range(0, 5).Reverse())
{
await Task.Delay(1*1000);
if(0 == i)
f1.DoDomething();
// f2?
}
Form1とForm2のメソッド呼び分け条件を提示して。
あと
>複数class間で通知する方法がよくわかりません。
の意味が分からないんでもう少し詳しく 「通知」…もし表示済みのフォームをあとからいじりたい場合、
public static class static1 {
public static form1 form1; //スタティッククラスのフィールドを用意して、
-------------------------------------
public partial class form1 : Form {
public form1() {
static1.form1 = this; //各自のインスタンスを各自のコンストラクタで設定しておく
-------------------------------------
public partial class CounterForm : Form {
public void hoge() {
try {
Exception er = null;
this.Invoke( (MethodInvoker)delegate { //デリゲートせずに外からフォームをいじるとエラーになることがある
try {
static1.form1.DoSomething(); //スタティッククラスのフィールドを経由すると表示済のものがいじれる
} catch( Exception e ) { er = e; } //ちなみにデリゲート内のエラーは外側でキャッチできないので、
} );
if( er != null ) { throw er; } //変数を経由して外側でスローする >>390
Formだろうが何だろうが、操作したい側が操作対象の参照を握れば良いだけだけど、
親子関係が成立しているとか特殊な前提がなければ、Formが別のFormの参照を
握るのはあんまり良くない。
原則論を言えばそもそもFormにUIと無関係の処理を書く時点で間違っている。 UIと関係あるからフォームなんだろうけど…
非同期処理中にポップアップが出て、その間もメインは触れるが、終わるとメインが変更される
なんてことはよくある
書式設定的なのも別フォームから別フォームをいじるわけだし
前のいじり方を残すために、閉じても隠すだけで、同じインスタンスを再表示したい場合とか フォームと無関係な〜って書いてあるぞ
そんなことより全角半角がきもい 対象のフレームワーク:Framework 4.0 でコンパイルした自作 DLL があります。
この DLL を 対象のフレームワーク:Framework 4.8 なプロジェクトから参照して使用したとき、
DLL の中はどっちで動くのでしょうか?
たとえば自作DLL内で、DataGridView から継承した DataGridViewEx を作ってあったとして
これを 4.8 なプロジェクトで利用したとき、DataGridViewEx 内で
4.0 の DataGridView が使われるのか、4.8 の DataGridView が使われるのか、って意味です。 自作DLL内でDataGridViewの参照を特定バージョンにしておけば4.0になるしそうじゃなければ4.8 自作DLL 側の System.Windows.Forms を見たら
特定バージョン:false
になっていたので、呼ばれる側のバージョンの System.Windows.Forms.dll が使われるってことですね。
Framework 4.8 用に新たに作らないといけないかと思ったのですが、その心配ないみたいで安心しました。 あ、間違えた
× this.Invoke( (MethodInvoker)delegate {
〇 static1.form1.Invoke( (MethodInvoker)delegate {
(thisは自フォーム内のマルチスレッド部分のソースだった)
カウントダウンにマルチスレッドが必要とは限らんが
むしろモーダルだったり
でも「オブジェクトがあれば必ず「通知」できる」という方法は確立しといた方が、オブジェクト指向っぽい
クラスオブジェクト指向の前にメッセージオブジェクト指向があったので(Win32API)
メッセージ、つまり「通知」 >>392
解答どうもありがとうございます。
event かデリゲートで解決できそうです。
// Form1
private void CountDownBtn_Click(object sender, EventArgs e) {
var countdownForm = new MYCountDownForm();
// 4 3 2 1 0と表示してから、下に行きたいが、
// これだとカウント 0 を待たずにすぐ下に行く。
countdownForm.Show();
// このクラスのいろいろな処理
} >>400
そっちかw
そっちは「モーダルフォーム」でググると出てくると思う
その方が普通に基本 APIが公開されていなくてもスクレイピングして非公開websoketに接続したいのですが、
解析からトークンなど必要なheader情報取得すればできるものですか? 出来るけど利用規約読め
API経由だとセーフで
API経由しないと逮捕とか書いてあるから >>402
非公開だろうがクライアント側で処理してるのには変わりないんだから
お前が本当にブラウザになり切れればやれるよ
単純に能力と手間の問題だ この質問結構前からいたるところで見る気がするんだけどただのマルチ? >>400 >>401
とりあえず自力でできたのでソース抜粋 1
// Form1 呼び出し側
private void CountDownBtn_Click(object sender, EventArgs e){
var countDownForm = new MYCountDownForm(7);
countDownForm.ZeroReached += OnCounterZeroCallBack;
countDownForm.Show();
}
// コールバック
private void OnCounterZeroCallBack(Object sender, DestReachedEventArgs e){
// UI 更新
} ソース抜粋 2 // MYCountDownForm
private System.Windows.Forms.Timer countDownTimer;
public int timeLeft;
public delegate void ZeroReachedEventHandler(Object sender, ZeroReachedEventArgs e);
public event ZeroReachedEventHandler ZeroReached;
void Timer_Tick(object sender, EventArgs e){
if (timeLeft >= 1){
timeLabel.Text = this.timeLeft.ToString();
timeLeft--;
}
else if (this.timeLeft <= 0){
timeLabel.Text = this.timeLeft.ToString();
var args = new ZeroReachedEventArgs();
args.TimeReached = DateTime.Now;
OnDestReached(args);
this.Close();
}
} // END Timer_Tick
protected virtual void OnZeroReached(ZeroReachedEventArgs e){
var handler = ZeroReached;
if (handler != null){ handler(this, e); }
}
}
public class ZeroReachedEventArgs : EventArgs {
// コンストラクタないけどいいの?
public DateTime TimeReached { get; set; }
} アホな質問ばっかですいません
光速の計算をしたいんですが、doubleでは無理ですか?
decimalは使いません
お願いします。小数点以下が信用できません。 >>411
お前さんが使おうとしている計算方法や欲しい精度とか示さんと答えられんだろうよ 質問いいですか、クラスの処理の途中経過をTextboxのコントロールに送りたいのです
public partial class Form1 : Form
{
Class1 class1 = new Class1();
}
class Class1
{
public Class1()
{
Form1.Textbox1.AppendText("Class1を実行しています");
}
}
このようにしてもForm1のインスタンスがないから実行できません
みなさんはクラスのログなどをテキストボックスに送るとき、どう書かれてますか? >>414
public partial class Form1 : Form
{
public TextBox Textbox1;
Class1 class1 = new Class1(this);
}
class Class1
{
public Class1(Form1 fm)
{
fm.Textbox1.AppendText("Class1を実行しています");
}
}
またはFom1のなかに
public void appenttext(string st)
{
Textbox1.AppendText(st);
}
としてClass1から呼び出す >>415
レスさんくすです
上の方法でうまくいきました
クラスからコントロールを操作ってあまり使わない、というか推奨されてないのかな? コントロールは何かを操作する為の機能なんだから、
普通はその操作する何かを直接操作するだろ? >>416
インスタンスをどう指定していいかわからないんじゃなかったのか
親子関係にあるウィンドウでの操作はいろんなアプリで普通にあるし
C#だけにしても「C# 別のフォームのコントロール」でググればやっているところはいっぱい出てくる >>416
非推奨というか、普通はやりたいと思わないね。
何かの参照を握るってことはそれに依存してしまうってことだから。
Class1は本来はForm1の参照を持つ設計にしたことで、
事実上そのプログラム専用の他で流用できないコードになってる
他で使う予定ないからそれで問題ないと思うかもしれないが(以下略 >>417
確かにコントロールというぐらいだし
>>418
さんくす、実際にやる方法もわからなかったし、教えてもらったのはわかりやすかった
考え方を標準っぽいやり方に寄せたいのです
>>419
さんくす、なるほどパーツとして完成してないですね
汎用性の低いコードは改善しないと、でも今回はこれでいきます
logの取り方考えないと 処理側に出力するだけの意味しかないデリゲートでも渡してやれば?
受け側はコントロールを操作とか意識しなくて済むけど
public partial class Form1 : Form {
:
Class1 class1 = new Class1((string s) => { this,Textbox1.AppendText(s); })
;
}
class Class1 {
delegate void output_delegate(string s);
output_delegate output = (string s) => { Console.WriteLine(s); }; //デフォルト出力先はコンソール
:
Class1(output_delegate _output) {
output = _output;
}
:
} よく答えられるな
なにをしようとしてるのかすらわからんわ >>421
レスさんくすです
でもしかし、半分ぐらいしか理解できませんでした、スイマセン
〜解読中〜 refやout, in引数のないdelegateなら
自分で定義せずにSystem.ActionやSystem.Funcを使う手もあるよ >>423
理解しなくていいよw
デリゲートを直で受け渡しなんかせず、素直にイベントの方を使いましょう。 使う手もあるというか余程じゃなければActionかFuncでは MethodInvoker(´・ω・`)ボクも忘れないでね >>414
こういうのってbindingでどうにかするものじゃないの? 可変長の戻り値って実現できませんか?もしくは可変長のタプル
これを
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));
こんな風に書けたらいいのにって感じです >>424
さんくす、スマートに書けそうですね、他の人もさんくす、ただ考え中
>>425
今回はイベントで、ただデリゲート勉強するいいちゃんす
>>429
さんくす、ググったら実現したいことをピンポイントっぽい
>>430
さんくす、binding、さらにむずい、今までと違うアプローチっぽい >>431
何言ってるのか理解するのに5分かかったw
ラムダ式の右辺(?)の評価方法をジェネリックの型パラメータを確定する場面で指定するとか
普通に無理筋でしょう
hoge(list, listItem => new[] { listItem.A, listItem.B });
が
hoge(list, listItem => (listItem.A, listItem.B));
と書けたところでたいして嬉しいと思えんけど >>433
おお、new[]で推論してくれるの忘れてました
new[]で十分スマートですねこれで問題ないです、ありがとうございました Formのプログラムで普通に動作してたOpenFormDialogを使ってる箇所が突然フリーズしてしまいます。
一旦そうなるとWindows自体が不安定になり、他のプログラムで恐らくOpenFormDialogを使ってる所が全てフリーズしOSの再起動が必要になります。
どんな要因が考えられるでしょうか。
プログラムはかんたんなグラフィックエディタで矩形やテキストを移動したり変形する程度です OpenFormDialog? OpenFileDialogじゃなくて?
OpenFileDialogならフリーズの話はあるから検索して
騒がれたのもう結構前だからまだ残ってるともあんまり思えないけど あ、残ってるってのはフリーズするバグを残してる環境の話ね >>436
OpenFileDialogでした
cymon.sysの件は見つけましたけど家のPCにはありませんでした
地道にバグを見つけます List<Employee> のIDとList<int> の一致するEmployeeを取得したいです。
List<int>をforeach、その中でList<Employee>をFirstOrDefaultで探して
新たなList<Employee>にAddする方法はできました。
これのforeachを撲滅して簡潔に書きたいのですがいい方法はありますか? var employees = new List<Employee>();
var ids = new List<int>();
・・・・
var hitEmployees = employees.Where(employee => ids.Where(id => id == employee.id).Any()).ToList(); 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 employees.FindAll(emp => ids.Contains(emp.ID)) EnumSetってEnumの値を2のベキにすればいいから存在しないの? イベントハンドラのいなづまアイコンってどういう意味なの?
気になって開発が手につきません。 execute
神がいかずちをもって手を下す
的な >>440-443
どれもなるほど!と勉強になりました
ありがとうございます
今回はシンプルな>>443さんのでいきます! おお、なるほど。LINQのクイズ集があれば面白そうだな。 443はlinqじゃないぞ
2.0の頃からあるListクラスのメソッドだけだ >>450
ラムダ式が使えるようになったのはC#3.0から >>451
そうそう。なのでデリゲート使って書く必要はあるけど 次のようなことをしたいのですが、どうすればいいでしょうか。
async、awaitを使えばいいようにも思えたのですが、クラス内のループが止まらず・・・
1.ボタン押下でとある処理をするクラスのインスタンスを生成し、クラス内で処理を無限ループ
2.ボタン押下でクラス内のループを停止 >>453
ループさせているクラス内に止めるメソッド付けてボタン押したときにそれ呼び出せばいいだけでは
イベントメソッドは別のクラスでもできるから直にボタンのイベントに追加してもいいし CancellationTokenSourceを使うのが比較的妥当なやり方かな
2でボタンを押したらcancellationTokenSource.Cancel()
無限ループ側の処理では適宜cancellationToken.ThrowIfCancellationRequested() 低レベルな実装だと終了フラグの参照を渡しておくとか >>455
単純なループ処理でキャンセル例外が必要なければ
CancellationToken.IsCancellationRequestedをチェックするのでも良いね 皆さん、ご回答ありがとうございます。
>>454
停止メソッドにより、ループ条件から外れるフラグを立てて
処理停止させるイメージでしょうか。
>>455
CancellationTokenSource初めて聞きました。
便利ですね!
>>456
すみません。フラグでの終了処理しか思いつきませんでした・・・
もう少しマシな実装になるとどうなるのでしょうか。
教えてもらえると助かります。 >>457
そういった方法もあるのですね。ありがとうございます。 すみません・・・
あるフォルダにファイルが保管されたときに
そのファイルを処理したくて監視に無限ループを使ってしまいました。
他に良い方法があれば、お教え願えないでしょうか。 >>461
System.IO.FileSystemWatcher もしくは、win32ApiのFindFirstChangeNotification()か >>462
そんな便利なものまであるんですね!びっくりしました!
全然C#のこと知らなくて恥ずかしいです・・・
教えてくださってありがとうございました。 自分はC#といえば当たり前のようにWindowsFormでやってたけど
みんなは何使ってるの? >>465
特に必要なければwinform
というか、初期のブレンドが使い物にならなかったので、WPFやUWP?は必要になるまで覚えないことにした WinformからUWP APIを呼び出すことも出来るしな WPFでやってるけど誰かにお勧めしたことはないしとてもお勧めできない >>465
Winformなプロジェクトだが、XAMLでのレイアウトが好きだから自分の担当画面はWPF使ってる >>465
WinFormsやらWPFやらXamarin >>465
アンカーやドック追加してくれたのが嬉しすぎて、他に浮気してまで新たに覚える気にならないってのもあるかな [DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
アクティブウィンドウのクライアント領域を取得するにはどうすればいいでしょうか?
上のメソッド使えば行けそうなんだけど、行き詰まってます。 >>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で指定したらそこに戻ってくる c#楽しいね
直感ですぐGUIアプリ作れるからプログラミング覚えたいけど特に目標がないって人にはc#一択だと思う >>475
ほぼそのまんまのサンプルを見つけて問題はとりあえず解決しました。
https://ja.stackoverflow.com/questions/21328/c-processで指定した別プロセスのウインドウを-クライアント領域のみキャプチャしたい
アクティブウィンドウのクライアント領域の取得は、
c# + netframework ではできないのですか? 次はListViewの要素の長方形を得たいとかかな
結局.netからは離れていきそう TreeViewの表示を標準の
項目1
┗項目2
┣項目3
┗項目4
から、
項目1━項目2┳項目3
┗項目4
にするにはどうすればよいでしょうか? >>473
GetActiveWindow()って無かったっけ? ドラッグアンドドロップで拡張子を.txt→.jsonに変更するプログラムのコードをください batでやったほうが早そうなレベルだけど
fileをrenameするだけでしょ? renameするだけですね
どうしてもC♯でやりたいんです >>487
拡張子の書き換えは
System.IO.Path.ChangeExtension(filepath, extension)
ここはコードを代わりに書くスレじゃないのでキーワードはあるのだから後はググってください 誰が一日ググれば聞いていいって言ったんだよ
ひと月はググれ >>488
それだけじゃ変数領域にあるファイル名しかリネームされてない予感 むしろググる以外のことをしろ
一日やったらわかったこととわからんとこぐらいあるだろ どこがわからなかったのかくらい書いてくれないと説明できんよ
ドラッグアンドドロップの受け取り方?
拡張子の変え方?
コンソールアプリなの?デスクトップアプリなの? 上手く行かないとは何かを説明して
コンパイルできない?エラーが出る?例外が出る?
実はmoveできてるけど別のフォルダに作ってるとかないよね? 答えが出てるから色々試そうぜ
あと1日試してやり方がわからないのなら
>>1にある
>■コードを貼る場合は↓を使いましょう。
>http://ideone.com/
>https://dotnetfiddle.net/
にコードを張ってここからどうやれば良いかを聞いてくれ http://ideone.com/4eJIcv
これで貼れてますか?フォームアプリケーションです。
ここの57行目のファイルのパスをドラッグアンドドロップして得たパスに変更したいんですけどうまくいかないんですよね >>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"));
}
}
これでいいでしょ
ボタンクリックでやりたいのならフィールドでファイルパス持たないと >>498
できました、ありがとうございます
こんな簡単だったんですね・・・・・・ >>498
重箱の隅で本質とは関係ないけど、
"\r\n"はEnvironment.NewLineの方が良いな テキストボックスのテキストも環境の影響受けるんか?
おれは環境によらず出力一定のほうが安心する コンソールとGUIの改行が同じという保証なんて無いんだが JSONを扱いたいのですが.NET標準機能では
JSON.NETにあるJsonPropertyのような変数名とは別の名前で
出力できるような機能は無いでしょうか? >>505
DataContractJsonSerializer使って
[DataMember(Name="別の名前")]
とか? >>506
うぉぉぉ
できました。ありがとうございます! クロームにURL開かせるプログラムって作れるのかな 引数にURLを入れて起動すればいいんじゃない?
やったことないけど >>510
どんなブラウザでも、標準でそうなってる(べき)と思ってる。meも start url
って叩きゃ標準ブラウザが立ち上がるでしょ
引数ってブラウザのexeパス調べてそこに渡すの?
OSが知ってんだからOSにぶん投げればいいだけじゃん Span<T>をコレクションに貯める事って出来ないんでしょうか?
受け取ったbyte[]から一部のみを必要としていますが、startIndexとlengthを一々記録するのも面倒であるため、現状は新たにnew byte[length]を作りコピーをして貯めています
別にこれでも全く困っていませんが、あんまりスマートではない気がしているので元のbyte[]を.AsSpan(startIndex, length)したものをコレクションに貯められればスッキリするのですが できないよ
array[3..7]とかでSliceするとか元の配列を使うならArraySegment<T>使うとか >>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 >>515
MemoryExtensions.AsMemory()を経由してSystem.Memory<T>を管理するのはどう? >>521
ソイツはいくつかのスレタイにRuby禁止といれることになった元凶だから、考えるだけ無駄よ Matzから分離した闇の半身か何か(ダークファンタジー感) zipファイルのパスワード総当たりのコードってどこかに落ちてたりしません? 頭がc
胴体がDelphi
尻尾がJava
これはなんという生き物か? メインフォームと5つボタンがあるサブフォームあります。
サブフォームで押されたボタンをメインフォームに渡す方法として、下記のようなことが書いてあります。
「サブフォームの呼び出し時にメインフォームのインスタンスをサブフォームの変数に渡すか、もしくは Ownerプロパティを設定し、サブフォームにメインフォームのインスタンスを伝える必要があります。」
これ循環参照にならないのですか?
owner プロパティならフレームワークでうまくやってくれそうですが、そうしないなら典型的な循環参照でメモリにいつまでも残るように見えます。 >532のコードで気になった部分
public FormMain() {
InitializeComponent();
fs = new FormSub();
fs.formMain = this;
}
private void button1_Click(object sender, EventArgs e) {
fs.Show();
} 昔のVBとかじゃないから
参照カウント方式とかじゃないから
大丈夫だよ >>533
循環になってないやん
相互参照になってるだけ awaitの仕組みって面白いな
プログラムは逐次実行と思い込んでいたから最初戸惑ったけど
プログラムの可読性を上げつつ非同期が書ける仕組み バカ、逆に非同期の仕組みが分かりにくい事になってて最悪だわ。
若い奴らはある種のおまじないとしか思って無いぞ。
だからサンプル通りに書いたら動いたで思考停止してるわ。 だったら最初から完全に隠蔽しちまえばいいのにそれも出来ない半端な言語だよな。 >>537
async/awaitはとてもいいよな >>539
へー半端な言語が大増殖してるねよかったね ものすごく細かく気にする価値のないであろう上で質問させてください。
下記のようなコードではColorを予め変数として保持していますが、ColorではなくSolidColorBrushごと変数として持っておいた方が良いと思うのですが違うんでしょうか?(Colorの各変数は下記のConvertメソッドでしか使われていません)
private Color redColor = Colors.Red;
private Color blueColor = Colors.Blue;
public object Convert(object value)
{
switch ((int)value)
{
case 0:
return new SolidColorBrush(redColor);
default:
return new SolidColorBrush(blueColor);
}
} Convert呼び出した側がOpacityとか勝手に変えたりすることがないことが明らかなら
SolidColorBrushで持っててもいいよ >>544
上記のコードは色以外は初期化したいっていう意図だったんですね
理解出来ました、どうもありがとうございます。 return HttpResponseMessage {
StatusCode=HttpStatusCode.InternalServerError
}
これでクライアントにレスポンス返しても、クライアントで受け取ったレスポンスコードが200になるんだが、どうすりゃ良い? short lo = 500;
short hi = -1;
int value = hi << 16 & lo;
上記のプログラムでvalueに期待する結果が格納されません。
valueの右辺へおかしいところありますか? まず期待結果を教えろよ
脳内に格納したままで喋るな >>547
なんとなく&(and)と|(or)を間違えてる気がするけど、期待値書いてくれなきゃ分からんねw >>547
ビット演算?をしてる割には
unsignedじゃないのが気になった C派生のシフト演算子ってビット演算子よりも優先順位低いんじゃなかったか?
C#で入れ替わったのかもしれんが async/await、読みやすいし書きやすいけどな。 https://www.youtube.com/watch?v=O8ucIQA829w
Introduction into StockSharp training course
どうこれVisual Studioってこんなに速く作れるの?
自分で自動売買ソフト組めるってすごくね? クラスの継承について分からくなってしまったので教えて下さい。
以下のプログラムを実行すると、コメントの通り、False, True と表示されます。
[STAThread]
static void Main(string[] args)
{
var desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
var folderItems = new Shell32.Shell().NameSpace(desktopPath).Items();
Console.WriteLine(folderItems is Shell32.FolderItems2); // False と表示される
Console.WriteLine(folderItems is Shell32.FolderItems3); // True と表示される
}
Shell32.FolderItems3 は Shell32.FolderItems2 を継承しているので
2つ目が True なら必ず1つ目も True になると思っていたのですが、
これはどのようなことが起こっているのでしょうか。
FolderItems2 object
https://docs.microsoft.com/ja-jp/windows/win32/shell/folderitems2-object
FolderItems3 object
https://docs.microsoft.com/ja-jp/windows/win32/shell/folderitems3-object
.Net Framework 4.7.2 でコンパイルし、Windows 10 Pro で実行しました。
よろしくお願いいたします。 下記 は子フォームから親フォームへのデータ引き渡しのサンプルです。
ShowDialog(); の戻り値を使ってないのですが、ここがよくわかりません。
static public List<object> ShowForm2(List<object> argObjs) {
using (Form2 subForm = new Form2(argObjs)) {
subForm.ShowDialog(); // 戻り値は?
return subForm.resultObjs;
}
}
現在はデータの受け渡しは ShowDialog(); で表示、DialogResult を受け取り、これで処理を分岐。
これだと呼び出し側が少し膨らむと思って探していたサンプルが上のやつです。 >>561
それだけじゃ何とも言えないけど
ダイアログがキャンセルされたかどうかもresultObjsに含んでる
またはキャンセルされたかどうかは重要ではない
のどっちかでDialogResultは不要と考えたんじゃね
あとはただのチェック忘れか showdialogはあくまでサブフォーム表示中に
処理を進めないためだけに使っていて
表示したサブフォームがOKもキャンセルもない作りなら
返り値を使う必要がないんだろう
例えばファイルの検索処理とその経過を表示するだけの
サブフォームだったりするんじゃないかな >>560
FolderItems2とかFolderItems3はあくまでVSによって作られた
ラッパークラスなんだと思うけど、たぶんこのラッパークラスには
元のCOMの継承関係は反映されないんだろう。
知らないけど。 >>562
レスどうもありがとうございます。
申し訳ないですが、おっしゃりたいことが理解できませんでした。
>>565
レスどうもありがとうございます。
>>560 で貼り付けた URL は不適切で、
本来は以下の URL を貼り付けるべきでした。
申し訳ないです。
FolderItems2 Interface
https://docs.microsoft.com/en-us/dotnet/api/shell32.folderitems2
FolderItems3 Interface
https://docs.microsoft.com/en-us/dotnet/api/shell32.folderitems3
この .Net の説明を見てもやはり継承関係はあるようですし、
if (folderItems is Shell32.FolderItems3 folderItems3)
{
Shell32.FolderItems2 folderItems2 = folderItems3;
}
のようなコードもコンパイルエラーにならないので、
継承関係があることは間違いないと思います。
また何かお分かりのことがあれば教えていただけると嬉しく思います。
よろしくお願いいたします。 COMにおける継承はメンバを引き継ぐという意味であってキャスト可能かどうかは別の話だから
.NETのコード上で明示的または暗黙的にCOMオブジェクト(のラッパ)をキャストした場合
QueryInterfaceが呼び出されてそのインターフェイスに変換できるかどうかオブジェクト自身に問い合わせる
だから共通型システム的には問題ない暗黙的キャストでもその下のQueryInterfaceで拒否される可能性がある 正規表現を教えてください。
先頭一文字は大文字アルファベット、
次の一文字は大文字アルファベットかスペース、
残り五文字が数字、です。
文字数は多すぎても少なすぎてもダメてす。 C#でdxfファイルを読み込んでどんなCADデータかなと表示するにはどんな方法がありますか? >>563
戻り値使わないとエラーでビルドできないと思ったんですが、こんな書き方あるんですね。 >>569
ありがとうございます!
できました!! >>570
Autodeskのサイトからviewerが落とせたと思うがそれ使うんじゃダメなのか?
C#を使って何か独自のことがしたいの? >>570
結構大変。DWGならlibreDWGってライブラリーがある >>573
最終型は建築のキープランってものがあって、そこに無数の符号という記号が丸の中に書いてあるんだけどそこを色塗りをしたい。
>>574
ありがとうございます。
難解過ぎてゆっくり休みの日にでも読んでみます。
>>575
やっぱ大変そうですよね。調べてもなかなか...
C#スレはあったかいな。ありがとうございます! 一般人「ウィンドウ」
キモオタ「フォームがーーー」 c#は食わず嫌いだったけど使ってみたら案外良かった
使いやすいように改良してるんだな コントロールのタイマーの質問なんですが
private void Timer1_Tick(object sender, EventArgs e)
{
MyClass myClass = new MyClass(this);
myClass.//クラスの処理いろいろ
}
こう書くと毎回クラスが初期化されてしまいます
タイマー内で同じクラスのインスタンスを使い続けたい場合どのように書けばいいのでしょか? myClassなんて再利用性が皆無なネーミングすんなよ。 >>580
タイマーのイベントハンドラを消して、適当なタイミング(例えばFormのLoadイベントとか)で
private void Form1_Load(object sender, EventArgs e)
{
var count = 0;
timer1.Tick += (snd, ea) =>
{
Console.WriteLine($"count = {count++}");
};
}
でもこれだとイベントの購読解除ができないので注意
っていうか、ジョークだから真に受けないでw >>581
レスサンクス、そもそも宣言しないってことですか
それもアリかも、今回はインスタンス1個で済みそうだし
>>586
レスサンクス、むむむ、どうなるん?
>>582
めっちゃわかりやすいし >>587
コンストラクタかTickイベント(初回のみ)でTimerのTagプロパティにMyClassインスタンスを設定
senderからTagに設定されているインスタンスを取得して利用するってやり方もある
1タイマー1MyClassって感じの設計ならこっちの方がいいかもね 再利用性のないクラスの名前に拘り過ぎるのは
効率的に無駄だなと感じる
ライブラリ用のクラスは拘るけどね >>588
レスサンクス
だけど考えても理解できませんでした これでいいじゃない
private MyClass myClass = new MyClass(this);
private void Timer1_Tick(object sender, EventArgs e)
{
myClass.//クラスの処理いろいろ
} >>590
コンストラクタで、
Timer1.Tag = new MyClass(this);
イベントで
var myClass = ((Timer)sender).Tag as MyClass;
コンストラクタで作ったインスタンスがTimer1のイベントで使えるようになる
これで理解出来そう? >>590
たぶんこう
var mc = (timer1.Tag ?? (timer1.Tag = new MyClass())) as MyClass;
でもこんなアホなことやったらあかんw 捕捉でsenderの扱いに馴染みがなくて分かりずらいなら
var myClass = Timer1.Tag as MyClass;
って直接コントロールを見てもいいかな
10個のタイマーでそれぞれクラス作るとかだと、メンバに持つのが嫌になるからそういう時に便利 >>591
サンクスです、やってみました
//キーワード 'this' は現在のコンテキストでは使用できません。
thisがなければいけるのですが、
>>593
サンクスです、コンストラクタってMyClassでしょか?
Timer1.Tag = new MyClass(this); //thisが受け付けてもらえません
仕方ないのでButton1_Clickに置きました
var myClass = ((Timer)sender).Tag as MyClass; //myClassがNullになります
var myClass = Timer1.Tag as MyClass; //こっちもNullになります
>>594
サンクスです、うまく動きました
でも正直あまり理解できてません
注:理解するのに時間がかかります windows form で背景色を白から青にジョジョにアニメーションで変化させるには?
今のところコードは下記です。
void timer_Tick(object sender, EventArgs e){
// 白 255,255,255 // 黒 0,0,0
var a = textBox1.BackColor.A;
var r = textBox1.BackColor.R;
var g = textBox1.BackColor.G;
var b = textBox1.BackColor.B;
if (a == 255) { a = 1; }
var a = a + 25;
if (a >= 255) { a = 255; }
var r = textBox1.BackColor.R - 25;
if ( r <= 0) { r = 0; }
var g = textBox1.BackColor.G - 25;
if ( g <= 0 ) { g = 0; }
var b = textBox1.BackColor.B + 25;
if (textBox1.BackColor.B >= 255) { b = 255; }
textBox1.BackColor = Color.FromArgb(a, r, g, b);
// 終了条件チェック、
// 終了処理
} >>597
int counter = 0;
void timer_Tick(object sender, EventArgs e)
{
counter++;
counter %= 256;
textBox1.BackColor = Color.FromArgb(255 - counter, 255 - counter, 255);
} >>596
>>580 でMyClassにthis を渡しているから皆thisを渡してインスタンスを作ってんだけどthisいらないの?
いらないならthisは消していいよ >>599
いやthisは欲しいです、Class内からtextboxコントロールのメソッド触りたいので
form1渡してます >>597
やってみた
public partial class Form1 : Form
{
private Stopwatch mStopwatch = new Stopwatch();
public Form1()
{
InitializeComponent();
}
private Color BlendColor(Color a, Color b, double pos)
{
Func<int, int, int> blend = (i, j) =>
{
var x = Math.Round((1 - pos) * i + pos * j, 0);
return Math.Min(255, (int)x);
};
var A = blend(a.A, b.A);
var R = blend(a.R, b.R);
var G = blend(a.G, b.G);
var B = blend(a.B, b.B);
return Color.FromArgb(A, R, G, B);
} private void button1_Click(object sender, EventArgs e)
{
mStopwatch.Restart();
}
private void timer1_Tick(object sender, EventArgs e)
{
var timeout = 5d;
var elapse = Math.Min(timeout, mStopwatch.ElapsedMilliseconds / 1000d);
var pos = elapse / timeout;
BackColor = BlendColor(Color.White, Color.Blue, pos);
}
} >>600
コンストラクタやフィールドだとthisって使えないんだっけ?
それならこれでいけるかな
Tagの方も同じ感じでいけるはず
private MyClass myClass;
private void Timer1_Tick(object sender, EventArgs e)
{
if(myClass = null)
{myClass = new MyClass(this);}
myClass.//クラスの処理いろいろ
} >>603
れすさんくすです
なるほど宣言と初期化をわけるのですね、うまく動きました Action<T>は値型という解釈で良いのでしょうか?
var dic = new Dictionary<int, Action<float>>()という辞書に保持されているActionのメソッドを引いたり足したりしたいのですが、
下記のようにするとdicのvalueには反映されないようですが再度dicに追加してアップデートしないといけないということでしょうか?
var action = dic[1];
action += method; // action.GetInvocationList().Lengthを調べるとちゃんと足されてる一方、dic[1].GetInvocationList().Lengthは変化なし デリゲートは参照型
action += method は文字通り action = action + method であり、結合後の新しいインスタンスが action に代入される
デリゲート同士の + は String と同様に言語仕様によって特別扱いされており、Delegate.Combine メソッドの呼び出しに変換される
ちなみにイベントに対する += は x.ev = x.ev + method ではなくプロパティと同様にxに対する特殊なメソッド呼び出しになる
作法的な話をすると、デリゲートのマルチキャストは歴史的経緯による遺物であり、イベントハンドラ以外には基本的に使わない方がいいよ なるほど、action += methodは、action = new Action(action + method)的な形ということだったんですね
ありがとうございます Windows form だとちょっとした色変えるだけのエフェクト書くの大変。
iPhone swift だと 下記みたいな 2行 でかけるのに。
UIView.animate(withDuration: 0.5, delay: 0.0, options:[]
, animations: { TextField.backgroundColor = .blue }
, completion : { _ in TextField.backgroundColor = .white } )
Form のクラスメソッドに色、透明度、位置、回転、大きさとかを変化させるアニメーション系のメソッド追加してほしいね。 >>608
そういう人はWPF使う方がええよ
mvvmにこだわらなければそんな差ないし 今でも業務系のASPって、MVCよりWeb formsのほうが多い? >>610
多いと言うか更改されずに腫れ物システムとして生き残ってるのが多いよ ASP: Application Service Provider application hosting options >>610です
>>612
ごめんなさい。自分が端折ってしまったのがいけませんでした。ASP.NETです
>>611
やはりそんな感じなんですかね。意外とASP.NET関連の求人が多いので保守メインなのか開発メインなのか気になったもので ACTIVE SELF PROTECTION の求人だったりして
https://activeselfprotection.com/ Bitmapを返すdllがあります(C#で作成)
それをWinFormsで参照し、Bitmapを受け取りたいのですが、空の?Bitmapが返ってきます。
デバッガでdll側がきちんとBitmapをreturnしているところまでは確認できました。
ほかにどごを見直せばいいでしょうか >>621
dll側をよく確認したところ、記述ミスがありました。
スレ汚ししてしまってすみません。 Process.Start()
で既に起動済みの外部コンソールアプリにコマンドを渡して結果を受け取りたいんですけど
どうすればいいですか? >>623
processをどう作ったか書かないと >>625
普通にこんな感じです
Process prc=new Process();
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.FileName = "hoge.exe";
psInfo.CreateNoWindow = true;
psInfo.UseShellExecute = false;
prc.StartInfo = psInfo;
prc.Start();
コンソールアプリはすぐに終了せずに待機してくれるタイプです >>626
自分でプロセスを起動してるなら入出力をリダイレクトするだけ
psInfo.RedirectStandardOutput = true
psInfo.RedirectStandardInput = true;
起動後は
proc.StandardInput.WriteLine("hoge");
proc.StandardOutput.ReadToEnd();
proc.WaitForExit(); ポリモーフィズムに関しての質問なんですけど
よくある例えでdogクラスのオブジェクトもcatクラスのオブジェクトもまとめてanimalクラスの配列で扱えるみたいなのあるじゃないですか
でも例えばこの時catクラスでだけ定義されてるフィールドがあったとして、配列に格納した途端アクセスできなくなっちゃいませんか
privateとかpublicは置いといて、たとえば、bool isPrettyとか定義されてたとして、animals[0].isprettyは無理じゃないですか。親クラスから子クラスで独自に定義されてるもんは触れられないですよね
とりあえずまとめて親クラスで持っておいて使う時になったら子クラスの情報使いたいみたいなときなんかうまくやる方法ってないもんですかね。 C#的にはパターンマッチングで分岐すればそれは可能だが
親クラスが持っていない情報を子クラスが持っている時点でそのクラス設計は疑わしい
その例ならanimalクラスにvirtual bool IsPrettyを持たせるべき そもそも使うものをまとめておくのが親クラスというかインターフェースや抽象クラスの役目なので、持ってるかどうかもわからないisprettyを使いたいのが間違ってる。無理やりやるんならリフレクションで存在確認するしかないよ 親クラスが持っていない情報というのは言い過ぎだな
親クラスが持っていないpublicプロパティを子クラスが持っているのは怪しい設計 例えばヒゲのプロパティは猫しか持ってないと思うけど、そういう場合は is か as で具象クラスの型を確認してキャストして取ることは出来るけど、それはなんか気持ち悪い気がする 全動物のうち猫しかヒゲを持ってないわけじゃあるまいし
Animal型にNullable型のヒゲプロパティを持たせてそれがnullかどうかで処理を分岐させればいいだけでは
Animalクラスがヒゲを持ってるのは唐突過ぎると思うならFaceプロパティでも挟めばいい >>628
親クラスを無駄なメンバーで膨らませるのはバッドパターン。
インターフェイスを使うべき。
IPrety InterFace を付けたなんらかの型のリストをループすればいい。
// IPrety InterFace で拡張した型ならなんでもループで回せる。
if myUnit.isPrety == true {
myUnit.doSomething();
} >>628
ダウンキャストしなされ
as クラス名;でよろし 色々勉強になりました
こう共通のメソッドとフィールドがあるからくくりだして親にしようくらいの気持ちだったんですけどぐぐったらそういうのそもそもダメらしいですね
素直に各クラスで同じフィールド定義して継承関係全部なくそうと思います。 まあそれだったらanimalに純粋仮想メソッド作ってCatにだけ必要な処理書くほうがいいって考えはわかる >>631
えー、そうなんか
それけっこう使ってるなぁ、、、 .NET Framework の Object クラスを全否定してるじゃんw 親クラスが持ってないプロパティを子クラスが持ってるって
.Netですらわんさかあるじゃないの あ、かぶった
機能を追加するために継承して関数やプロパティを増やすのが
ごく普通の設計じゃね
子クラスの全プロパティを親が網羅してたら使いにくいわ 機能を追加するための継承は現代的なOOPではあまり積極的には行われないんだよ
現代的なOOPにおいては実装継承は本質的に悪であるとされ、明確なメリットがある場合を除いて基本的に避けるんだよ
端的に言えば、抽象クラスを定義して、明確に拡張ポイントとして用意されたメソッドのみをオーバーライドする、
という使い方が今時の唯一の実装継承の使い方であると理解しておけばマサカリを食らうことはない
機能を追加したいだけなら継承する必要は全くなくて、ただそれぞれのクラスを別個に使うか、包含すりゃいいだけだ それほんとにその親いる?って感じの実装だったらabstractにするんじゃなくて? >>641
.NETだとコントロールの大半がそうなっているなw
親の方のクラスでまとめて配列にして場合に応じてキャストして子のプロパティを取り出すとか実装したことはある すみません、初歩的な質問なのですが、クラスやらメソッドやらメンバーやらにアクセシビリティを設定するのは、他の誰かが使用するライブラリーを作成することを想定しているからなのでしょうか?
できるならpublicだらけで作りたいのですがそれがどんな問題に繋がるのかわからずモヤモヤしてます。 >>645
ふーむダウンキャストも絶対やっちゃダメってわけでもないのか >>646
システムが巨大になったときにpublicばかりだと複雑過ぎて手に負えなくなる
巨大になる予定も無いし他人に開示する予定も無いなら好きに作れば良いよ >>648
わざわざ言語仕様にダウンキャストがあるのはそれが有用だからで、使っていけないわけではないよ。下手な設計で濫用されるのが非難されるだけで、適切な使い方をする分には問題ない。
理由も説明せずに杓子定規に◯◯は使うななんて書いているサイトがあれば、おそらくその書き手もちゃんと分かってないと疑ってかかった方がいいくらい。 >>650
普通に考えて問題だから真に受けたらあかんw
外からアクセスする必要がないメンバーがpublicになってるクラスは
滅多に使わない機能のボタンがてんこ盛りのリモコンみたいなもの。
使いたい機能を探すのに不必要な苦労するでしょ
インテリセンスに使いもしないメソッドやプロパティが100とか
表示されるようなクラス使いやすいと思うか? 使いやすさなんて結局はドキュメントの質や命名規約などの高レイヤーの話であって、アクセス制御自体はそれほど重要ではない
メンバをpublicにするということは、そのメンバが利用できることをクラス外に対して約束するということに他ならない
そして、それを後で変更しようとすればクラス外へ波及する破壊的変更となる
将来的な変更の余地を残すために、客に対して不必要な情報公開を避けるという判断は、コーディングに限らずIT業界のビジネスのあらゆるシーンにおいて非常によく行われる そういう議論は為にする議論ってやつだと思うよw
晒すメンバーの数だけ拘束されて自由が減るってのは論理的にはその通りだけど、
現実問題いらないメンバーに故意にアクセスするコードを書くことなんかまずない。
だっていらないんだからw
本質的に重要なのは見えるメンバーの数を減らして複雑性を下げ、生産性を上げること。
時間が一番貴重なんだから 何から何までそれこそループ変数までパブリックフィールドにしていろいろなメソッドで使い回すクラスと対峙しているのでなかなか響く話題
辛い Windowsでbluetooth BLEの心拍計とケイデンスセンサーから
データを取得したいんだけど
どういうコードを書くと取得できるかな?
わかる人いるだろうか Process.Startにディレクトリを渡すとエクスプローラで開いてくれるけど、同じことをスマホなどMTP接続されたデバイスのフォルダでやりたいのですが
エクスプローラでスマホのフォルダを開いた時のウインドウタイトル(PC�fバイス名�`)を渡してもエラーになります。
ProcessでMTPのフォルダを開くことは出来るでしょうか? >>659
MTPってことはPCからはストレージに見えてるってこどだよね?
普通にそのパスを渡すだけじゃないの?
ドライブレターが不変じゃないのが困るってこと? スマホの場合、標準のエクスプローラに相当するものがないから
ひらけないんじゃね? ああごめん、スマホをデバイスとしてPCに刺してる場合ね
ファイル名を指定して実行でアドレスを入れて開けないなら
ファイルパスが認識できていないのかもしれない
エクスプローラのexeにパスを引数で渡して起動するよりないんじゃね エクスプローラーはMTPを通常のフォルダと変わらないように見せかけてるだけ
自分でアクセスするにはそれ用のAPIを使う必要がある 質問です
VisualStudioとかUnityってメモリ4GBのノートパソコンでも動きます?
それともゲーミングノート買った方が良い? 動かなくは無いかな
重いかどうかはやるのが早いんじゃない?
速度に不満で長く続けられそうなら
新しいのを買えばいいんじゃないの そふとうぇあなど実態のないデジタルデータを売ってお金をだまし取るのは詐欺なのでは? 文字列を検索して文字数と行数を同時に取得する方法はないでしょうか?
VisualStudioのフォルダ検索みたいにヒットした行の行数と内容を表示して
ダブルクリックで該当ファイルを表示→選択箇所へジャンプとかやりたいです 文字列探索の要件が判らないとエスパー回答になるな
C#ならではの方法としては、オブジェクトのハッシュコードを照合するという
方法もあるね 文字数はstring.Lengthで良いのでは?
行数はそのstringをforして1charづつ改行charなら++して数えていくとか File.ReadAllLineで全部とるか、メモリ上なら改行コードでsplitして配列の添字を取ればいいじゃない >>672
その場合、テキストボックスでフォーカスを当てるための文字数って地道にカウントしてくしかないっすよね? >>673
基本的にそう
テキストエディタとかはそんな感じで実装してる >>674
なるほど
地道にやってんすね
やってみた感じ
文字数から行数出した方が楽だったのと
検索しながらは検索文字列に改行コード入ると面倒だったので
@検索文字列のヒットした文字数を出す
A文字数に対する行数を出す
の順でやりました
ありがとう御座いました 何言ってるのかよく分からんかったけど、
文字数 ⇒ 一致部分の最初の文字のインデックス
行数 ⇒ 一致部分の行の行番号
ってことかw
数え方の問題があるからだろうけど、Stringには一致箇所の数をカウントする
メソッドは存在しないんだね。 検索一致箇所までの文字列を切り出して
改行でspritして要素数から行を得るというのはどうかな
折り返しは考慮されないけどね
あとtextboxなら折り返し込みで
文字インデックスから行に変換する
メソッドがあった気がする 検索される文字列が巨大だった場合Splitはさすがに富豪的過ぎるでしょ。
RegexかString.IndexOfでベタにやった方が 文字数多いとsplitはパフォーマンス辛い可能性があるね
regexもそれなりに…
パーサー的なものなら頭から逐次処理するのが一番だったりするし ググったらreplaceを使ってlengthの差で求める方法があったけど
これも一時的にメモリ上で二重化されるから
巨大なログファイルとかだとあまりいい方法ではないな
IndexOfの検索結果を次の検索開始インデックスにしながら
カウントするのが一番楽で無駄がなさそうだ 自己解決
MTPデバイスへのショートカット(.lnk)をメモ帳で開くと見えるリンク先
(こんなの→"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\\?\usb#vid_12d1&pid_1031&mi_00#7&22311cc4&0&0000#{6fa27828-a61a-4555-ba33-f28f495d4f31}")
をProcess->Start()にそのまま突っ込んだら、エクスプローラが起動してMTPデバイスを開いてくれました。
ちなみに、テキストの末尾に(〜5d4f31}\内部ストレージ\Android")というようにディレクトリを追加すれば、そのフォルダを開いてくれます。 private class Parameter
{
public DateTime setTime { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string address { get; set; }
public int sex { get; set; }
}
↑のParameterのListデータで
setTime,Name,Ageが重複している情報を取得と排除したいんですがループでチェックするのは時間がかかりすぎるので
簡単で早く処理できる方法はないでしょうか? Parameter.Equals() をオーバーライドして
用意した HashSet<Parameter> foreach で Add() を呼ぶ >>682
個々の要素参照するんだからループするしか無いんじゃないの
あらかじめどこか他にデータ持っているのならともかく
簡単にというのなら参照したデータをList<T>に入れていけばList<T>.Containsでチェックできる なんか色々おかしかった
↓正
Equals() をオーバーライドして
用意した HashSet<Parameter> に対して foreach で Add() すればよい >>682
普通のListで「全要素について、別の要素と重複があるか」をチェックしようとしたらO(N^2)になるから
効率よくしたいならHashSetを使うといい
ただEquals()とGetHashCode()を適切に(今回の場合、setTime, Name, Ageだけで決まるように)実装する必要がある >>686
HashSet の重複判定って GetHashCode() 絡んでるのかね?
名前的には関係ありそうだけど
仕様が見付からない… まだ試してないけどHashSetってことはsetTime, Name, Ageだけのチェックにはならないのかな
setTime, Name, AgeがDBのキーになる予定なので無理そうな気が Reference Source で実装みればええやん
GetHashCode と ICompare 指定しなければ Default の Equals の両方やね >>689
質問の感じから今現在自分で実装したものがあるんでしょ?それを載せたほうが微妙な解釈の違いに対しても最適解が出してもらえそうな気がするけど キーの重複は
GetHashCode() の一致 → Equals()
みたいだな
GetHashCode() は重複しにくいメンバの GetHashCode() で
Equals() で完全一致の判定をすれば大丈夫そう あるサイトを参考にしてみたのが
private class Parameter
{
public DateTime setTime { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string address { get; set; }
public int sex { get; set; }
}
private class ParameterDistinct : IEqualityComparer<Parameter>
{
public bool Equals(Parameter i_lhs, Parameter i_rhs)
{
if (i_lhs.setTime == i_rhs.setTime && i_lhs.Name == i_rhs.Name && i_lhs.Age == i_rhs.Age)
{
return true;
}
return false;
}
public int GetHashCode(Parameter i_obj)
{
return i_obj.setTime.GetHashCode() ^ i_obj.Name.GetHashCode() ^ i_obj.Age;
}
} //データ追加
var ParameterList = new List<Parameter>();
//重複排除
ParameterDistinct qualityComparer = new ParameterDistinct();
IEnumerable<Parameter> ParameterLister = ParameterList.Distinct(qualityComparer);
でやってみたんだけど重複がでたんだけど何かまずいだろうか
参考にしたところはDatetimeは使っていなかったので駄目なのかな DateTime をつめるときに DateTime.Now とか使ってると ミリ秒で差がでてるかもしれない。
DateTime を == で比較すると 内部的には DateTime.Tick 同士で比較するから なるほどDateTime.Nowは使っているので調べてみます。
ありがとうございました! なんで単なる取得でメモリ使うんだよ
unsafeかなんか付けて昔ながらの方法でやるのが一番速い ライブラリ作ってるわけでもないのにunsafeとか論外なんだが
その上unsafe付けてやることが2重ループでの完全一致検索とかじゃ
どうせHashSetのパフォーマンスに大敗する git使わずに、自宅のデスクトップ環境とノートPCのプロジェクトファイル類を同期させたいです。
現在Onedrive使ってますが、binやobj配下まで同期されるのが残念な感じ。
binやobjの出力先はWPFプロジェクトなら変更できましたが、ASP.NET coreプロジェクトでどう変更するのか不明
VSTSで上記を実現または他の方法あったりしますか?
ちなみに現在はVS pro サブスクリプションに入ってます Microsoftの開発ソフト使ってんならOneDrive使えるだろ? 最後にcleanすりゃいいだけだから。
もしくは同期ドライブ直接はコンパイルしないとかな。 svnを使う
onedrive以外の場所で開発してonedriveフォルダに必要なファイルを同期ツールとかでローカルコピーするようにする
なんでonedriveはokでgitがngなのかがわからんと提示しづらい OneDriveって特定のフォルダだけ同期しない設定にできないのか
6,7年前にオンラインストレージが流行った時には
タダで大容量で高機能のがいっぱいあったのになんだか退化してるよねw labelの文字列の一部を太文字にしたり色を変えたりといった表現をしたいのですが
何か良い方法はないでしょうか?
コントロールではなくメインプログラムのほうで操作できるようにしたいです
labelと同じ見た目ならなんでもよいです
textboxの様な感じではなくlabelのような感じが目標です のような感じと言われてもどういうのがNGでどういうのがOKなのかよく分からんが
手軽なのはRichTextBoxを使うことで
そうでなければPaintイベントで全部自前描画ということになる >>700
ちと面倒だけど、ブランチとか使えるのが便利だから、サーバ立てるまでOneDriveのフォルダ上にgitのリポジトリ作ってた事がある。
OneDrive内の任意のフォルダの中でgit init --bareするだけ。
したら、そのフォルダをremoteとして登録出来る。
あとは任意のタイミングでpush/pullするだけ。
作業フォルダをOneDrive内に置いて自動的に同期もやったけど、objとかが共有される問題よりも、同時に開いて悲惨なことになる事があったので、今はしてない。
(競合したら「もとのファイル名-端末名」ってファイルが大量にできる) ああ、確かにリポジトリをonedriveに入れるのが一番スマートかも
昔dropboxにsvnリポジトリ作ってたことあるわ メモリ消費は税のようなもの
しょとくだけに
消費だけに 環境はWindows formアプリです。
TableLayoutPanel と DataGridView の使い分け方がわかりません。
datasource property の有無だけ? >>705
自分で描画するのはメソッド作るのも指定するのもめんどくさいよ
https://dobon.net/vb/dotnet/graphics/measurestring.html#section1
>>706の言う通りRichTextBoxをBorderStyle.Noneにして背景色を合わせた方が楽じゃないかな
どうしても文字以外を透過させたいとかならともかく
>>710
HTMLのテーブルとExcelの表が同じに見えるのならそうかもね コンソールアプリが作れればいいやと思ってpaizaでシコシコ勉強してますが他にどんなことすればいいですか?
目標は外部のファイルを読み込んでコンバートするアプリを作ることです。 外部のファイルを読み込んでコンバートするアプリを作ればよいのでは?
そんなに難しくないよ
何をどうコンバートするかにはよるかもしれないけど プログラミング未経験者です
すいません、ちょっと趣旨から外れるかもしれませんが質問です
電気(強電)、計測(コンビナートとかのプラント計装)の知識ってC#で活かせますか?
C#の求人や書籍を検索すると、電気回路の制御ソフトとか計測器制御とかがヒットするので気になって質問させていただきました >>714
FAの制御系だったら測定器やPLCとの通信がメインになるからそれなりに知識あったほうがいいとは思うよ >>715
SQLの整形をしたいの?
SQLって方言が結構あるしパース(字句解析+構文解析)自体の難易度も初心者がやるものじゃ無いと思う >>715
SQLのパーサーなんて出来合いのライブラリがいくらでもあるよ
自分でわざわざ使い物にならないゴミを作って時間をドブに捨てる必要はない オライリーのlex & yacc がsqlのパースの
サンプルだったけど
C#は対応していないかと すまんが、スレッドを指定して実行ってできないもんなの?
指定できればロックが必要な箇所が減っていい気がするんだけど・・・・どうなんだろう スレッド起動しないかWaitしておけば、
良いんじゃね >>721
Producer-Consumerパターンを使って特定スレッドでだけ処理するのはどう?
BlockingCollection<T>使うと楽に実装できるよ Dllimortで呼び出す関数の引数にはジェネリックは使えないのでしょうか? >>724
どんな使い方を想定してるの?
っていうかそれ、呼び出されたアンマネージド関数側はどうしたらいいの?www >>726
.NETのジェネリックは実行時に特殊化されるから、技術的にはそんなに無茶な話ではないよ まあどのみち今のところできないから、いんぽ関数自体はIntPtrで受け取って
Marshal.PtrToStructureとかでごにょごにょするジェネリック関数でラップする感じでやるしかないね
SystemParametersInfoとかでそういう欲求があること自体はわかる >>729
質問者を馬鹿にするほどには突飛な発想ではないということだよ
.NETのジェネリックがどのように実装されているかを知っていれば、できてもいいと考えてもおかしくはない 十分突飛だと思いますけどね。
これ、アンマネージドに限らない。
マネージドだろうが、他のアセンブリで既に定義されてる
非ジェネリックなstaticメソッドをジェネリック化したいと言ってるのと同じ。
だから、呼ばれた側は何すりゃいいんだよw >>731
CのAPIだと、サイズが同一の異なる型を一緒に扱ったり、条件に応じてポインタの指す型の解釈を変えたりとか珍しくないでしょ >>732
そういうのは共用体とかオーバーロードで解決できるでしょ。
ジェネリックを使うって発想は意味不明だよ >>726
具体的にはLPVOID引数で自己責任ながら参照型からref、outやintなどの値渡しまで色々な型のオーバーロードを作って実際にちゃんと機能しています
なので一々オーバーロードとそのラップだけで30行ほど使ってしまってる現状が無駄に思えてどうにか方法ないかなと 一例としてはこんな感じ
APIの想定される構造体がBlittableのみならマーシャリング不要なので
unmanaged制約にしてアドレス渡しの方が効率は良い
public static T GetSystemParametersInfo<T>(SPI uiAction, uint uiParam, SPIF fWinIni) where T : struct {
T value;
var buffer = Marshal.AllocCoTaskMem(Marshal.SizeOf<T>());
SystemParametersInfo(uiAction, uiParam, buffer, fWinIni);
value = Marshal.PtrToStructure<T>(buffer);
Marshal.FreeCoTaskMem(buffer);
return value;
}
まあぶっちゃけお行儀的にはオーバーロードだらだら並べる方が正解ではあるんだけどねw c# で必殺技みたいなメソッドがあったのですが思い出せません。どなたかご存知ないでしょうか? >>736
privateメソッドを外部から無理矢理呼び出すやつ? リフレクションならDynamicInvoke()がなんともかっこいいメソッド名
>>736のはおそらくはデストラクタあたりを想定してるんじゃないかと思うけど >>718
>>719
さんきう
とある製品のRDBMSのSQLに独自の書き方やら関数やら記法やらが混じってるからなんとかしたかったんだけどライブラリとやらを使えばいけるのかな。 1) githubで"sql parser"と検索
2) C#で絞り込む
3) 上から順に試す
4) 好みのが見つかったら改造を試みる
少なくとも1から作るよりは圧倒的に楽だし勉強にもなるよ >>726
dllってことは既にasm化されてるんだから型なんて関係なく受け取ったもんを問答無用でバイナリとして処理するだけだろ
C#はそういうのをコーディング段階で防いでるだけであって >>746
〜だろ
馬鹿ほどぞんざいで偉そうな口調なのは法則なのかねwww 少なくともC#のジェネリックはstringとbyte[]を透過的に扱ったり、
longをint2つと透過的に扱ったりするための仕組みじゃありませんwww
だからそういうのは共用体やオーバーロードを使うんだってw BitmapをBitmapDataにしたいのですが、使用されたパラメータが有効ではありませんと言われてしまいます。
ファイルから読み込んだbitmapは変換できるのですが、このようにコード上で作ったbitmapはダメです。
何がいけないのでしょうか?
Bitmap trimBmp = baseBmp.Clone(rect, baseBmp.PixelFormat);
BitmapData bitData = trimBmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); rectで切り出した後、その切り出した後のビットマップから
さらにrectで一部分のロックしようとしてるけど大丈夫? 全面じゃない? >>751
baseBMPからrectで切り抜いてますが、trimBMPにとってはrectは全面だと思うのですがダメなのですかね?
でも
Bitmap bmp = new Bitmap(100,100)
みたいな素画像でもやっぱりLockBitsできないです >>752
>trimBMPにとってはrectは全面
ではなくbaseBmpのrectの範囲って自分で指定しているよね
BitmapData bitData = trimBmp.LockBits(new Rectangle(0, 0, trimBmp.Width, trimBmp.Height), ImageLockMode.ReadOnly, trimBmp.PixelFormat);
>Bitmap bmp = new Bitmap(100,100)
>みたいな素画像でもやっぱりLockBitsできないです
できる。そっちもちゃんと引数の指定してみて private Point CalcPopupLoction(Form launcher, Form popupForm) {}
ボタン押したときに上部に表示する モーダルな popup フォーム の位置を計算するメソッドを書きました。
ボタンが左の方にあると、親フォームの左枠をはみ出さないように、popupForm は左揃えで表示。
真ん中へんにあると中央揃え、右端ならボタンとpopupForm を右揃えで表示する感じです。
1つ目の引数の良い名前が思い付きません。
主にボタンを想定してる引数です。
launcher (発射台)はどうもしっくりきません。
parent や baseForm はなんかおかしいのでやめました。 >>754
そもそもそんなメソッドいらんでしょ。
ポップアップがどこに表示されるべきかはボタンを持つFormが知っているんだから
そいつに聞く(そいつのプロパティーとして実装)のが一番 あー、右に揃える場合もあるのね。
じゃあボタン持ってるFormに
void ShowModalPopup(Form popup)
みたいなメソッドを持たせればいい こういう使い回しが効きそうなのはいちいちフォームに実装しないで拡張メソッドにでもした方が 本当はボタン持ってる方のFormに
interface IDialogOwner:IWin32Window
{
HorizontalAlignment DialigHAlignment { get; }
Rectangle Rectangle { get; }
}
みたいなのをかぶせて、Popupする方のFormでShowDialogをオーバーロードして
void ShowDialog(IDialogOwner owner)
みたいにするのがいいのかも。
酔っぱらってるんでよく分からなくなってきたw C#でawaitに対応していないメソッドをawaitで非同期実行できるようにする方法を教えてください.
以下のようにしてもActionが実行されませんでした.
private async static void SomeHandler()
{
Console.Write("Burn");
await new Task(new Action(() =>{
Console.Write("[Start]");
Thread.Sleep(2000);
Console.Write("[Completed]");
}));
Console.Write("End");
} bitmapinfo とか
dibsection とか
bitmapinfoheader とか
勉強してみたら >>759
TaskCompletionSourceだっけ?うろ覚えですまんが、jsのPromiseオブジェクト的に使える。 ID:QdBzCxoka
何の話してんのこの人
>>754
変数名が思いつかないとかはこのスレじゃなく
クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1494147712/ >>766
交通整理バカw
設計が間違ってるのに名前付けて何の意味がある >>766
レスありがとうございます。
そんなスレあるの知らなかった。 >>754
private Point CalcPopupLoction(Form launcher, Form popupForm) {}
上記は下部のボタンの位置に応じて、大きさのことなるpopupForm の表示位置を計算するメソッド
exportButton_Click 内で、
ShowDialog(); で表示する popupForm に戻り値を設定
https://i.imgur.com/ggjo4td.jpg >>754
・Loctionて何
・ボタンの置いてあるオーナーウィンドウと対象のボタンを引数に取った方がいいと思う
・計算だけなら全部Rectangleでいいんじゃないの
Rectangle CalcPopupLocation(Rectangle Owner, Rectangle TargetButton, Rectangle Popup) >>769
だからさ、そのメソッドをどこに書くおつもり?
ポップアップを左右どちらに寄せるべきかを知ってるのは特定のFormだけのはずなのに
その例のllauncherの型がFormってのは変じゃないか?
そもそも何で「左右どちらに寄せるべきかを知ってる」奴のメソッドとして実装しないの?
それなら引数で渡す必要ないと思うんだけど。 >>770
必要な情報は
(1) 左右どちらに揃えるか?(HorizontalAlignment)
(2) 揃える位置のx座標
だけだね 書き込みは、人を憎んでコードを憎まずのこころで行いましょう。
たとえクソコードであっても悪いのは書いた人だけです。
コードやプログラミング言語に罪は一切ありません。
コードの悪口はやめましょう。
クソコードの修正と言わず、リファクタリングといえばいいのです。
大量殺人犯や c# プログラマーの醜い心はリファクタリング不可能ですが、コードのリファクタリングはカンタンですよ。
https://www.google.co.jp/amp/s/anond.hatelabo.jp/touch/20180319181104%3fmode=amp 性格は分からないけど姿勢みたいなものは見えると思ってる
こんなコピペばかりして少しはおかしいと思わないのかな?とかこんな古い書き方して言語の文法ざっとでもいいから一通り見たのかな?とか
いいコードを書こうとしてる人とそうでない人の差ってすごくよく分かる。本当に能力無くて頑張って頑張ってるのにひどいって場合もきっとあるんだろうけど 式木がイケてるらしいですが使いどころが解りません
プロの皆さんはどこで使ってますか? >>778
使わない
高度なフレームワークを作るための機能であり、ドカタグラマには全く必要ないから忘れていいよ 自分より給料貰ってる先輩(笑)が
クソコードを産み落としていた場合は人もコードも憎む
というか蔑む 何を以ってクソコードかは難しいところだが具体例なら無数に挙げられるぞ
switchを使わず延々とif-else if分岐
if(flag) return ture; return false;
一行違うだけのメソッド大量生成
マジックナンバーだらけ
コレクションはほとんどList
かと思えば特にライブラリに必要とされているわけでもないobject[]
もちろんパターンマッチングなんて概念は存在しない
out代わりにrefを使う
boolではなくintをフラグとして使う
クラス内のあらゆる場所から明示されず書き換えられるフィールド
どう見ても親子関係にない継承
メソッド1個300行以上
これがさぞ大変な処理かと思えばリファクタリングしたら40行で書けた
1行に300文字以上
リソースでもFormsでもない普通のクラスが4000行 >>783
ぜんぜん許容範囲だな!
その程度でくそ呼ばわりされたらたまらん >>783
>>switchを使わず延々とif-else if分岐
>>マジックナンバーだらけ
>>クラス内のあらゆる場所から明示されず書き換えられるフィールド
>>メソッド1個300行以上
>>リソースでもFormsでもない普通のクラスが4000行
今直面してるのにまさに当てはまっててもう
>>コレクションはほとんどList
こっちはListどころか配列しか使わないんだぜ。もう書き方が完全にC メソッド以外はどれも影響は大きくないし
多少大きくてもテストできればなんとかなる
ちょっとした文化の違い程度の話だ 初心者が一見してくそ呼ばわりするコードはたぶんくそじゃない
わかるから細かい粗が目に付く
普遍的恐怖を知るべきだ
ぐちゃぐちゃな循環参照
テストできないメソッド
う そ っ ぱ ち の 名 前 突然現れるlinqの長々としたクエリ式
せてめメソッド式にしてくれ しかしC#いつのまにやらパターンマッチまで入ってたんか… sqlを全て文字列結合で作ってるうえに500行以上あったときは後輩に丸投げした >>780
バグやコードを憎んで、人を憎まず。
こんなこと言ってるプログラマーは意識高い系の偽善者のクズ。 あいつに任せた俺の責任だからって最初から頭数に入れていないから憎みもしない。必要なら全面書き直しもいとわない。 >>794
時と場合を考えて最適なコレクションを検討しろ
>>795
特別な理由がないなら褒められないな >>798
特別な理由がないならと言ってるだろうが windows formsの書き方についてなんですけど
メイン画面にタブがいっぱいあってそれを切り替えて……みたいなアプリなんです
んで中身見たらFormクラスが1万行オーバーで。画面一つだからって何もかも突っ込んでる感じなんです
画面というかフォーム一つで1クラスみたいなのが通常の書き方なんでしょうか >>800
タブ毎にユーザーコントロールを作ればスッキリはすると思うよ >>800
「通常」はどうか知らないけど例えば
MDIアプリケーションを作成する
https://dobon.net/vb/dotnet/form/mdiapplication.html
こういう作り方もある
あと一つのフォームに普通のコードはともかくコントロール(InitializeComponentのなか)を多く詰め込みすぎると起動に時間がかかるようになる
現状で問題ないのならそこは気にすることは無いが >>800
parcial class でタブごとにファイルわける。 なるほど参考になりました。
今思えば既にタブごとに部分クラスわけしてファイル別になってたような気がしないでもない……となると実質一クラス10万行か。笑えない >>800
1000行超える時点でオブジェクト指向できてない証拠 フォーム以外で使わない処理を
わざわざ外部のファイルやクラスに作る必要なんてある? >>807
それで可読性が高まるならやる意味はある お前を含めた全人類が未来永劫そのコードに手を加えない保証があるなら好きにすればいい ググったらタブ大量にあるような場合>>802がクラス分割のためのメジャーな手法なのね 游ゴシックの英数文字をMeasureStringで取得した矩形を使ってDrawStringすると高さ不足で表示されない
矩形を使わなきゃ表示はできるから良いけどもやもやする フォント周りおかしいのはMS伝統では
ないだろうか?
Q そんなざっくりした話じゃ、どうせお前自身のコードのバグだろって
反応しか返ってこないと思うw インターフェイスと抽象クラスってどう使い分ければ良いのでしょう?
ググってもよくわかりません。 インターフェースなら継承関係のない複数のクラスのように
振る舞うことができる 大雑把言えば
プロパティとフィールド(値)を保持するのがクラス
クラスのメソッド(挙動)を公開するのがインターフェイス それが抽象クラスとなにが違うのだ?と彼は聞いているわけで インターフェイスは値を持たないし
原則として挙動の実装も持たせない >>816
使い分けで悩む必要はないと思うよ。
インターフェイスで目的が達成できるならあえて抽象クラスを使う理由はないのだから。
たぶん使い分けが分からないのではなく、インターフェイスの使いどころが分からないだけじゃないのか。
よくわからなくてもとにかく実際コードを書いて使ってみることが重要。
別に難しい話じゃないので使ってるうちに自ずと分かる。たぶん 多重継承的なことがしたくなったらインターフェースを使う
くらいな感じでいいのかもね 私もよくわからないんですが、インターフェースって実装内容は問わないけどこの名称のメソッドは用意しなさいよってコトですかね?
インターフェースでメソッドを定義しても、継承したクラスがそのメソッド名に合ってない実装をしてしまったらと考えるとインターフェースのメリットがイマイチピンときません >>823
継承したクラスで変にオーバーライドされたら…
なんて気にしたら何も書けなくなるよw
それはオーバーライドした奴の責任だから気にしてもしょうがない 多態で使うんだよ
用意しなさいってのは発想が逆で、インターフェースに定義されているプロパティなりメソッドなりが実装されていることが保障されていると考える
実際の実装は気にせずに呼ぶ側はインターフェースのメソッドを呼べばいい 抽象クラスは重複の排除で使う、インターフェイスはテストする時の視点で必要
クラスAがクラスBの機能を利用する時に
クラスAはインターフェイスに対して実装しとけば
クラスBの変更に影響を受けないし、
テストする時にクラスBの代わりを作るのがインターフェイス部分だけになる
これがもしクラスAがクラスBの抽象クラスに対して実装すると、
クラスAをテストするときに抽象クラスの不要な部分まで要求されてしまう
また複数人開発においてもインターフェイスを利用すれば各個人が独立に作業しやすくなる 呼んだはずのメソッドが(インターフェースでは要求されてるのに)実装されてなかったら
コンパイルエラーじゃなくて実行時に例外吐くか
unknownmethod()みたいな呼び方してくれると便利 クラスに由来しない振る舞いを定義するのがインターフェイスとも言えるね。
良く例示される「動物」クラスで考えると。
・「動物」は動くのだから「移動」メソッドに必然性がある
・だけど「移動」するのは動物だけではない
・いま「移動」と言うメソッドに着目して操作を行いたいとする
・「移動」は動物でも自動車でもロボットでも行う
・でも自動車もロボットも動物ではないのでいからそのメソッドの由来を「動物」クラスに求めるわけにはいかない
・加えて、動物や自動車やロボットに直系する(基底)クラスもない
・故に「移動」メソッドの由来を「動物」クラスにではなく「移動」インターフェイスに求めてみる
・・・的な。 実行時に例外吐くのはめちゃくちゃ恥ずかしい
コード書いたやつはバカですと言う証明
私はデバッグもできない馬鹿ですで表明してるようなもの コンパイル時にエラー吐くならそこでデバッグできる
実行時エラーなら全ての場合でエラーがないことを実際に確認しなければならない
どちらが便利かわかるだろ 先日、マンガ村の運営者が著作権法違反の容疑で逮捕された。
c# プログラマもマンガ村と同様の共有システムgit等を利用し、マンガやソースをインターネットを通して共有している。
github など分散型のバージョン管理システムを利用している c#プログラマはマンガ村の管理者と同じ位置にいるといえる。単なる利用者ではない。
c# プログラマはマンガ村管理者と同一人物といえるので、著作権法違反の共同正犯として刑務所にぶち込むべき。 c#のインターフェイスにはプロパティも宣言できるよね
あれは実質的にはフィールドと同じ様な感覚で使えてしまう だって>>831のような解釈は時代遅れだし特にC#(というかMS系)では一般的ではないからな
今時は「動物」という一般的実在だろうが「移動できる」という抽象的性質だろうが区別せず、
実装を限定したくない場合は原則常にインターフェイスを使うのが一般的だ
特にMSの場合は顕著で、ほぼ全クラスの全メソッドをインターフェイスに定義するというスタイルを取ることが多いし、またそれを推奨してもいる >>837
初心者スレで珍妙な独自理論を一般的だなんて教えるのはやめれ 今年始めた初心者だが
クラスが大カテゴリ
メソッドが小カテゴリ
インターフェースが小カテゴリらの存在を保証する中カテゴリ
このくらいの認識しかなかったわ 831 だけど。
複数のクラスインスタンスの動的読み込みとか始めるとそんな感じになることもあるよ。
プラグインとかの識別に便利だし。
そうだとしても、たぶん 831 の1行目と矛盾してないでしょ。
ただ初心者相手の説明にこんなこと言いだしたら収拾がつかなくなるし、
全メソッドをってのは、まあ頑張ってな、と返すしかないけど。 すまんが、エラーメッセージにあるカッコ内の行番号らしきものってさあ
片方は間違ってる行っぽいけど、もう片方は一体何なんだぜ? >>843
その行の何文字目かって意味
例えばファイル先頭に「int a = "";」と書いたら(1,5,1,6)でエラーが出るけど
これは「1行目5文字目〜1行目6文字目」の箇所でエラーになっていることを表している >>844
ありがとう!何文字目かなんて全然わかんなかったよ >>847
その返しはこのスレではいかんだろ(笑) では質問しますね
Timerコンポーネントで
Timer1.Interval = 5000;とすると、プログラム起動後5秒後に初めてTimer1_Tickが
実行されますよね、これを起動時に1度実行したいのですがどうしたらいのでしょうか
Form1_Loadに書けばいいような気がしますが引数がわからない 忘れたけどTimerってTimers.TimerもThreading.Timerも大体どんな種類の奴でも最初のディレイタイム指定できなかったっけ? >>852
レスサンクスです
Delayでぐぐってみましたが、プログラムを遅延させるほうのDelayばかりヒットして
なかなか見つかりません、Timerのプロパティにそういうなのがあればいいんですが >>853
処理を関数化しておいて、コンストラクタから呼んだらいいんじゃね?
別にタイマーから呼ばなくてもいい >>851
最初100で、中で則5000書き換えじゃあかんかったっけ >>854
サンクスです
Timer1_Tickの中の処理をゴソっと別にうつすんですか、確かにうまくいきそうですね
>>855
さんくすです
Timer1.Interval = 100;からTimer1.Interval = 5000;に変更ですか
これもうまくいきそうですね、厳密な秒数は必要じゃないですし >>851
どんな方法使ってもいいけど後で読んだ時に何をやってるか
分かりやすいのが一番だね
public Form1()
{
InitializeComponent();
Form1.Load += (sender, e) => OnEvery5Seconds();
Timer1.Tick += (sender, e) => OnEvery5Seconds();
}
void OnEvery5Seconds()
{
.....
}
こうやった場合、FormのLoadイベントより前にOnEvery5Secondsが呼ばれる可能性が
あることは注意する必要がある。(実際にはないと思うけど) >>857
れすさんくすです
なるほど、こんな書き方もできるのですね、うまくつかえばすっきりまとまりそうです >>852
流れから推測するとたぶんWindows.Forms.Timerクラスだね 非同期メソッドでちょっとだけ同期処理するのにはどうすれはいいのですか?
async Task ABCasync(){
ABCasyncの呼び出し元には、終わるまで待っていてもらいたい処理();
//ここでtaskで呼び出し元に何かを返せたりするのかしら?
ABCasyncの呼び出し元には、待っていてもらう必要のない処理();
} クラスは知識
メソッドは機能
という認識は事のほか難しいんけ? >>862
そういう一般的でもない訳のわからない解釈を出されても、普通の人には理解できないかおかしな理解のまま突き進むことになるだろう ゲームのクラスの方がわかりやすい気がする
戦士 魔法使い 僧侶 盗賊
それぞれできることが違う あはは、まあ、学校のクラスだと対抗戦が出来るくらいに似たり寄ったりだから意味が分からないよな。 逆に、同一のクラスの異なるインスタンスなんてのもできないしね。 >>865
じゃぁ男女別は?
どっちのクラスが上位なの?
それとも同格で、男戦士 女戦士ってなるの?
半魚人タイプとか4足系の戦士は? 出来ることが変わらないなら基本変えなくていいよ
設計次第だけど
質問の内容の男戦士と女戦士で何が違うのかはっきりしない
力などの属性値(プロパティ)だけが違うなら分ける必要はないわな
半漁人でも4足系の戦士でも数値しかかわらないなら同じ
コードが共通になるなら基本的に分けなくてもいい C#はじめて最初の日に読み飛ばすところで議論しても不毛だよな
>>870に賛成 質問です
工場とかインフラの制御ソフトモドキを成果物としてWindowsアプリケーションの形式でC#で作りたいんですが、この2冊終わった後にWindowsアプリケーション開発の本買うなら何が良いですか?
また、本が時間の無駄だとしたらどこのサイトを参照すれば良いですか?
上記の件よろしくお願いしますm(_ _)m
1冊目 なるほどなっとくC#入門
2冊目 C#プログラミングのイディオム/定石&パターン >>872
FormならGUIの作り方は必用なことをググって調べながら実際に作ってみるのが一番。
本は1冊以上は読むだけたぶん時間の無駄。
何かを制御するなら、それが大企業の製品で.NET用のライブラリが用意されているのでない限り
たぶんアンマネージドの知識が必要になる。
これは多分本はないので自分でググって調べる
あと多分非同期処理は必須。
最初.NET1.x時代の生のThreadとか使う記事に軽く目を通して、
その後は今時のTPLや非同期メソッドの記事を読めばいい。
本もあるけどたぶんweb上の記事で十分 非同期メソッドの実行自体は慣れたけど
win10のアップデート強制再起動時に
非同期処理中のタスクをきちんと終了させる方法がわからん
突然書き込み中のファイルがぶっ壊れそうで怖いわ >>875
工場の制御ってRS-232CとかPLCとかGPIBとかやろ
別にアンマネージド必要ないだろ >>878
そうかもしれないけど拡張ボードの型式でライブラリはアンマネージドdllだけかもしれない。
USB接続でアンマネージドdllの可能性もある
何とも言えない マネージドなドライバーが無いなら使わないって選択をだな。 UI操作とawaitを使った非同期メソッドをまとめたasyncメソッドを別スレッドから呼び出すにはどうすればいいですか? >>882
すみませんでした。
例えばこういう感じのメソッドを別スレッドから呼び出す方法を教えてください。
async Task DoSome()
{
label1.Text="処理中...";
await DoLong();
label1.Text="完了";
} 正直設計を考え直した方がいいけど
メインスレッドで動作してる間に
TaskScheduler.FromCurrentSynchronizationContext()
でTaskScheduler確保しておいて、その"別スレッド"内で
new Task(() => DoSome()).RunSynchronously(taskScheduler)
する こうじゃダメなの?
Invoke((MethodInvoker)(async () =>DoSome())); >>883
やっぱりそういうのは非UIスレッドからも呼び出せるようにする、ではなく、
逆に普通にUIスレッド専用のメソッドとして提供して、
もし必要ならXMLコメントとかで「UIスレッド以外からの呼び出し禁止」って
明示するのが筋なような気がするw >>884
>>888
filesystemwatcherのハンドラから呼び出すと別スレッドからの呼び出し扱いになってしまいます。 まあその用途ならやっぱコントロールのInvokeの中で呼べばいいだけの話しだな
DoLongの中でさらに入り組んでるとデッドロックしそうだけど こんなの考えてみたが、あんまり便利でもないなw
private bool TryOnUIThread<T>(EventHandler<T> eh, object sender, T e) where T:EventArgs
{
if (!InvokeRequired) return false;
Invoke((Action)(() => eh(sender, e)));
return true;
}
private void FileSystemWatcher_Changed(object sender, FileSystemEventArgs e)
{
if (TryOnUIThread(FileSystemWatcher_Changed, sender, e)) return;
var t = DoSome();
} FileSystemWatcherはSynchronizingObject持ってんじゃん
設定しとけば勝手にBeginInvokeでイベントハンドラ呼んでくれるよ 質問なんですが
設定ってどこにどうやって保存してますか?
.configが今ならベストなんでしょうが、保存先が
C:\Documents and Settings\UserName\Local Settings\Application Data\
になり、.iniのように、アプリをコピーで2つの設定が使えるようになりません
.configはファイルの場所が遠くて変更しにくい、iniは古くてC#で扱いにくい
どうしてますか? >>893
インストールするアプリはユーザーデータフォルダのどっかに保存しないと駄目じゃん
どこでも置けるやつはexeと同じ階層に設定ファイルあったほうが使いやすいじゃん
ってだけしか気にしたことない >>894
れすさんくすです
確かにそのとおりだとおもいます
インストーラーではなく、ZIPとかで配布で、ちいさなアプリで、主にシングルユーザーで
ってなると.iniになるんでしょうか? >>893
設定を保存するクラスを作って、xamlかjsonにシリアライズ
アプリのコピーで使い分けるなら、保存場所はアプリのexeと同じフォルダー >>896
xmlとjsonなんて編集できるツールあるの?
パンピーにインデント壊さないでねなんて無理よ >>897
元の質問に設定ファイルを手動で編集したいなんて書いてないが jsonもxmlもインデント関係ないから自由にさせろ
強制したいならyaml使え インデントっていうかカッコの対応?
でもその一点でxmlとjsonっておよびじゃ無くない?
これらを使うなら設定ツールが必要になると思う >>903
何度でも言えるよ
xmlとjsonは設定ツールがないと使えないゴミ >>896
れすさんくす
結構ハードなことやってるんだね、一度クラス作ったら一緒か >>907
今どきならjson.netを使うだけ
ググればわかるけど呆れるほどかんたんだよ >>909
さんくす、ライブラリが公開されてるのか
みんなこれ使ってるの? 令和の時代の新規プロジェクトでiniファイルはありえんだろw >>912
今のところデファクトスタンダードなライブラリだね >>913
設定ファイルをユーザにどうして欲しいの? >>915
サンプルのjsonを添付してここを変更しろとドキュメント付けとけば問題ない
インデントが変わっても問題ないし >>912
俺はDataContractJsonSerializerだな
これなら標準ライブラリだからインストール不要 >>916
jsonはカッコの対応で死ぬわ
っていうかxmlもjsonもiniファイル駆逐できるほど性能よくねーじゃん
っていうか用途が違うものを強引に適用しようとしてない?
設定ファイルに書いたコメントも消えちゃうしね iniファイルを時代遅れだと主張するなら
xmlやjsonで吐き出して設定ツールぐらい用意しろってことかな?
それなら理解できるけど
xmlとjsonのテキスト編集はキツイ ユーザーがやることはjsonの値をちょい変更するくらいなのになんでカッコ対応が問題になるんだよ
ユーザーがカッコを書く必要なんてないのに >>921
いや、だからそれどこよ?
ってのを見つけるのも結構骨が折れる作業よ
だから、コメントをjsonファイルに書いておくだろ?
ところが次のアプリの書き込みで消えてるんだなw 話はよーわからんが、JSONに慣れれない人もそれがあんたの能力なんだから
しょうがないんじゃない >>922
ちゃんとしたエディターかIDE使えば?
VScode使えば対応簡単だけど
まさかメモ帳でやってんの? そもそもバグったときに凶悪であることは認めるだろ?
俺らだってxmlやjsonファイルでユーザーが編集したおかしな箇所を
プログラムでピンポイントで指摘できない
このファイルは完璧でないと読めない
そんなモノをユーザーに触らせるような運用は間違っている
客がいいって言うならいいけど vscodeとかtsとかnode.jsとか設定はjsonだけど
それで大問題にはなってない
みんな使いこなしてる
何故君だけ使えない?
iniファイルなんて実際死んでるよ? >>927
客がなんでjsonファイルいじって中にコメント書くのかが分からん
お前がいつまでボケ続けるのか興味があるが… 本当にいつまでボケ続けるのか
実務に携わってないんだろうなってのはわかる
空転を本人が気づいてない よく出てくくる、一本道コードのVisual Basicおじさんでしょ はっきりさせておくけど
・設定ファイルをテキスト編集でユーザに触らせたい
→xmlやjsonは向かないんじゃない?
・設定ファイルをユーザに触らせない
→なんでもいいんじゃない?
ってことな あともう一つ
・ユーザは開発者である
→なんでもいいんじゃない
って感じな ・設定ファイルをテキスト編集でユーザに触らせたい
の時点で間違ってる
バックアップすら取るかどうかわからんやつらに編集させんな馬鹿 >>914
なるほど、これはもうjson.netいれるしかないですね
>>918
MS謹製のJson、これはかなりとっつきやすそうさんくす ボケた会社の〜ボケた開発者が〜ボケた客にボケたことをさせて〜
メンテナンス費用だけとるつもりですか〜
死ね糞ゴミ! でも、初心者なのに仕事を取ってくる勇気は大したもんだよね >>933
俺なら
>・設定ファイルをテキスト編集でユーザに触らせたい
→そんな仕様にはしない
なぜならあらゆるフォーマットに対応する実装とテストなんてしたくないし
そもそも設定をテキスト編集するアプリとか使いにくい
>・設定ファイルをユーザに触らせない
→xmlにする
なぜなら実装が簡単だし、開発者(俺)ならテキスト編集できるから レガシーコードってなんかかっこいいから、どんどん増やすべき。
伝説の武器みたいなものでしょう。 >>936
2chだとやたらとJSON推しの人が多いけど、.NET標準のシリアライザは他にもいろいろあるよw
JSONに固執する必要がないなら他を検討した方がいいと思うけど JSONは連想配列に順序の保証がない
デバッグで差分比較するとかができない >>942
.NET標準でjson以外にほかにいろいろシリアイザがあるって、XML以外何かある? >>942
なるべくネット上に解説とかサンプル多いと楽かなっと
多数派に流されるお json schema用意すればvscodeで補完効くし、間違いも指摘してくれるし、普通json使うわ DataContractJsonSerializer、使ったことなかったが調べた感じ
一通りの機能はあるし、バージョントーレラントみたいだし、別にこれでもいいねw
バージョントーレラントじゃないと思ってたが、勘違いだったみたいだ。 トーレラントって何かググってみたけど中華鍋しか出てこない 確かにJsonはコメントが書けないか
コメント用の文字列メンバを予め確保すれば良いのかな jsonのシリアライザ/デシリアライザは送受同じライブラリを使わないと、割とめんどい。
DateTimeの扱いとか。
あとライブラリによってはpublicクラスじゃないとダメとか変な制限があるものも・・
DataContractJsonSerializerは変換遅いし、いちいち[DataContract]や[DataMember]などのアノテーションがめんどい 以前REST APIを作ったときはVisual Studioがjson.netを利用するコードを自動生成してたけど、今はDataContractJsonSerializer化されてるのかな? windows formsアプリについての相談なんですけれど、ロジックと見た目を分けろって聞くじゃないですか。なのでそうしようと思ったんです
例えばユーザーコントロールを作って、そこに何かしらの処理を行うボタンを配置したとします
それで自分が考えたのは、計算をするクラスをユーザーコントロールクラスの内部クラスとして作る、ユーザーコントロールクラスのフィールドとしてその計算するクラスのインスタンスを持たせる
でボタンが押されるイベントで計算をするクラスのオブジェクト.calculate()みたいにする
設計としてはこんな感じでも大丈夫ですかね?アプリを作る時に内部のコードはこう実装するみたいなことを教えてくれる本が無くてどう設計していけばいいのかわからないんです 右も左もわからないうちから俺俺アーキテクチャとか考えないで
MVCやMVVMでも勉強したらいいと思うよ
それから最強のアーキテクチャを考えるのでも遅くない >>956
>ロジックと見た目を分けろ
windows formsアプリじゃなくWPFやった方がいいんじゃない?
windows formsでそんな組み方するの逆にめんどくさい >>955
cjsonはわかりやすいのかな、ちょっとしらべてみるさんくす >>956
そんなことしなくて良い
画面アプリなんて使い捨て上等
サーバーサイドと画面(クライアント)を分けろって話で
一つのアプリでそんなことやっても無意味 「既存メソッドの処理なんですが?ちょっと時間かかっちゃうんですよねー
プログレスバーとかつかないですかね?
処理の進行状況も表示して」
こんな簡単な要望ですら
そいつはケツまくって逃げ出すよ
花京院の魂を10000個ぐらいかけてもいい絶対だ
処理と表示は一見関係ないように見えて実は密接に関係していて
絶対に切り離せない
不可能なことを可能だと言う技術者を信用してはならない
何年もやっていてこの程度の因果関係もわからんような雑魚から
教えを請いてはならない >>956
何でユーザーコントロールの話になるのかよく分からんけど、
>ユーザーコントロールクラスの内部クラスとして作る
この部分は変だけど(内部クラスにする必然性がない)、その後の部分はそういう認識でいいと思うよ。
FormでもUserControlでも、基本的に書いていいのは上に乗ってる
コントロールを操作するコードとイベントハンドラだけ。 >>962
C#にはIProgress<T>というクラスもタスクも横断的に使える便利なIFがあるから
あんたが思っているようなことはない
つか、偉そうなのにこれ知らないのか? 自分は頭が悪すぎてIProgress<T>のどこが便利なのかわからないので
違う仕組みでやってる >>964
はぁ?
既存の何も考えずに作ったメソッド(内部)のプログレスバー(表示)を分離したまま実装できないだろってのが俺のレスの主旨なんだけど
理解した上で反論しようとしてんの?
Mr.ドン・キホーテ? >>966
いや、簡単に実装できるよ
君が知らないだけで >>967
あっそ、絶対無理なのにバカだなお前
テメーはさっさと技術者やめて詐欺師に看板替えろ 昔はイベントハンドラで実装してたな
いまならObservablePropertyあたりでやるんかねRxとかどうも上手く使えてる気がしない >>969
確かにmvvmだとReactiveProperyを上位に伝搬するのが楽だし俺もそうやっている
でもFormsの話のようだからIProgress<T>を出しました FormsだとしてもIProgressは不便だと思うよ ID:Ih3UpniZ0って昨日iniファイル以外認めないって主張してた御仁か
15〜20年くらい前のスキルしかもちあわせてない人でしょ
技術的なキャッチアップも人間性の向上も怠って年齢だけ重ねてる人だからこういう物言いしかできないんだろう
こういう人のいうことは表向きだけはいはいって聞いたふりして全部無視して問題ないよ ほっとくとイベントの参照が残ってるのでひとりでに消えなくなってしまう >>975
backgroundworkerを自前で作らずにformに貼って、イベントもデザイナから作るといいよ だからIProgressでメモリーリークするソース出せってば IProgressはインターフェースなんだからそれ自体がリークってのはおかしいでしょ。使い方が悪いだけでは…? オッペケは自殺して転生して自分の頭のバグ直してこいやボケ インターフェイスでメモリリークするわけがないはその通り
ただ単純なイベントハンドラベースだとうっかりメモリリークさせやすい
コンポジションなどで保持したままで寿命が違うと特にそう
c++だとメモリリークしやすいが使い方が悪い!ちゃんとつかえ!
という話で済まないので進化し続けてる
そのProgressというけど偽りでProgressと言う動作と何の関係もない
実際はどこからも使われないく自分で使うコードを書くだけなのでProgressである必要もない
どこが便利で使ってるのかさっぱりわからない 見返すとめちゃくちゃだけどIpregressは別にProgressに高度に特化されてないので
使う意味は薄いのではないか?
nさんがどう思うか知らないけど >処理と表示は一見関係ないように見えて実は密接に関係していて
>絶対に切り離せない
ちゃんと考えて設計してもそうなるなら、絶望的にセンスがないわ
おまえに不可能なことが技術的に不可能なこととは違うよ >>985
理解できないなら無理にレスしなくてもよい >>986
バカだろ
物理的に不可能だろ
既存処理にプログレスバー付けてみろよ IProgressというか、その実体のProgres<T>クラスは、普通に使えばメモリーリークなんか起こらないんだよな
イベントじゃなくてActionデリゲート使ってメンバ変数など使わずにローカル変数で定義して
処理を実行するたびにインスタンス作ればいいだけ
ラムダ使えない人はご愁傷さまとしか言えません >>993
外から複数のハンドラ指定して実行したい場合どうすんの?
Actionにどうやって渡す? それと
> 普通に使えばメモリーリークなんか起こらないんだよな
と
> イベントじゃなくてActionデリゲート使ってメンバ変数など使わずにローカル変数で定義して
> 処理を実行するたびにインスタンス作ればいいだけ
は矛盾してるよね? >>994
複数のアクションを実行するアクションを渡す >>995
サンプルぐぐっても、イベント使ったりクラスのメンバ変数にして使い回すって方が邪道じゃないかな? >>986
多分切り離すとか分離するの意味を根本から間違えて捉えてるんだと思うので無駄だよ。関心の分離の基本がわかってない このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 84日 11時間 11分 35秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。