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

レス数が1000を超えています。これ以上書き込みはできません。
2019/07/16(火) 15:36:23.74ID:i1fbuZ/pM
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

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

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

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

■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2デフォルトの名無しさん (エムゾネ FFba-YtL5)
垢版 |
2019/07/16(火) 15:44:15.40ID:uLn4rkdXF
O2
3デフォルトの名無しさん (ワッチョイ a75f-YtL5)
垢版 |
2019/07/17(水) 10:08:14.00ID:5/22vZUf0
もしわかったら助けてください

VS2017 c# Windowsフォームで、textboxのKeyDownイベントで別のTextBoxをアクティブにする関数を作ったのですが
なぜかフォームが非アクティブになってしまいます
KeyDownイベントでなく、テストボタンを作ってClickイベントで関数を呼び出すと正常に動作します
何か考えられる原因ってあるでしょうか…
2019/07/17(水) 10:20:06.72ID:QuDmOW+q0
>>3
下キーで別のコントロールにフォーカスが移ってるのでは?
2019/07/17(水) 10:23:43.96ID:9uoKRG3i0
spy++の出番だな
2019/07/17(水) 10:26:55.94ID:9uoKRG3i0
フォームが非アクティブ=別フォームor
デスクトップがアクティブでは無く?
2019/07/17(水) 10:50:55.66ID:5/22vZUf0
keydownでなくkeyupイベントで処理したら理想通りになりました
どうして…?

>>4
multilineのテキストボックスで移動はしていないようです

>>6
そもそもフォームを1つしか作っていないんです
2019/07/17(水) 15:38:10.55ID:/p35zq9TM
キーダウン後にセットフォーカスなんじゃん?
キーアップだとセットフォーカス後なのでうまくいくとか?
2019/07/17(水) 18:48:12.22ID:16aW/iRU0
>>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を外してもフォームが非アクティブになるのは無いから、それは書いてない別の原因があるはず
10デフォルトの名無しさん (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/18(木) 02:37:55.39ID:JiMlnGX40
DateTimePickerの継承コントロールを作っているのですが、カレンダーや手入力で日付を変更しても、Valueの値が変わりません。
何が原因でしょうか?

※Deleteキーが押されたらnullになり、その他のキーが押されたら、nullになる前の日付が表示されるようにしたつもりです。
http://ideone.com/BRM6jo
2019/07/18(木) 03:27:19.51ID:JiMlnGX40
ほんとにしょーもない見落としでした(´・ω・`)
コンストラクタに、
TextChanged += (sender,e) => Value = DateTime.Parse(Text);
入れたら動きました。
2019/07/18(木) 03:39:32.99ID:JiMlnGX40
正常な日付 or null のどっちかにしかならない必要があるので、以下のほうがよかったです。
TextChanged += (sender, e) =>
{
if (String.IsNullOrWhiteSpace(Text))
Value = null;
else
Value = DateTime.Parse(Text);
};
2019/07/18(木) 07:02:48.53ID:teqAmMY+0
ASP.NETのWEBフォームで特定のページを誰かが開いていたら他の人は開けないようにしたいのですがどういう実装で実現出来るでしょうか?
ページをオープン中という状態を知る術が見付からずに困っています
C#で作っているというだけで使う技術は多岐に及びそうですがよろしくお願いします
2019/07/18(木) 08:03:49.72ID:Q7y8Xu/qM
定期的にajaxで閲覧中のステータスを5秒おきにサーバに送信して
最後の送信から15秒くらいの時間が経過したら
他のユーザーにアクセスを許可すれば良いんじゃね?
2019/07/18(木) 10:18:40.31ID:926jk5Fkd
ちょうどそんな実装してるけど、ロック掛ける(+掛けれなかったら掛けてる奴返す)ためのajaxで呼ぶAPIと、ロック解除するAPI作ってる。
ロックはTTL60秒。クライアントから30秒ごとに延長かけてる。
JSのoncloseかなんかでロック解除API叩いてるけど、たたき漏れは今のところ無い。
2019/07/18(木) 10:53:36.62ID:xGZEok3k0
webからダウンロードした画像をメモリ上に保持してるんだけど
dispose忘れがなかなか厄介
GCでdisposeさせるかそれに近い動作をするものってないものかな
2019/07/18(木) 11:13:33.22ID:6A8bU/H4a
>>16
逆にGCは何をすると思ってるの?
マネージドの場合事実上「GCでDispose」されると思っていいはず。

だから本当に怖いのはdispose忘れじゃなくて、
イベントの購読の解除を忘れるとかして参照を間接的に握られ続けること
2019/07/18(木) 13:26:02.08ID:JiMlnGX40
すみません。
予想通りに動いたと思ってたんですが、"Value = 値" という方法で値を設定すると反映されません。
どうすればよいでしょうか・・・
http://ideone.com/UcN1cB
2019/07/18(木) 13:36:05.50ID:ydKHj7N/0
Value = DateTime.Parse(Text);
じゃなくて
DateTime.TryParseを使って、日付に変換できる場合のみセット
2019/07/18(木) 13:47:58.03ID:eovQbio40
そりゃbase.Valueに値設定しなけりゃ表示変わらんでしょ
2019/07/18(木) 13:50:06.72ID:1HV7iRhh0
お知恵をお借りしたく。。。


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);
}
2019/07/18(木) 13:53:58.03ID:6lFXmRU70
AddRange
2019/07/18(木) 13:57:35.04ID:NtL98NX40
var bbb = aaa.Select( x=> x.total ).ToList();
2019/07/18(木) 14:04:12.94ID:1HV7iRhh0
>>23
神現る。ありがとう!
2019/07/18(木) 19:17:58.78ID:teqAmMY+0
>>14
なる程
webを質問するとC#の枠組みを超えてしまうのでアレですが有用なアイデアありがとうございます
26デフォルトの名無しさん (ワッチョイ 4f5f-6VcT)
垢版 |
2019/07/18(木) 20:46:46.74ID:c4BAkJVY0
>>17
てっきりbitmapは明示的にdisposeしないとメモリリークするのかと思ってたんだけど
都度GC.Collect()してみたらdisposeしなくても大丈夫だったわ
ありがと
2019/07/19(金) 16:29:04.35ID:g/qsh+DNa
>>26
disposeすると今すぐメモリを解放してくれる。しないとガベコレが走るタイミングまで待たされる。GC.Collectは今すぐガベコレする。
2019/07/19(金) 20:25:52.26ID:VLsw2rVZM
>>27
大手の担当者(客)とか絶対理解できないから定期実行(十分に一度)してるわ
やらないと
リークだリークだうるせぇんだこれが
2019/07/19(金) 21:26:29.42ID:5+qJlswgM
>>27
bitmapを凄い勢いで作るプログラムを前に書いたら
メモリ不足で例外を吐いた事があったのよ
んでGCで解放されないのかと思ってたわ
2019/07/19(金) 21:30:00.71ID:KvrVBoUe0
>>29
でもVSのモニタを見るとGCって結構な短期間で動いてくれるんだよな
GC.Collectはブラシーボ効果しかない
2019/07/19(金) 21:36:05.87ID:IuwL/lPHM
Bitmapはファイナライザを実装してるから2回GCが走らないと解放されない
あと頻繁に動いてるのは最も浅い世代のGen0GCで、GCを生き残って昇格してしまったオブジェクトを回収させるにはGC.Collectは有効
2019/07/19(金) 22:21:52.99ID:A6fR/TKy0
>>30
遅いマシンで
割と重めのアプリを一日経ってからやってみ
3分ぐらいはフリーズするよ
stop the worldというだけはある
2019/07/20(土) 02:43:36.72ID:HA7JgwCb0
>>30
試してみたらGCが一度も走らずに即死した
GC.Collectしないとマズそう

https://i.imgur.com/sR1A0ME.jpg
2019/07/20(土) 20:49:53.26ID:hrLeGUFN0
時間はかかっても、MSゴシックなら正常に動作するんですが
游ゴシックを指定すると、なぜか文字が重なり合ったりして正常に表示されません

g.DrawString(new String('@', 5000000), drawFont, Brushes.Black, 0, 0);
2019/07/20(土) 21:01:47.46ID:IDb6GPRz0
>>34
描画先に十分なスペースはあるの?
フォントサイズ減らしたら改善するとかは無い?
それで無理なら一行ずつ描画するしかないな
2019/07/20(土) 21:13:32.08ID:hrLeGUFN0
文字列を短くするとちゃんと表示されます
2019/07/20(土) 21:23:14.33ID:IDb6GPRz0
あ、Rectangle指定しないと折り返さないのか?
https://dobon.net/vb/dotnet/graphics/drawstring.html
>>36
意図的に無茶な指定しているのなら不具合が起こってもしょうがないと思う
2019/07/21(日) 12:10:16.19ID:AXqQTYqQ0
Webbrowser で表示されているある部分をクリックしてAjaxで動的にHTMLが変化する場合 
documentcompleted は発生しませんが
HTMLの変化を検知するにはどうするのがいいのでしょうか?

タイマーを使ってWebbrowser のHMTLの内容を比較するくらいしかないですかね?
2019/07/21(日) 12:43:20.58ID:P7LE/kkP0
>>38
UWPのWebViewなら、スクリプトを直接呼び出して完了待ちとか出来るよ
FormsやWPFからでも使えるようになっているみたいだから頑張ればなんとかなる

勿論UWPで作るってのもアリだが
2019/07/21(日) 13:44:31.17ID:AXqQTYqQ0
>>39
理想的な動作です
UWPでやってみます
ありがとうございます
2019/07/22(月) 01:46:10.70ID:fKk8m16B0
どんな処理に対してどんな例外処理をすればよいのか理解出来ないのですが、
「〇〇メソッドが投げる可能性がある例外」という感じの一覧みたいなものってないでしょうか?
2019/07/22(月) 02:11:10.76ID:Z/C74OJi0
>>41
Docsの.NET Framework API リファレンスの各メソッドの説明に載ってる
2019/07/22(月) 15:09:04.83ID:9U8T6M8Za
>>41
他にも、VisualStudio上でメソッドにカーソルを合わせると出てくるツールチップで「例外」箇所に型が載っていたり
F12で定義に移動した後のコメント中で「例外」箇所に型と理由が載っていたりする
2019/07/22(月) 20:31:22.66ID:bxEn3DSVr
>>38
WinFormのWebBrowserでajaxで読み込みはタイマーみたいなの使って取れてる
2019/07/23(火) 21:30:46.97ID:roLN7w1Qd
ざっくりで失礼します。
面白半分にc#でエロや風俗系を作れたらいいなと思ったのですが案ありますか?
なかなか思いつかなくてw
2019/07/23(火) 21:34:28.66ID:zEKbbod30
>>45
C#+Unityのエロゲなんかいっぱいあるでしょ
そしてこの板で聞くことじゃない
2019/07/23(火) 21:41:17.09ID:Uygc18n30
>>46
言われてみればそうですね
失礼しました。
2019/07/23(火) 23:55:04.04ID:SedAptpn0
2019/07/25(木) 16:27:29.05ID:UXkDZrqn0
変態さんでいっぱいだ
前スレのエロ画像スクレイピングマンは成功したのかな
2019/07/26(金) 03:11:13.96ID:8BXDtT/D0
エロ画像なんて厳選して保存しないとすぐ500GBぐらいいくだろうに
2019/07/26(金) 12:52:05.57ID:53dis5oN0
動画ならともかく画像で500GBはベテランの領域。
2019/07/26(金) 13:12:23.94ID:53dis5oN0
コンテキストメニューを定義して、それを別コントロールに割り当てて、
それを更に別のフォームからクリックで実行したく、下記の構造にしているのですが、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 += //クリックイベント

  }
}
2019/07/26(金) 16:05:13.49ID:uxWd1qa6a
>>52
ごめん何がしたいのかさっぱり分からんw
2019/07/26(金) 16:28:06.90ID:Kg/2nYdc0
コンテキストメニューがnewされてないから例外が出るね
2019/07/26(金) 17:02:58.89ID:VkzQYvSYM
普通にメニュー出してsendmessageでええよ?
2019/07/26(金) 17:08:02.31ID:Kg/2nYdc0
なんとなくの違和感なんて知らんが
要するに何をどうしたいんだか
2019/07/26(金) 18:11:15.82ID:tpwQJJNh0
違和感

スポーツ選手みたいやなw
右肩に違和感を・・・

○○.cppに違和感を感じ納品を見送ったとのことです
2019/07/27(土) 07:50:47.17ID:1So0tMH70
質問する技術が足りてない
とにかく違和感とかいう抽象的なことじゃなくて具体的に
59デフォルトの名無しさん (ワッチョイ 8f5f-1F87)
垢版 |
2019/07/27(土) 23:40:34.97ID:NQ4+UjHL0
配列添字演算子付のpropertyはありますか?
イメージ的には
public int MyIDList[int]{
set{this.myIDList[idx] = value;}
get{return this.myIDList[idx];}
}
みたいな事がしたいです
2019/07/27(土) 23:46:47.22ID:+ZEWiPdqa
>>59
ない
2019/07/27(土) 23:48:18.25ID:NQ4+UjHL0
>>60
ありがとうございます
2019/07/27(土) 23:49:00.45ID:F72yN9ZSM
できない
インデックスの渡し方しか考えてないようだけど
それだとLengthやforeachで回せる機構など
配列に必要な関数群も仕組みもないだろ?

素直にListから継承させるか
インデックスを引数で渡せばいいじゃない
63デフォルトの名無しさん (ワッチョイ 8aad-Vk2Z)
垢版 |
2019/07/28(日) 00:26:47.42ID:vg9qDEAT0
んん、インデクサのことではなくて?
https://ufcpp.net/study/csharp/oo_indexer.html
2019/07/28(日) 00:35:17.04ID:GU+doGlgM
それはクラスにインデクサが付く話だし
プロパティには持たせられないじゃん
2019/07/28(日) 00:49:15.67ID:zR0XYwX4a
>>63
質問者がやりたいのはそのリンク先の「余談: VB のインデックス付きプロパティ」のこと
C#で出来ないようにしている理由はリンク先に書かれているし >>62 も書いてくれている
2019/07/28(日) 01:53:35.14ID:GU+doGlgM
まあたださ

class p {
List<double> da;
double center[int index]{
get {return (da[index+1] - da[index]; }
}
}

みたいに、クラスの配列データを元に
仮装配列的なものを作りたいんだろうなと思う
昔俺もやりたくて調べまくったよ

これを今のc#で実現しようとすると、わざわざプロパティごとにクラス化なきゃいけないし
クラスの生成や配列を振る舞うクラスに元データを渡すのとか非常に面倒になる

そこまで出来たとしてもメリットはインデックスを[]で渡せるだけで
配列(っぽいもの)ですよとコード上で示せるだけ

普通に関数実装で[]表記以外は同じことが出来るので
コードの美しさ的には不満があるけど
実装上は困らないんだよな

単純に関数の引数は()でも[]でも囲めるようにしてくれたら簡単なんだけどね
2019/07/28(日) 07:11:46.83ID:iidlab190
ttps://ideone.com/DcIIzB
2019/07/30(火) 09:26:09.88ID:IhJrxMBNM
constって継承できないもんかな

継承クラスで定数を変えたいんだけど
何か上手い方法はないだろうか
2019/07/30(火) 09:51:52.35ID:MQBecH/v0
できないので、諦めてオーバーライド可能なメンバでやって

そういう機能が欲しいなら、githubで提案してくるとよい
ここで喋っても入らないのでそのつもりで高説は垂れるように
2019/07/30(火) 09:53:45.93ID:aYg/q9jya
>>68
隠蔽(new)は出来るでしょ

継承というかoverrideはインスタンスメンバーを上書きするものであり、
constは本質的にstaticメンバーなんで、継承でconstを変更という発想はそもそも矛盾してるんじゃないの?
2019/07/30(火) 10:10:15.53ID:nToTFkzEd
constは埋め込みだから無理
コーディングを見やすくしてるだけなんよ
static virtual readonly とか…できるんかな書いたことないけど
2019/07/30(火) 10:22:24.95ID:IhJrxMBNM
単純にこんな実装がしたいんだよね
オブジェクトの詳細で表示する名称表示とかさ

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 “楕円“; }
2019/07/30(火) 10:31:59.35ID:AKu0TaFKM
>>68
定数を返すだけの読み取り専用のプロパティにする
2019/07/30(火) 10:40:17.04ID:B9XYpo8O0
>>73
これ
2019/07/30(火) 12:17:38.06ID:AKu0TaFKM
>>72
読み取り専用プロパティはもうちょっとコンパクトに書ける
override string ObjectName => "楕円";
2019/07/30(火) 12:33:54.79ID:vSU/UXgGa
https://ideone.com/R6UBzL
あんまり面白くないねw
2019/07/30(火) 12:49:16.40ID:IhJrxMBNM
>>75
おお、いいですね!活用させてもらいます!
2019/07/30(火) 13:37:48.40ID:k9k21JDF0
>>68
readonly使うのが定石
79デフォルトの名無しさん (スッップ Sdaa-qbpu)
垢版 |
2019/07/31(水) 15:31:35.93ID:tEceTxskd
MacでC#勉強してみたいんですがVisual Studio入れないと厳しいですか?
VS Codeだけでは難しいですか?
2019/07/31(水) 16:00:55.32ID:lLYOef6LM
MacでC#を勉強するメリットはないから他の言語にしとき
唯一意味があるのはUnityでゲーム作る用途だから、Unity入れてC#やってみるのはまあアリ
2019/07/31(水) 18:13:54.85ID:vBQ8AC7J0
>>79
言語の学習目的なら.NET Core SDKとVSCodeでじゅうぶん
2019/07/31(水) 18:27:29.21ID:SBa7OC8vd
>>79
難しくないよ
83デフォルトの名無しさん (アウアウウー Sacf-z8jC)
垢版 |
2019/07/31(水) 18:38:19.42ID:quxH8qSha
>>79
変な意地をはらずに一番イージーな道を選択した方がいいよ
つまらないことに時間を浪費したいの?w
2019/07/31(水) 18:43:57.13ID:lLYOef6LM
>>83
その理屈だとBootcampでWindowsをインストールするのが最善ということになってしまう
VS for Macなんかほとんど誰も使ってないんだから、時間の浪費という意味ではVSCodeといい勝負だわ
2019/07/31(水) 19:10:03.53ID:9TaORHsg0
Listでindex aのアイテムをindex bにインサートするスマートな方法はないだろうか

aをremoveしてbにインサートすると、a>=bならいいけど、a<bの時 removeでインデックスがズレるので狙いより1つ下に行ってしまう
一番下だと範囲外の例外が起きてしまう
できればこれを実行するメソッドを作って既にあるList<T>を拡張したいんだけど
ヘルパークラス的なものって作れないかな?
2019/07/31(水) 20:05:23.41ID:i+V4gIP9a
>>85
「拡張」という言葉の意図がわからないけど
ヘルパークラス作って静的メソッドや拡張メソッドとして定義すれば良いんじゃない?
List<T>を継承したオレオレListでメソッド定義、という方法は止めとけ
87デフォルトの名無しさん (アウアウウー Sacf-z8jC)
垢版 |
2019/07/31(水) 20:12:36.58ID:quxH8qSha
>>85
やってみたが例外なんか出ないけど
https://ideone.com/CazHs2
2019/07/31(水) 21:18:24.59ID:uxU05rGA0
>>79
両方使って比較してみては
2019/07/31(水) 23:06:20.36ID:9TaORHsg0
>>87
2 to 9なのに1が9に移動しちゃうでしょ?
2019/07/31(水) 23:07:54.33ID:9TaORHsg0
ああごめん、リストの再生成をしてないのね
2019/07/31(水) 23:27:27.06ID:9TaORHsg0
申し訳ない、コードを見直したら質問の前提を間違えてました

やりたかったのは
List<T> というリストがあった場合に
リストに入っているかわからないオブジェクトaを
リストに入っているオブジェクトbの1つ後に挿入する
…というメソッドを作りたかったんです

List<T>.MoveAfter(T b,T a) //リスト内bの後ろにaを挿入、aがList内にある場合は元の位置から移動させる

で、このメソッド自体の実装はできているんですが
いただいたサンプルのextensionsの記述がよくわからず質問しました
おかげでうまく実装できました、ありがとうございます!
2019/08/01(木) 08:01:53.51ID:xGy0TEOb0
>>79
他の人も言ってるけど、unityでC#使ってるよ
C#自体の勉強ならこれで出来る
当然、WindowsアプリをC#で作れるようなスキルは得られないが
2019/08/02(金) 00:28:39.75ID:pwBgdUBF0
c#とvsの至れり尽くせり感に慣れすぎて他の開発環境でできなくなりました
2019/08/02(金) 00:45:41.15ID:RRmMDCsx0
そうなんだよなー
VSは使いやすすぎる
Delphiの開発者を引き抜いてきただけあるわ
95デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/02(金) 00:52:16.45ID:80wMhccea
最低限IDEで自動ビルドなら慣れれば貧弱な環境も楽しいよ

インテリセンスなんかないから長い識別子をダブルクリック & Ctrl + C ⇒ Ctrl + V
ばっかりしてたら左手が腱鞘炎になっちゃったけどw
2019/08/02(金) 09:27:47.59ID:NmFjjWZQ0
秀丸ですらファイル内入力補完あるよ
2019/08/02(金) 13:45:35.78ID:E5BJDT7zM
秀丸御殿が建ってる偉大なエディタに対して「ですら」って
98デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/02(金) 14:01:07.04ID:ktX3qXN3a
大昔試用したことあるけどまだ存在するんだw
いい加減タブ化とかしたのかな

しかし、日本人も真面目に作者に金払って使う人結構いるんだね
2019/08/02(金) 14:48:47.26ID:NmFjjWZQ0
いや秀丸はすげーと思うけど言語解析までするIDEと比較してテキストエディタですら入力補完あるのにコピペ頑張らんでもええやん、って話
タブ化は10年前くらいには対応してたはず

vscodeも良いけど軽さはやっぱ秀丸のほうが良いから今でもちょいちょい起動するよ
100デフォルトの名無しさん (アウウィフ FF09-ONUK)
垢版 |
2019/08/02(金) 15:14:57.86ID:e58H0HHKF
Nif●y の決済システムってまだ稼働してるんか
最近使ってないから知らんけど
2019/08/02(金) 15:18:13.18ID:j/fAdfUcd
俺も秀丸とvscodeの併用だね
秀丸は起動が速いから
102デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/02(金) 15:47:38.91ID:ktX3qXN3a
xyzzyなら一時期使ってたなあ
道具にこだわるたちじゃないんで、金払ってまで禿丸さんを使う気にはなれなかった
2019/08/02(金) 15:50:45.00ID:xzjh5WuB0
きたああああああああああああああああああああああああああああ
https://i.imgur.com/Q7qeopR.jpg
2019/08/02(金) 16:01:20.35ID:4Xvk7WGTM
Rider使いは?
2019/08/02(金) 18:09:45.30ID:sXaRfN3S0
>>102
道具にこだわらないのにWindowsは金払ってまで使うんだ
106デフォルトの名無しさん (アウアウカー Sa91-LmKu)
垢版 |
2019/08/02(金) 22:46:17.18ID:UiHNxeJXa
ここにいる人は趣味プログラマーが多いんかな
本業なんだけど経験ないC#開発もやらないといけなくなったって人も結構いたりする?
2019/08/02(金) 22:52:43.67ID:ol3AyafF0
windowsはみんな使ってるからこだわってるとは言わない。普通。
2019/08/02(金) 22:54:15.89ID:j/fAdfUcd
>>106
本業だけどWin32から.NETへの移行期はC#の経験ないところから始めたね
2019/08/02(金) 23:19:14.53ID:bTVyt88NM
俺はDelphiからの転向
2019/08/03(土) 00:28:08.22ID:3YKHpYYf0
同じく本業。
事前に経験ってほどのものがあったことなんかほとんどないような気がするけどなあ。
最近なら python をやってみたり。これ ruby っぽくてそんなに好きになれそうにないや。C# は大好き。
2019/08/03(土) 00:31:46.15ID:n84PTU/80
本業C#erだわ
趣味時代はCとかPythonとかやってた
2019/08/03(土) 01:17:35.52ID:lgH4NInK0
組み込みだけど本業の開発よりc#でGUI作ってるほうが楽しい!
2019/08/03(土) 10:25:21.86ID:QMMl7Yx90
聞きたいこと
ライブラリ内の数値を、メインのプログラムで参照した。

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};
}
のように、代入したいんですけど、うまくいきません。
どうすれば参照できるんでしょうか。
そもそも概念的に間違ってるのかもしれませんが、、、
114デフォルトの名無しさん (アウウィフ FF09-ONUK)
垢版 |
2019/08/03(土) 10:27:40.91ID:3ia1GLNcF
書き込むスレが間違ってる
2019/08/03(土) 11:44:13.94ID:6qsjMY4R0
俺も最近CからC#に移行したんだが、下痢ゲートだとか阿弥陀式とか、ワケ分からないw
2019/08/03(土) 16:40:29.95ID:n84PTU/80
Cもまともに書けてなさそう
2019/08/03(土) 19:56:50.53ID:voIsjIeCM
本業C#erの方、年収とキャリア教えて下さい!!
2019/08/03(土) 21:25:49.26ID:MA8i5rVM0
新卒5年目、約600万円や
2019/08/03(土) 22:06:36.96ID:WW7jv2oU0
>>117
40歳年収240万
2019/08/03(土) 22:07:55.00ID:n84PTU/80
新卒2年目450万くらい
2019/08/04(日) 03:03:55.72ID:JPscGmkT0
1000万越えのC#erはいないのか?
てか、そのくらい高額になるともはやコード書く仕事ではなくなるからC#erを名乗らなくなる?
122デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/04(日) 03:23:55.03ID:jcz7NslOa
そういう話はさすがにスレ違いでプログラマ板でやった方がいいと思うが、
C#に限らずサラリーマンプログラマで1000万越えは少ないだろうね。

フリーランスの優秀な人はもっと貰ってるかもしれない。

意外だろうけど零細企業は景気がいい時は大手より高給が貰えるところもある。
ただいかんせん不安定

プログラマに限らんけど、優秀な人はアメリカにでも行った方がいいね。
日本はいろいろ終わってると思うw
2019/08/04(日) 03:39:09.71ID:JPscGmkT0
そうですね、確かに年収ネタは荒れやすいしすれ違いでした。これでこの話題は終わりにしときましょう。
2019/08/04(日) 16:52:52.62ID:idEgR3Nvr
まあ色々な意味でも終わってるのかもねw

この不寛容さの社会を作ってしまった「市民」として責任を少しだけ感じます
125デフォルトの名無しさん (ワッチョイ cd02-ONUK)
垢版 |
2019/08/06(火) 17:15:33.24ID:8h96sAQZ0
C言語スレとマルチですが質問がスルーされてるので質問させてください。
コマンドライン引数というのは具体的に何が出来る引数なのでしょうか?
WisdomSoftって入門サイトと苦しんで覚えるC言語って本を読んでるのですがイマイチ何が伝えたいか分かりません。
2019/08/06(火) 17:23:41.64ID:lwH+jHue0
ファイルをダブルクリックされた時に
なんのファイルをダブルクリックされたか
知るためなどに使う
2019/08/06(火) 17:24:51.93ID:lwH+jHue0
関連付けされたファイルをダブルクリックして起動された時などに…だな
言葉が足りなさすぎた
128デフォルトの名無しさん (ワッチョイ cd02-ONUK)
垢版 |
2019/08/06(火) 17:37:01.47ID:8h96sAQZ0
>>126
ありがとうございます。
しかしファイルをダブルクリックしても何も起こりません;
読んでるサイトにはD&Dすると白紙のメモ帳にプログラムが書き写されるみたいなこと書いてあるので
試しましたが何もおこらず・・・
使ってる環境VS2019なのですがそれが駄目なんでしょうか?
2019/08/06(火) 17:38:57.54ID:lwH+jHue0
>>128
その読んでるサイトとやらのURLを見せてみ?
2019/08/06(火) 17:41:48.19ID:hdPDl6nEM
>>125
まあなんだ、引数を指定してバッチ起動できるわけよ。
すると引数に応じた処理をすることが出来たりする。
2019/08/06(火) 17:43:05.87ID:nV6bzp6s0
>>125
アプリ実行時に引数で指定した文字列の配列を渡せるだけ
それを使って何が出来るかはアプリ次第
2019/08/06(火) 17:44:52.93ID:8h96sAQZ0
>>129
http:ああwisdom.sakura.ne.jpあprogrammingあcあc32.html と
https:ああ9cguide.appspot.comあ17-03.html です
URL禁止みたいなのでスラッシュを置き換えてます。スイマセン
後者に関してはstdin等なんの説明もなく使ってるので更に分からないです
133デフォルトの名無しさん (ワッチョイ cd02-ONUK)
垢版 |
2019/08/06(火) 17:55:25.38ID:8h96sAQZ0
>>130-131
メモ帳とかを使ってそれを実行できたりしないのでしょうか?
わかり易く解説してサイトとかあったら教えて頂けると助かります;
2019/08/06(火) 18:02:11.72ID:lwH+jHue0
もしかして実行して一瞬チラッと何か出てすぐ終了する感じ?
2019/08/06(火) 18:11:09.99ID:D2KPblxl0
>>133
関数に引数を渡すのは知ってる?
渡す引数の内容でその関数の動作は変わるよね?
コマンドライン引数はmain関数への引数になる
その引数はファイル名だったりexeを起動する人が入力する文字列だったりする

まずはコマンドライン引数を出力してみて何が入っているか確認しよう
出力先はテキストファイルでもコンソール(stdout)でもいい
2019/08/06(火) 18:11:12.27ID:ruFXP44J0
>>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
2019/08/06(火) 18:11:17.28ID:8h96sAQZ0
>>134
いえ、コードをVS2019で実行して実行画面を出したままデスクトップのメモ帳をD&Dしました
2019/08/06(火) 18:13:03.10ID:6OOXAacva
>>125
どのスレのどの書き込みがマルチポスト元なの?
質問系のスレならスルーはあまりないと思うけど書き込むスレ間違えてない?
↓のスレあたりで、開発環境やコンパイラー種類、実行している方法などを添えて書き込んで見ればいいんじゃない
C言語なら俺に聞け 152 https://mevius.5ch.net/test/read.cgi/tech/1560763630/l50
スレ立てるまでもない質問はここで 149匹目 https://mevius.5ch.net/test/read.cgi/tech/1529199088/l50
2019/08/06(火) 18:13:46.50ID:D2KPblxl0
>>137
実行画面にドラッグアンドドロップするのではなく実行ファイルにする
ファイルの上にファイルをのっけるってこと
140デフォルトの名無しさん (オッペケ Sra1-nN+A)
垢版 |
2019/08/06(火) 19:53:18.36ID:fRCzQnxrr
>>139
あまり深く考えたことないけど、それでドロップしたファイル名がとれるのってどこで仕様化されてるのだろ
2019/08/06(火) 20:12:17.66ID:V0Kuh8Wnd
>>140
osの仕様じゃないの?
2019/08/06(火) 20:16:01.22ID:hi1INabv0
OSの仕様だね
実行ファイルにファイルをドロップすると
ファイルのフルパスが引数になって起動する
複数ファイルドロップするとファイルが全部引数で入る

送る(sendto)フォルダにexeのショートカットを置いて
右クリックして送るとやっても同じ動作をする
2019/08/06(火) 20:36:54.80ID:Dc7UiKoCM
ダブルクリックとかドラッグ&ドロップよりも

dirやpingとかの例から教えてやれよ
説目下手かよw
2019/08/06(火) 20:42:48.62ID:Dc7UiKoCM
>>138
すまんCの質問者だったわ
誘導乙です
2019/08/06(火) 20:45:30.56ID:hi1INabv0
君は質問者がCUIを知らないとわかった途端に
必死でマウントするタイプっぽいねw

まあ文句があるなら君が教えれば良いじゃない
2019/08/06(火) 21:44:06.23ID:h96rX+BU0
OSというかエクスプローラの仕様では?
まぁOSみたいなもんだけど
macも一緒だっけ?
2019/08/06(火) 22:15:41.42ID:2e28HN3n0
ここがPC初心者スレに見える連中がいるみたいだな
2019/08/07(水) 06:57:51.84ID:HD57Pps60
まあコマンドライン引数という言葉は出てるんだからコマンドラインとはこれのことって説明にはコマンドプロンプトを用いる方がわかりやすいかもしれないけどどっちもどっちかなあ
2019/08/07(水) 12:43:02.55ID:0NR5yQ8YM
プログラミング初心者に
PC初心者がいないと思える方が理解に苦しむ
150デフォルトの名無しさん (エムゾネ FF43-ONUK)
垢版 |
2019/08/07(水) 13:17:43.31ID:+fGjf0jSF
>>140
Win32API なら WinMain の LPSTR lpCmdLine
2019/08/07(水) 22:34:55.42ID:7okrY9pr0
定義なら
HKEY_CLASSES_ROOT\exefile
152デフォルトの名無しさん (ワッチョイ daad-WJKE)
垢版 |
2019/08/08(木) 01:37:38.81ID:ihcgMCFx0
OSの仕様とAPIの仕様とC言語の仕様がごっちゃになるから
昔より初心者は大変よな。

ただ質問の仕方はジャンル関係ないから
もうちょっと伝わるように書いた方がいいと思うぞw
2019/08/08(木) 14:29:31.16ID:zX15bpOA0
最も低コストな2点間時間差の測定って何なのでしょうか?
元々DateTime型を利用していましたが、超高精度である必要もなくマシンの長時間稼働で符号が反転することがあるのを承知でEnvironment.TickCountを利用しています。
Environment.TickCountよりも低コストなものはあるのでしょうか?
2019/08/08(木) 14:34:41.65ID:mB2We2tKp
コストの意味によって違う。
プログラム量なのか、費用なのか、所要時間なのか。
2019/08/08(木) 14:37:19.14ID:zX15bpOA0
>>154
実行パフォーマンス的なコストです
2019/08/08(木) 15:38:41.10ID:mhwi8eEg0
C# で無限Undo/Redoが出来るテキストエディタコンポーネントを探してるんですが、
使い勝手がいいものは何でしょうか?
157デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/08(木) 17:25:58.20ID:EGuA/4uga
>>155
兆円単位の資産持ってる人がスーパーの食材の値段を比較するような話で、
意味ないよそんなのw

コストなんかどっちにしろゼロと同じだ
2019/08/08(木) 18:00:45.46ID:tebxUNsfa
>>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プロパティがあって、初期値では無制限になってる
2019/08/08(木) 20:11:51.79ID:zX15bpOA0
>>158
減算のみだとそこまでの差は無いのかもしれませんが現在のタイムを取得する命令もセットで測定した場合に結構な差が出たため乗り換えました。
具体的にはこのような方法で現在時刻を取得し
int lastTime = Enviroment.TickCount;
DateTime lastTime = DateTime.Now;
下記のようにして指定秒数以上立ったかなどの判定を行っています
if (Enviroment.TickCount - lastTime > 10000) {}
if ((DateTime.Now - lastTime).TotalMilliseconds > 10000) {}
2019/08/08(木) 20:23:44.89ID:1yv5WNbeM
その辺りはDDKの領分だから深入り
しない方が吉かも

尚、OSとしての仕様と実際に動作している
ハードの仕様の差異もあるし
2019/08/08(木) 20:46:23.03ID:tebxUNsfa
>>159
一定時間経過したかをより正確に判定したい、が本当にやりたかったことか
ドキュメントによるとEnvironment.TickCountは「resolutionは通常10〜16ms」とあるけど
DateTime.Nowでは「0.5〜15ms」とあるから
判定1回の処理時間ではなくて、精度を測定したほうが良いと思うよ
Stopwatchクラスは「high-resolution performance counter」を使えるから精度出るんじゃない?
2019/08/08(木) 23:24:35.70ID:1oNCOrAR0
指定秒数経過の判定で実行パフォーマンスを気にするのが間違ってる
そういうのは秒間1万回処理する必要があるとかいう処理で考えるべき

OS上で動作するからミリセカンドより細かい粒度での正確性はそもそも無理
stopwatch以上の細かい精度が必要ならC#じゃ厳しい

どんな要件か知らんけどそんな細かな精度なくても大丈夫
120FPSのゲームでもフレーム間で80msあるんだから
2019/08/08(木) 23:27:17.60ID:J4rZTmDc0
>>162
計算間違ってるよ
164デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/08(木) 23:57:14.98ID:d0Ff1eN7a
文章読んでる限りそんな頭悪そうじゃないのに
何でそんな部分の最適化は無意味だっていう簡単な事実が分からないのかねw

昔からそういう人一定数いるけどほんと不思議
2019/08/09(金) 00:05:32.58ID:yqHkFNZaa
>>164
この人が該当するかはわからないけど、発達障害で脳の特性により一般の人よりも拘りが強いという人は珍しくないよ。知能の高低ではなく、引っ掛かるところが普通と異なる。相手に自覚がない場合、いくら理屈で説明しても受け入れてもらえないことが多い。
2019/08/09(金) 00:24:39.62ID:kbBtOJ8C0
プログラマには特に多いかもね
2019/08/09(金) 00:50:27.63ID:ENN4/0zza
どうでもいい細部に拘って動けなくなるのは中途半端に知恵がついてきた初心者にありがち
俺も経験あるからわかるわ
そこから経験を積んでいくとスケール感がわかってきて「ゴミは無視」ができるようになってくるもんだけど、
そうならずにどんどん偏屈になっていく人も一部存在する
質問者がそうでないことを祈る
168デフォルトの名無しさん (ワッチョイ 95da-Azad)
垢版 |
2019/08/09(金) 04:41:46.96ID:S4+H63Q60
どうでもいい細部かもしれないんですが、フォーム名やイベント名は、動詞と名詞どっちを先にするのがいいのでしょうか?
例えばユーザー登録フォームの場合、RegisterUserForm と UserRegisterForm
ユーザーが選択された時のイベントの場合、 SelectUserEvent と UserSelectEvent
どっちがいいでしょうか?
2019/08/09(金) 08:20:41.97ID:VQZHSvvcM
>>168
私は旧人なので、まずは Formですよが知りたい(プレフィクス派)ので、
Formユーザー登録
w
イベントはイベントハンドラー名そのまま(わざわざ変えない)
2019/08/09(金) 09:38:32.89ID:dc6G/Fnt0
まあ、全ての時計は独自の時間を刻んでいるので、そもそも一致させるのは不可能だし無駄なんだけどな。
2019/08/09(金) 10:33:45.61ID:NKKMFBro0
>>168
イベントはUserSelectedが基本じゃないかな
2019/08/09(金) 11:51:03.15ID:01aaYby70
>>161>>162
具体的にはゲームのスキルクールタイム計算なので、数十ms程度の誤差は別に許容範囲であるため高精度である必要はないと書きました
深刻な回答してくれた方が多いようですが、別に今の方法でボトルネックになってる訳でもなく単純にこれよりベストな方法あるのかな?程度の感覚で聞きました
2019/08/09(金) 12:13:27.68ID:WHBOK0wDM
ゲームなら共通の世界時計を持っといて各ゲームコンポーネント側でそれに基づいて時間の差分を取るようにするべき
各自が勝手に時間を測るとポーズの実装とかで困ることになるよ
2019/08/09(金) 12:23:56.96ID:/8nxdn6c0
誤差が許容できるんだったらコードから意図が読みとれる奴がベター
2019/08/09(金) 13:23:18.87ID:uqa/TGO4d
>>173
たしかに
176デフォルトの名無しさん (ワッチョイ b17c-Azad)
垢版 |
2019/08/09(金) 13:40:04.45ID:VpFvSLvY0
>>165-166
今朝のテレビでコンビニに苦情入れて出禁になったと訴えていた被害者が
まさにそんな感じの人だった
(苦情自体は正当でコンビニにミスがあったのは確かだが
コンビニが謝ってるのにどうでもいいことで納得しないで文句言い続けてた)
2019/08/09(金) 14:08:51.82ID:vlGdUztx0
ファイルを大量に更新するアプリを作ってるんだけど
クラウドストレージ上でやると同期に問題が多くて困ってる
単一のファイルをディレクトリのように扱えて
可変長・不特定多数のデータをファイル名をつけて格納できる
ライブラリとかないものだろうか

クラウドで同期して別のPCで実行したりするので
環境変数やサーバ構築、DBエンジンのインストールが必要なものは避けて
ポータブル系アプリのようにUSBで持ち運べる実装にしたい

理想は仮想ドライブを動的にアプリ内でマウントして
読み書きさせるような感じ

なにかいい知恵はないものだろうか…
2019/08/09(金) 15:12:17.76ID:OSNL5U/w0
ただの質問から人格攻撃にまで発展してる奴の方が妄想癖ありそうで怖いわ
なんかC#スレやVSスレって変な奴増えてきてるな
2019/08/09(金) 15:27:08.13ID:vlGdUztx0
夏休みだからじゃないかな
2019/08/09(金) 15:28:17.68ID:ti4i1VCta
>>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
> 単一のファイルをディレクトリのように扱えて
> 可変長・不特定多数のデータをファイル名をつけて格納できる
についてもう少し詳しく
もっともクラウドで同期の問題があるのなら、どんなライブラリを使おうとも大して変わらない気もするけれど
181デフォルトの名無しさん (ワッチョイ aee9-uprU)
垢版 |
2019/08/09(金) 15:42:32.52ID:l8EdBHZf0
パフォーマンス系の質問に対して無意味系の答えが返ってくるのって質問者も大体織り込み済みな上で質問してるだろうしそれなら返さなくて良いんじゃないかね
ガチの初心者ならまだしも質問者のレス内容的にその辺は分かった上で聞いてるだろう
まぁ初心者スレでパフォーマンスに関する質問する方が悪いとも言えるが
2019/08/09(金) 16:48:18.94ID:m7mfmdmp0
>>177
データベースのblobにファイルを突っ込むのが一番手っ取り早いが、速度や効率はまあ...
2019/08/09(金) 16:50:09.57ID:m7mfmdmp0
つか、クラウドストレージでやると同期の問題ってどんな問題か気になる
2019/08/09(金) 17:08:20.38ID:wy7G1+HC0
>>177
サーバー型のDBがだめならsqlite使えば?
2019/08/09(金) 17:56:29.89ID:vlGdUztx0
>>183
例えばonedriveだとフォルダ下のファイル数が一定数を超えると
フォルダに警告表示が出て同期できなくなったりする
あと変更箇所のチェックで異様に時間がかかるようになるんだよね
2019/08/09(金) 17:59:34.02ID:uqa/TGO4d
zipじゃだめなの?
2019/08/09(金) 18:00:19.74ID:vlGdUztx0
zipだと圧縮されている10万ファイルのうち
1個変更しただけでも再圧縮が必要にならない?
2019/08/09(金) 18:16:27.78ID:vlGdUztx0
あ、ごめん
zipって結構柔軟性あるんだね
削除も追加もできそうだしやってみる
sqliteも試してみる
ありがとね
2019/08/09(金) 19:02:58.69ID:GUJ7R2MVM
>>177
OLE複合ファイルってのがwindows標準
只、私ならZipで実装するね
190デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/10(土) 14:54:00.10ID:ddvhW9sGa
なんか昨日一日まったく5chにアクセス不能だったけど、
俺の環境固有の問題だったのか普通に書き込んでる人いるなw

>>168
UserRegistrationFormとか?

Formはサフィックスするなって意見もあるが、これは少数派の意見だと思うので
真に受けない方がいいと思う。

ほとんどの場合は付けた方が結局分かりやすいね。
あと、コントロールの変数名だけはハンガリアンを認める人も結構多い。
191デフォルトの名無しさん (アウウィフ FF39-Azad)
垢版 |
2019/08/10(土) 15:01:33.84ID:/ATKT2HCF
昨日アクセス不能だったのは事実
ただし鯖は生きてたのでDNSの問題
回避できるDNSのアドレス知ってるひとは
そっちに変更して普通に読み書き出来てた
方法は避難所に書いてあった
今は元に戻しても通常通り読み書きできる状態
192デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/10(土) 15:36:24.79ID:ddvhW9sGa
>>191
へーそういう状況だったのか
193デフォルトの名無しさん (アウウィフ FF39-Azad)
垢版 |
2019/08/10(土) 15:40:36.25ID:/ATKT2HCF
ついでに言うとDNSが死んだ原因は
2chを乗っ取った5chのjimの会社が
米の銃乱射の件でテロリスト認定されて
DNSサービスの停止になったってこと
さらにjimは指名手配で逃亡
5chは復旧したけどいつまで続くか判らんω
2019/08/10(土) 18:20:40.93ID:0gPdeKzpa
>>190
スマン、質問の「フォーム名」を見落として「イベント名」だけ拾ってしまっていた
フォーム名ならFormのプレフィックスやサフィックスを付けるのは全然問題ないね
2019/08/12(月) 10:36:30.39ID:HTWZ+S1Q0
SelectedTextやSelectionStart、SelectionLengthのような機能をカスタムコントロールに付けたいんですが
やっぱりMeasureStringとかでいちいち文字列の長さを測定したりするんでしょうか?
もしくは2次元配列を用意して1文字ずつその文字コードと座標を格納しておくか
2019/08/12(月) 10:57:06.87ID:kI0RZN1g0
コレクションに要素が存在するかを判定するとき、Count > 0ではなくLinqのAny()を使う意味ってあるのでしょうか?
可読性のためだけにこちらを使ってるんですかね?
2019/08/12(月) 11:01:09.66ID:2iL+RtWU0
>>195
TextBoxコントロールを使わないのならそうなるだろうね
等倍フォントなら少しは楽できるけどやることは変わらない
IMEの操作も考えてるんならAzukiっていうエディタコントロールを参考にすると良いよ
2019/08/12(月) 11:26:07.50ID:HTWZ+S1Q0
>>197
ありがとうございました
何行目の何文字目とか指定できれば簡単なんですが
いちいち文字列の長さを測定しなければならないというのは不便ですね
2019/08/12(月) 11:41:48.29ID:ssrYJHqQ0
>>196
リンクの式はイテレータを返すだけだからCountやLengthのプロパティを持ってない。Count()メソッドがあるけどこれは全件評価が走ってしまうので、最終的に欲しい値が件数の場合以外は使わない。
その状態でイテレータに引っかかるのがあるかどうかを判定する際に使うのがAny()。普通のリストや配列に対してCountやLengthを使わずにAnyを使う意味はない。
2019/08/12(月) 11:56:29.02ID:kI0RZN1g0
>>199
ありがとうございます
SortedDictionaryに対してAny()で判定していたので、これについてはCountプロパティがあるのでCount > 0で良いということですね
2019/08/12(月) 12:40:47.91ID:c1yJbHcz0
>>199
勉強になる
202デフォルトの名無しさん (ワッチョイ 7db0-8lAC)
垢版 |
2019/08/13(火) 15:58:52.24ID:hrddazny0
どこが「初心者用」だよ?って質問と回答ばかりだけどなww
昔は上級者用の質問スレもあったようだが
まあ一つに集約されてるほうが情報収集には便利だけど
スレタイはこっちが気に入ってるし
シャープとフラットをかけてる辺り
2019/08/13(火) 18:46:02.38ID:PAgqa6Je0
NuGetパッケージの管理より
Seleniumパッケージを最新にしました。

しかし、それから

Chrome は自動テスト ソフトウェアによって制御されています。

という文言が画面に出る様になってしまいました。

options.AddArgument("disable-infobars");

を指定する事でこれまでは、
この様なエラーメッセージは表示されていませんでした。

どうすれば消えますか?
2019/08/13(火) 19:01:18.55ID:ZVs77qOsa
>>203
標準でもなんでもないサードパーティーライブラリの話はスレ違い
↓あたりで適切なスレを探して
web制作管理 - 5ちゃんねる掲示板 https://mevius.5ch.net/hp/
WebProg - 5ちゃんねる掲示板 https://medaka.5ch.net/php/
2019/08/13(火) 19:57:44.52ID:v4xllOHk0
>>203
その文言そのままgoogleにブチ込んで見る人生よ
2019/08/13(火) 20:37:06.27ID:4ID4APxI0
ずーっとseleniumと格闘してんね
207デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/13(火) 20:54:18.53ID:yZEhfFzKa
>>205
すごい字余りの川柳かと思った
2019/08/13(火) 20:59:35.55ID:Gdeao/QQ0
セレニウム野郎まだいたのかよw
2019/08/13(火) 21:33:22.43ID:PAgqa6Je0
>>204 >>205
新しいNuGetパッケージについての
解説ブログはないんだよ。
2019/08/13(火) 21:45:22.03ID:ZVs77qOsa
>>209
>>1
2019/08/13(火) 22:29:42.70ID:4ID4APxI0
>>209
君が解説ブログかけばいいんでは?
てか解説ブログあること前提なの?

リリースノート見るなりソース読むなりすればいいのでは?
できないならなんでバージョンあげたの?
問題出たならバージョン戻せば?
なんのためにnuget使ってるの?
2019/08/13(火) 22:56:59.36ID:eH0ENH5J0
ちなみにこれってエヌユーゲッツなんかねヌゲッツなんかね。稀に他人と会話することがあるんだけど口頭で言う時に困る単語のひとつ…!
2019/08/13(火) 23:00:05.96ID:RVQw4+nc0
https://monobook.org/wiki/NuGet
>NuGet(読み:にゅーげっと、ぬげっと)

らしい
2019/08/13(火) 23:01:57.10ID:PAgqa6Je0
>>211
常に最新を使った方がいいのかな〜と思いまして。
戻した事がなかったので調べてみます。

この手の技術系は、
詳しい人がブログにまとめてくれてるのでいつもそれらを参考にしています。

>>212 >>213
エヌユーゲット
2019/08/13(火) 23:10:42.03ID:kJJDzO2R0
漏れは、Ruby で、Selenium WebDriver を使っているけど、

「Chrome は自動テスト ソフトウェアによって制御されています」というメッセージは閉じれるけど、
その部分を閉じても、その幅が消えないから、使える画面が少なくなる
2019/08/13(火) 23:18:57.47ID:4ID4APxI0
selenium君もruby君もスレからずれたレスしないでね
2019/08/13(火) 23:24:54.56ID:eH0ENH5J0
>>213
ヌゲットにしとくかな…
Nuclear unlimited gigantic enhanced technology
2019/08/13(火) 23:29:34.04ID:mICjniMU0
selenium君はRuby君を反面教師にするといいよ。
スレ違いを繰り返すのがどれだけ他人から見て迷惑でみっともない行為なのかをこれ程上手く伝えられる教材はとても稀だから。
2019/08/14(水) 00:36:59.18ID:jQtv4Yb60
C#+Seleniumなのでこのスレが正しい
2019/08/14(水) 01:38:02.43ID:GCJub4Dp0
誘導を無視することは正しいことですか?
ライブラリの問題であって言語の問題ではないから誘導しているのです
使用しているのがC#であっても言語の質問でなければ正しくはありません
問題が言語なのかライブラリなのかわからない人もいるので初めてレスするなら何の問題も無いし、誘導してくれるでしょう

今まで何度誘導を無視しましたか?
長期間、言語ではなくライブラリを起因とする質問を繰り返すのは正しいのですか?
2019/08/14(水) 02:14:02.89ID:jQtv4Yb60
それはあくまでもあなたの意見でしょうが
222デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/14(水) 03:08:22.27ID:YX6BCcxFa
芸人の押すなよは押せって意味だからどんどんやっていいよ
どうせ過疎スレで人口なんか恐らく数十人しかいないw
2019/08/14(水) 03:17:28.62ID:GCJub4Dp0
1に書いてあることと同じだけど、どのへんがあなたの意見なの?
2019/08/14(水) 08:25:36.73ID:RPrYPUsF0
>>221
俺は>>220とは別人だが同意見だ
2019/08/14(水) 08:33:56.94ID:28G/wIAb0
そもそもWinFormsもWPFも言語仕様じゃなくてライブラリだ
ライブラリを外せってのは余りに酷い暴論だよ
2019/08/14(水) 08:59:28.69ID:gdRXPT/U0
ライブラリが即NGじゃなく
サードパーティ制のライブラリがメインの質問&原因だからスレ違いでしょ

標準ライブラリは勿論OKだし
C#に関連の深い.NETやVisualStudio周りなら多少逸れてもOKだろうし
サードパーティでも例えばODP.NETとかのら基本的な質問なら答えても文句言われないでしょ
逆にUnity絡みならC#であっても専門スレのが有益だから誘導されるだろうし

誘導には、スレが汚れるから他所へ行けって側面と
ここだとまともな回答が得られないからこっちを当たれって案内の面があるんよ
2019/08/14(水) 09:34:24.96ID:mrBPpWLv0
>>217
この前マイクロソフトの人柄ヌゲットと言ってたからヌゲットでOK
2019/08/14(水) 09:38:00.49ID:28G/wIAb0
標準とか外部ライブラリーって>>1のどこに書いてあるんだよ

つまり「個人の感想です」だな
2019/08/14(水) 12:04:33.55ID:RWvjQCFF0
馬鹿がなんと言おうとスレチ
2019/08/14(水) 12:05:06.26ID:HkWgtzgRM
つかSelenium君の問題は、Seleniumの問題というより
彼の頭の悪さの問題なんだよ

それを解決するのはこのスレじゃない
そこは明白だろ
231デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/14(水) 12:38:54.90ID:Ct2lHzgAa
誘導してる人の動機が利他的なものなら素晴らしいことだけど、
実際は人を批判しないと気が済まないだけだからねw

そこを見透かされてからかわれているのに、それがわからないところが何とも滑稽だね
だいたいこんな過疎スレで周辺分野の質問があって誰が困るのかねw
誰も困らないと思うけど。
2019/08/14(水) 12:48:55.76ID:LymH/UUL0
質問者本人が(回答を得られないという点で)困るだろ
2019/08/14(水) 13:03:38.03ID:pFnHcoJr0
スレチな質問なんだから誘導して貰えるだけマシ
2019/08/14(水) 13:09:35.97ID:RPrYPUsF0
質問者以外も、どうでもいいやり取りを見せられて迷惑だと思うよ。
過疎っていても適切な話題が書き込まれていた方が良い状態だと思う。
2019/08/14(水) 13:40:20.40ID:mrBPpWLv0
>>231
君のようなオナニー野郎が1番気持ち悪いよ
2019/08/14(水) 14:49:03.49ID:jQtv4Yb60
そもそも
C#もSeleniumも根本はC++で実装さえれている
Seleniumに詳しいヤツがいないから
いいがかりつけられてばかりでかわいそう
2019/08/14(水) 15:26:24.08ID:RPrYPUsF0
>>236
かわいそうって、自分が?
何で実装されているかなんて尚更無関係だろうに、そんな頓珍漢なことばかり言ってるから煙たがられるんだよ。
2019/08/14(水) 15:39:01.35ID:pFnHcoJr0
>>236
そんじゃこれからはC++スレで質問してね
Seleniumに詳しい奴もいっぱいいるだろうからお前の助けになるだろうよ
2019/08/14(水) 16:13:47.02ID:jQtv4Yb60
C#の言語自体がC++で作られてる事をしらんふぬけども
2019/08/14(水) 16:16:19.89ID:IV/LzryA0
僕の内臓を返せ〜
2019/08/14(水) 16:59:56.55ID:jDEWV9x2M
Roslynも知らないガイ
2019/08/14(水) 17:00:39.76ID:GCJub4Dp0
そもそもかなり長期間seleniumの質問が投げられてるのにseleniumに詳しい奴からの回答なんてruby君以外からほぼ無い状態
だからこそ誘導してるんじゃないか
スレ趣旨から多少ずれてようがわかる範囲なら回答してる
回答した上で誘導までしてるのに誘導だけは無視して延々と質問を投げるなら嵐とかわらんじゃないか
2019/08/14(水) 17:01:32.64ID:pFnHcoJr0
>>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++で開発されているから安心して巣立ってくれ
2019/08/14(水) 18:33:13.55ID:rSDdWO1t0
聞きたくなければ黙ってseleniumをNGワードに入れれば良い

匿名掲示板なので日記書くやつもいるだろうし
他人の服装まで直す行為は無駄
ごちゃごちゃ発言するな
2019/08/14(水) 18:48:49.85ID:Q4kX3C+k0
いいかげんseleniumの話題はやめて欲しいよね
2019/08/14(水) 21:06:43.58ID:dNTNWi1CM
業務アプリケーションでElectron.NET使ってる人いる?そういった技術も習得してた方がいいかな?
2019/08/14(水) 21:09:29.90ID:IV/LzryA0
どうしてなの――ッ!!
どうしてエレクトロンしないのよーッ!!
248デフォルトの名無しさん (アウアウカー Sa4d-ahKc)
垢版 |
2019/08/14(水) 21:11:16.53ID:eGLvTmmqa
業務アプリって比較的新しい技術ってあんま使わなくね?
使えるように勉強するのは多いに結構なことだとは思うけど
249デフォルトの名無しさん (ワッチョイ 4602-2Yos)
垢版 |
2019/08/14(水) 21:34:40.40ID:oxhAJDr00
RPAスレはSeleniumの話題OKだからそっちいきなよ
2019/08/14(水) 22:21:04.82ID:bBZ00i3Q0
Seleniumスレでも発達障害は解決できるとは思えないけどな
2019/08/15(木) 00:01:22.09ID:5MxOdPEK0
options.add_argument( '--disable-infobars' ) # 通知バーを消す
Ruby で、こう書いても、通知バーを消せない!

Chrome なんて、仕様をコロコロ勝手に変えるし、文書も作らないだろ。
ソースコードを読めって、無茶苦茶だろw

各ブラウザの機能なんて、相手にしないほうが良い
252デフォルトの名無しさん (ワッチョイ 3302-QMAU)
垢版 |
2019/08/15(木) 00:17:18.78ID:4RLQ3HFd0
>>246
WPFやFormアプリケーションで描画しきれないケースのみ採用するパターンが多いかと。
習得する分には、もしもの時に出せる手札が増える(知見が広がる)ので良いとは思います。
2019/08/15(木) 01:51:37.30ID:yTBvPSIa0
業務アプリは大規模開発だったり要件が機能追加(既存ソースの流用)だったりが多いから知ってる人が少ない技術は敬遠される傾向があるよね・・・
254デフォルトの名無しさん (ワッチョイ d9da-QMAU)
垢版 |
2019/08/15(木) 05:13:06.12ID:YYpr9nEd0
dapper で、dynamic型で取得したレコードのカラム名は、どうやってプロパティにマッピング?すればよいでしょうか?
以下のようなイメージです。

var list = connection.Query<dynamic>(@"SELECT cd, name FROM hoge_table").ToList();
list.ForEach(item =>
{
this.cd = item.cd;   //cdカラムは存在しているが、この方法では取得出来ない。
});
2019/08/15(木) 05:18:20.88ID:bD8BPP4C0
なぜdynamicなんか使ってるの?
2019/08/15(木) 09:03:09.32ID:NGEmLDBt0
>>248,>>252,>>253
今はあんまり使われていないんだ
休みだし今後のためにチラッと触ってみる
2019/08/15(木) 13:17:25.77ID:XW4rFrdd0
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}");
}
}
問題なかったけど?
コンパイルエラーになってるんだったらその内容書いて
2019/08/15(木) 15:14:02.56ID:jCEAQJdF0
常駐するアプリを作るとき、serviceにすると何が嬉しいのですか?
2019/08/15(木) 15:26:23.04ID:nQmxjzka0
ログインしてなくても動く
2019/08/15(木) 16:03:39.12ID:wwJYNY5r0
ありがとうございます
2019/08/15(木) 17:15:06.30ID:X+hhUeCb0
>>255
dapperはdynamic使うのが簡単でウマーだから
2019/08/15(木) 18:25:05.09ID:jCEAQJdF0
>>261
インジェクション対策は?
2019/08/15(木) 18:41:02.43ID:VbDuA0j40
>>262
ちゃんとパラメーター変数使ってるジャン
2019/08/15(木) 19:29:51.78ID:UYxtktoid
>>261
cdカラムとかを指定して取り出したいなら結局クラス作った方が楽やん
2019/08/15(木) 20:14:41.68ID:BPnFBcl20
大文字小文字の問題とか無いのかな?
止めて変数rowをウォッチしてみてね
2019/08/15(木) 20:56:25.88ID:X+hhUeCb0
>>264
ケースバイでしょ
2019/08/15(木) 20:58:03.96ID:bD8BPP4C0
>>266
うん、だけどそれで悩んでるのは事実やん
2019/08/15(木) 21:46:48.94ID:pWdXHbkI0
>>251
やっぱりそうだよね。


Seleniumを使いこなせないPGがC#パーには多すぎるのが問題だな
2019/08/15(木) 22:36:14.06ID:nQmxjzka0
あーハイハイ
2019/08/15(木) 23:18:45.58ID:5MxOdPEK0
まあ、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
2019/08/16(金) 00:31:14.40ID:Capr2asl0
一人でも煩いスレ違い居座り野郎が、二人になって相互作用まで始めてしまったか。
2019/08/16(金) 00:40:48.73ID:w8wDW0z80
せめてjavaスレいけよ
2019/08/16(金) 00:47:42.08ID:9Iug+Ez/0
ん?なんでrubyの話が突然出てくるんだ?
2019/08/16(金) 00:56:27.81ID:jFKiomKf0
だから。相手にすんなよ。
しつこくても枯死するまで放って置けばいいのに。
2019/08/16(金) 00:57:25.58ID:Capr2asl0
>>273
いくらやめろと言われてもところ構わず唐突にRubyの話を始める頭のおかしい奴が、この板にいついているから。スレタイにRuby禁止と書かれているスレがいくつかあるが、コイツが原因。
2019/08/16(金) 00:58:13.28ID:2i9/2j960
C#っつーかプログラミング言語一般の話になっちゃうかもしれないんですけど
勉強してて例外のところに差し掛かったんですけどめっちゃ色々種類あるじゃないですか
んでもって例えば関数一つ作るにしても考えようによってはほんと沢山の種類の例外が発生する可能性がありますよね
そういうのをとにかく可能性が少しでもあれば例外をスローするようにしてたらコードが例外ばっかになっちゃう気がします
書く例外と書かない例外の境界線はどこにあるのでしょうか
2019/08/16(金) 00:58:14.57ID:Capr2asl0
>>274
すまん、その通りだな
2019/08/16(金) 01:08:02.04ID:G0Kx7mvIa
>>276
よくわからん理屈だな
仮にその例外を「書かない」と判断したとして、その「例外的な状態」を例外の代わりにどう処理するつもり?
放置しても問題なく動き続けられるorその場で適切な対処をして回復できるなら、そりゃ例外投げるよりその方がいいに決まってる
2019/08/16(金) 01:13:52.65ID:Capr2asl0
>>276
ライブラリ関数に渡す引数が正しくないとかのように、自分が書いているコードが正しくない場合に発生する例外、逆に言えば正しいコードを書けば発生しない例外は基本的にその場ではいちいちcatchしない。
ただし完全にバグがないということを保証するのは困難なので、プログラムの上流でまとめてcatchして何らかのメッセージを出すなどした方が良い。どう対処すべきかはそのシステムに求められる要件次第だけど。
ファイルにアクセスできないとか、ユーザからの入力データが正しくないことにより発生するような例外とか、自分のコードの外部の要因で発生する可能性のある例外は、その都度catchして適切に対処する必要がある。
2019/08/16(金) 01:51:17.26ID:XNgAzUDc0
四則演算やっても
オーバーフローもゼロ除算もあるしね
一番上のcatchでまるっと処理したほうがええ
2019/08/16(金) 02:16:34.36ID:3ldAil1N0
>>276
その処理内で対処できるなら投げない
できないなら例外なげる

>>279-280
キャッチする話じゃなくて投げるほうの話だろ
まあ、キャッチも同じ考え方で、自分で対処できる例外はキャッチする
それ以外はそのまま上位へ

今はこういう考え方が主流だと思う
282デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/16(金) 02:17:58.68ID:KW3/fLy3a
>>276
そんなの手を動かさずに机上で考えてるからそうなるだけw

処理できない問題は(基本的には)例外を投げて呼び出し側に通知するしかない。
処理できない例外は投げるしかない。
処理できないのにcatchして握りつぶしてよい例外なんかない。
何が難しいの?
2019/08/16(金) 05:58:38.34ID:RrHjcCxL0
初心者マークの人へのアドバイスとしては

例外をthrowするケースは
・事前条件が崩れる場合、例えば引数がおかしい場合や処理の準備が整わない場合
・処理に失敗したことを伝える場合
まずはこのあたりを基準に

逆にcatchはむやみやたらにしてはいけないし、特に握り潰してはいけない

他人のソースをたくさん読んで、たくさん考えて書くしかないよね
2019/08/16(金) 07:20:17.23ID:z6Pxs9AVa
javaみたいに「このメソッドはこんな例外を投げるから必ずtry-catch書けよ」ってできなかったっけC#
2019/08/16(金) 07:41:23.99ID:G0Kx7mvIa
>>284
Javaの最大の失敗の一つだね
C#に採用されなかったのはもちろん、Kotlinですら省かれた
2019/08/16(金) 09:30:31.26ID:1KF8kPqD0
そもそもチェック例外を採用した言語ってJava以外にあったか
2019/08/16(金) 09:33:04.09ID:w8wDW0z80
>>276
動作止めたくないなら例外拾って全部ログに書き込む
2019/08/16(金) 11:35:21.61ID:16ocBcE+p
全部のケースを全部継続可能か不可能か判断してケース分けするに決まってんだろ。
甘えんな
2019/08/16(金) 11:43:27.15ID:i2ShkSLcM
俺はtry入れないでまず作って
例外が頻発する箇所に追加していく感じ

最初から丁寧に入れていくのは時間の無駄が多い
290デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/16(金) 12:43:54.88ID:vQM55/5Pa
いやとにかく

(1) 例外を投げるかどうか
(2) 例外をcatchするかどうか

こんなことで悩むなんてありえないよ。悩む理由がない。
悩みどころなんて、どの例外を投げるかの選択、あるいは例外をどの程度
場合分けするか、ぐらいしかない。

これは例えば、引数が変だった場合にとにかくいつでもざっくりArgumentExceptionを投げて済ますか、
引数がどう不適切なのか、細かく場合分けしてより適切な例外を投げるようにするかの選択

余談だけどこういうと怒る人もいるかもしれんが、個人的には例外の場合分けなんて
本当はどうでもいいと思ってるw

役に立つことはほぼないwほとんど場合プログラマの自己満足だw
そのコードを見られる場合にはね。(だから他人が使うライブラリを書いてる場合は別問題)
291デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/16(金) 12:50:25.25ID:vQM55/5Pa
あと、そもそもメソッドのデザインとして
例外を投げる代わりにout引数か戻り値でnull(あるいは例外オブジェクト)
を返すって選択肢もあるから、そこで迷うってケースもないことはないけどね。

呼び出し側でいちいちtryブロックを書く必要があるのは鬱陶しい、
って需要もあるから
292デフォルトの名無しさん (アウアウエー Sae3-SXVW)
垢版 |
2019/08/16(金) 12:59:06.06ID:mZqFzvyqa
キモいRuby厨はスレ追い出されてC#スレに引っ越した
2019/08/16(金) 13:33:31.65ID:w8wDW0z80
>>289
たぶん環境が緩いというか品質が知れるわ
2019/08/16(金) 14:56:57.30ID:/nFnP4zmd
>>291
out使うのはなぜ?
2019/08/16(金) 15:10:09.14ID:Boqt1xFK0
outでエラーコード返すのでは?
2019/08/16(金) 15:19:40.41ID:s9O3qxdqd
昔はout使う構文が嫌いだったけど、7.0でインライン宣言出来るようになってからそうでもなくなった
2019/08/16(金) 16:31:30.73ID:vdJZcXlx0
ValueTupleにエラーコード入れて返すじゃ駄目なの?
298デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/16(金) 16:34:34.90ID:vQM55/5Pa
>>294
TryParse的な物を想定して書いたけど>>291じゃ端折り過ぎて意味不明だね申し訳ない
戻り値nullは(メソッドじゃないけど)as的な物を想定

例外オブジェクトをout変数で返すのはたぶんやってる人はほどんどいないけど、
tryブロックが嫌いなら場合によっては便利かも
2019/08/16(金) 16:37:56.56ID:AwRYym3H0
>>272
JavaとJavaScriptは別ものだ
あほ

Slenium以前の問題
2019/08/16(金) 16:52:07.81ID:/nFnP4zmd
>>298
タプルで返せばよくない?
2019/08/16(金) 17:53:53.26ID:9StEh2pLd
例外はログ拾う時に絶望したくないから適切に投げるなぁ。
どうでも良いという論調は作るだけで保守しない人の発想みたいで少し嫌かもしれん。
アプリケーションのロジックをバッチでも使いたい、みたいな時に、毎度戻り値を検証するんじゃなくてバッチの一連のトランザクション自体落としちゃいたい時に二度手間な気がするんだが、その辺どう作ってるんだろう?
2019/08/16(金) 19:27:37.17ID:16ocBcE+p
>>301
二度手間と思うのは一人で全部コード書いてるから。
2019/08/16(金) 19:30:21.63ID:O2kbbLouM
>>299
え?なぜjsを指定してると思うの?
元々javaのつもりで書いてるんだけど。
沸いてるの??
2019/08/16(金) 21:32:15.51ID:HNLZHpWT0
>>303
javaの拡張子は【.java】だよ
【.js】は、思いっきりJavaScriptの拡張子
少しググって勉強してね
305デフォルトの名無しさん (ワッチョイ 2b2d-QMAU)
垢版 |
2019/08/16(金) 23:41:19.50ID:AADFbgN80
プログラム板住人は煽られるとすぐムキになるから、転載アフィブロガーの種まきに最適な場所になっちまってんだろう
2019/08/17(土) 00:34:58.82ID:1HSNgy8G0
Seleniumって便利だな
もっとユーザが増えてほしい
2019/08/17(土) 02:16:51.47ID:EsYhqRXq0
>>304
え?全然噛み合わない。
なにこのアスペ
2019/08/17(土) 02:31:35.40ID:fYRni8gj0
Ruby on Rails では、作者のDHH が、2014年に「TDD(テスト駆動開発) is dead」と発言して、
ユニットテストから、Selenium を使った、E2E(end to end)テストへ移行した!

それで、Rails 6 では、
DHH のいるBasecamp 社から、GitHub へ移籍した、Eileen Uchitelle によって、
テストを複数CPU コアで、並列実行する機能が実装された!
2019/08/17(土) 10:48:29.26ID:uGEbzf6ra
気狂いしかいねーのかよ
2019/08/17(土) 12:36:57.19ID:zUPT7dbd0
見てわかんねーのか
2019/08/17(土) 13:25:59.90ID:Mqg+a2XP0
暑さで脳味噌が溶けちまったんだろう
2019/08/17(土) 14:35:53.37ID:sCIOh4/p0
なんでRubyスレで言わねえんだ?
2019/08/17(土) 15:08:20.60ID:BwzrwDPv0
>>303
なんでJavaのつもりで書く必要があったの?
2019/08/17(土) 15:55:56.68ID:qUgpJGd70
>>307
あんたの272の近辺にはJavaの話は全く出てきていないが、もしかするとRubyがJavaだと思った?
2019/08/17(土) 19:21:30.41ID:lWdyvSQl0
エスパーすると、ASP.NETがあるがデスクトップアプリがメインだったC#よりまだJavaスレの方がまだselenium詳しそうなやつ多そうだから、せめてjavaスレ行けって事だろ。
ほんとこれぐらいもエスパーできなきゃアホやろ
2019/08/17(土) 21:04:14.52ID:qUgpJGd70
それなら「Rubyスレに行け」が流れ的に当然であるのに何故か「Java」
彼にとってサーバーサイドの言語は全部Java
ほぼ「ゲーム機を全部ファミコンと呼ぶおかん」状態と考えるのが妥当と思われる
2019/08/17(土) 22:31:29.74ID:2lsOlPOTd
>>315
それはあまりにも苦しい擁護だな
2019/08/17(土) 22:32:06.22ID:fWrg11mTM
seleniumがjavaで書かれてるからじゃないの
>>236->>238のC++云々からの流れかと思ったけど
319デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/17(土) 22:34:51.12ID:8QP5rwWB0
KeyValuePair c=func1();
cをnull判定できないんですがどうしたらいいですか?
Myclass c=func2();
の場合、null判定できます。

クラスは出来て、KeyValuePairは出来ないのは何故ですか?
2019/08/17(土) 22:35:45.47ID:1som7JJwa
>>319
C# クラス 構造体
でググれ
2019/08/17(土) 22:37:54.74ID:RvVfsurb0
KeyValuePairにnullなんて入らないからな
2019/08/17(土) 23:10:53.90ID:u5xmISorM
>>314
以後アスペはNG
2019/08/17(土) 23:12:11.34ID:u5xmISorM
>>316
流石に頭が悪すぎるのでこれ以上会話するのは不可能
2019/08/17(土) 23:22:57.32ID:w7ZVAy9F0
>>319
func1をTryParseみたいにbool func1(out KeyValuePair c)にして値入れたくないときはfalseを返すようにしたら?
構造体にnullは入れられないし、どうせそのあとnullで分岐するでしょ
2019/08/17(土) 23:30:37.14ID:u5xmISorM
>>316
先走った場違いな発言を認めたくなくて必死過ぎ、こーゆう使えない部下は直ぐに切るからこいつは低収入確定
2019/08/17(土) 23:35:04.26ID:BwzrwDPv0
>>319
KeyValuePair?
を返すようにしたらいい
2019/08/17(土) 23:36:59.53ID:+vBKVSmmM
>>325
無職のおっさんに言われてもなぁ
2019/08/17(土) 23:47:28.51ID:fYRni8gj0
そりゃ、C#・Java は、静的言語で同じだから、
静的言語になれているなら、Selenium の話は、Java で聞くのがよい

動的言語なら、Ruby, Python で聞けばよい

Seleniumデザインパターン&ベストプラクティス、2015、オライリー
これは、Rubyでテストを書いた本

ウェブ系・HTML は基本、Ruby。
まあ、Java のSelenium の本も出てるけど

Java は、Spring Boot か?
動的言語のGroovy じゃないのか?
2019/08/18(日) 01:25:10.35ID:KlRCzn4x0
javaの話が出てきても勘所がないから検討違いな粘着になるんだよな
Seleniumについて知識があれば文献的に充実してるのはjavaだろうに
2019/08/18(日) 03:58:12.87ID:9i6q0zGn0
c#からc#をインタプリタで実行できるライブラリってありますか?
2019/08/18(日) 06:08:49.00ID:t6n5brFa0
>>330
https://ufcpp.net/study/csharp/cheatsheet/apscripting/

みたいな話か?
2019/08/18(日) 13:41:29.71ID:+4zzAGlV0
WinForms で質問です。
標準の Form から継承した MyForm を abstract で作りました。
この MyForm は abstract なのでデザインで開けません。
(ここまでOK)

MyForm をもとに SubForm なるものを継承して作りました。
これには abstract は付けていないのですが、これもまたデザイナで開けません。
あまりに残念すぎる挙動だと思うのですが、これは仕様でしょうか。
2019/08/18(日) 13:43:21.22ID:+3q0UZxZ0
Visual Studio .NET (2002) から続く仕様だよ
2019/08/18(日) 13:45:24.63ID:jp7+H4+aM
.NETではフォームの継承は推奨されていません
共通化したい場合はユーザーコントロールを使用してください
なお、WinFormsは既に開発が終了しており、今後改善される可能性はありません
2019/08/18(日) 13:51:36.77ID:+4zzAGlV0
やっぱりですか。

デザイナが使えないと不便なので、MyForm 側にabstract 付けないで、virtual 定義しているのですが
継承先で「いじり必須」なものを忘れてしまうため、本当は abstract したいのですが・・

WinForms の開発が終わったって、世の中、VS で弄られてるソースの9割は WinForms だと思うんですけどねぇ
2019/08/18(日) 13:57:02.56ID:ET6qk6jL0
うちは自社開発企業だがFormsはとっくの昔に淘汰された
Formsで作ってたアプリは全部WPFで作り直した
337デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/18(日) 14:04:52.38ID:APnDI8yA0
visualstudioを利用しているのですが最近デバッグ時にフォームアプリを動かすと
System.InvalidOperationException: '有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'hoge' がアクセスされました。'
の様なエラーが出て止まる様になりました
しかし出来たプログラムをふつうに動かす分には異常ありません
今まで作ってきた問題のなかったすべてのバージョンでこの様な現象が起こっています
これは何が原因でしょうか?
338デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/18(日) 14:21:30.88ID:/RKifLkIa
>>335
騙されたらあかんw

継承後のフォームもちゃんとデザイナで開けるし
コントロールを追加したりいろいろ出来るよw

フォームの継承なんて10年以上やってなかったが
今実際試して確認したから間違いない
2019/08/18(日) 14:29:19.80ID:MLAzMixE0
>>337
先日MSがWindowsUpdateでやらかしたのが原因で、結構話題になっているから検索すると見つかる
「windowsupdate vb」 で
2019/08/18(日) 15:44:26.69ID:+4zzAGlV0
>>338
「abstract な継承元から継承すると、継承先フォームがデザイナで開けない」
という意味でしたけど、こちらだと VS2019 でも叱られてしまいます。。
2019/08/18(日) 15:45:05.69ID:+4zzAGlV0
継承元が abstract じゃない単純なファームの継承だったら、まったく問題ありません。
2019/08/18(日) 17:17:03.03ID:zvOpWkeBd
>>334
終了なんかしてないよ
343デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/18(日) 17:55:07.39ID:/RKifLkIa
>>340
なるほど。

abstractにこだわる必要が本当にあるのかなとも思うけど、
何ならコンストラクタをprotectedにすりゃ機能的にはほぼ同じだね。
(abstractメンバーはもちろん書けないけど)

これならそういう不具合は起こらないっぽい
2019/08/18(日) 18:33:20.50ID:5+yaTAKE0
蕎麦とラーメン間違えるとかもう簡単ケータイにしたほうがいいんじゃね。
たぶんVPNとか使わわんだろうし。
俺もIntelだからもう日産もゴーヤチャンプルーも同じ味付けで食える。
345デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/18(日) 21:26:51.68ID:37ku1J740
Keyvaluepairの.Keyをnull判定したら
nullできました。

構造体だけどnull判定できましたが??
keyvalueopair本体はできないけど
KeyまたはValueはnull判定できました。

何故???まぁ良かったんですけど
2019/08/18(日) 21:29:43.77ID:jp7+H4+aM
それはKeyプロパティが返した値をnull判定しているのであり、KeyValuePairが構造体であることは全く関係ない
直行する問題の分離ができない人はプログラミング向いてないよ
2019/08/18(日) 21:32:13.83ID:DxNAHPOT0
構造体はnullにできないからKeyValuePair?使えって言ってんのに
2019/08/18(日) 21:33:54.95ID:DxNAHPOT0
言っとくけど「?」は文字化けじゃないぞw
349デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/18(日) 21:37:51.98ID:37ku1J740
>>346
ようはList<KeyValuePair<string,double>>

"レタス" 100
"キャベツ"120
"トマト" 120

こういうリストで、ピーマンって探すと
Keyがnullになってくれたので、良かったです。
KeyValuepairがnullじゃないのが不思議ですが
null判定できてよかった
2019/08/18(日) 21:46:55.40ID:DxNAHPOT0
構造体はnullにできないと何度も言われてるのになんで不思議に思うんだろう
ピーマンを探すときのList.FirstOrDefault()の戻り値は
KeyValuePairをデフォルトコンストラクタで初期化したものだよ
2019/08/18(日) 21:48:35.09ID:FVnfIX0p0
>>349
keyvaluepairは構造体
構造体にはnullが存在しない
構造体にnullが存在しないことと構造体の中身がどうなっているか関係ないので、中身がクラスであるならnullにもなりうる
君がやったことは構造体ではなくその中身がnullかどうかのチェックしただけ
構造体とクラスの違いが理解できないなら今後も躓くのでkeyvaluepair含め他の構造体の使用も封印したほうがマシ
まぁintだって構造体だから全部避けるなんてことは無理だけど
2019/08/18(日) 22:03:37.75ID:0nN/LwEb0
くどくて性格が悪そうな文章だ
2019/08/18(日) 23:28:35.24ID:r1LRT6EBa
listに入れるならdictionaryでいいんじゃないか…?とか話を一切聞いてなかったりとかkeyvalue君のレス見てるといらつくし
説明してあげる>>351は優しいだろ
2019/08/19(月) 00:48:43.25ID:ODFt4ofXM
>>349
null返ってきたのはkeyの型(string型)の初期値がnullだからなんでねか?
2019/08/19(月) 02:37:59.55ID:s7+bDgX20
>>327
きも
2019/08/19(月) 07:49:38.46ID:2nNI8r3od
>>349
ピーマン探してnullが帰ってくるのはおかしいだろ。
ピーマン探したら見つからないのが正しくないか?
2019/08/19(月) 08:07:23.07ID:D7o3OMEzM
ループ作ったやつ次第のような?
358デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 10:35:33.11ID:VzpEDBAc0
Form1以外のクラスでlistboxに入力したいのですが
他クラスで入力する方法って望ましくないのですか?
他に方法はあるのでしょうか?
2019/08/19(月) 10:48:05.33ID:Le9xiHCt0
MVVMなら他クラスで用意するのが普通。

INotifyPropertyChangedとObservableCollectionでばっちりよ
2019/08/19(月) 10:55:08.87ID:QArCM+jpp
>>356
松茸採りに行っても見つからなかったらバスケットは空で帰って来るしか無いだろ?
2019/08/19(月) 10:55:52.73ID:QArCM+jpp
でもバスケットはあるから、バスケットの中の松茸の数がゼロになるんだよね?
2019/08/19(月) 11:52:38.83ID:2nNI8r3od
バスケットが空なのと、バスケットにnullが入ってるのは違うんじゃねえかな?
参照型は瓶と水みたいな感じで、瓶だけ持って帰ってこれても、
値型みたいな、それ単体が実体のものは言うとおり松茸みたいなもんで、取りにいってなかったら何も持って帰って来れないと思うが。

無理矢理何か持たせるのがFirstOrDefaultで、坊主だった親父がとりあえず当たり障りのないものを魚屋で買って帰るようなもんでは?

FirstOrDefaultは無かったときにnullを返すためにあるんじゃないんだから。
ちゃんとチェックしてから取ったほうがいいと思うよ。
2019/08/19(月) 12:00:12.26ID:ODFt4ofXM
ちゃんとチェックしてからとるならFirst()でよくね?
2019/08/19(月) 12:01:25.55ID:9Ob07fGvd
どうでもいい自分なりの思想を長々と書く人だね
2019/08/19(月) 12:07:05.62ID:ZYeDXrpNM
ILで説明してくれ
366デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 13:23:05.09ID:VzpEDBAc0
>>358なんですが誰かお願いします
別クラスでテキストボックスとかいじるのって普通のやり方ではないんでしょうか?
2019/08/19(月) 13:27:26.75ID:ERfcd1se0
>>359が返してくれてるだろ
2019/08/19(月) 13:34:49.71ID:eHF4rC4A0
別クラスでいじるって、
class Hoge {
public void SetText(TextBox textBox, string text) { textBox.Text = text; }
}
みたいな?
コントロールを外部に渡すというのはまあ一般的ではないな
369デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 13:36:41.01ID:VzpEDBAc0
>>359
返してくださったのはありがたいんですが
その3つの単語全て知らなくて、ググってみても高度すぎてわかりません
コンソールアプリケーションをフォームアプリケーションに移植しようとしているのですが
Console.Write()で出力していたものをlistBoxやtextBoxに出力したいのですが出来なくて困っております
どうかアドバイスお願いします
2019/08/19(月) 13:44:13.47ID:9Ob07fGvd
外部でstringの配列なりListなり作った上でそれを
ListBox.DataSourceプロパティにセットすればいいんじゃないの
371デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/19(月) 13:56:34.58ID:eDOlyF+5a
>>369
■ 選択肢1
FormにAddToLogみたいなメソッドを作ってConsole.WriteLineを
LogForm.AddToLog

■ 選択肢2
Console.WriteLineを、記録する文字列を通知するイベントに置き換える。
Formはそのイベントを拾ってListBoxに表示

後者を推奨
基本的にUIの参照を握らせるのは悪い手
372デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 14:04:49.07ID:VzpEDBAc0
移植したいコンソールアプリ
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);
}
}
373デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 14:06:13.39ID:VzpEDBAc0
作ってみたフォームアプリ
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
ありがとうございます。さっそく試してみます
2019/08/19(月) 15:32:03.08ID:ERfcd1se0
なんでいきなりバックグラウンドワーカーが出てきてるか知らんけど、ドゥーワークは別スレッドで実行する内容を記載するところで、UIスレッドにアクセスしたらダメ→コントロールを触ったらダメ
リストボックスにアクセスしたかったらリポートプログレスもしくはコンプリートでUIスレッドにマーシャリングしてから
375デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 16:32:24.93ID:VzpEDBAc0
簡略化して書いていますが凄い長い計算なので計算中でもプログラムが反応する様にbackgroundWorkerにしています
backgroundWorkerかでなくとも、他クラスからフォームをいじるということが出来なくて困っています
2019/08/19(月) 17:09:34.09ID:2nNI8r3od
普通にinvokeしなよ。
2019/08/19(月) 17:49:40.07ID:VD+/iXFd0
>>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」をループさせてもいいんじゃないの
2019/08/19(月) 17:55:50.15ID:V7QYb24CM
>>366
ログ出したいん?
なんかプロパティのフラグ立てる必要なかったっけ?
2019/08/19(月) 18:04:30.50ID:V7QYb24CM
関係なかった
自分が昔出なかったのは
AppendTextしてなかったからだったw

すまんかった
380デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 20:31:39.57ID:VzpEDBAc0
Invoke調べてみました。いけそうな気がしますが書き方が難しいです
上記のコードの場合どのように記述すれば良いのでしょうか?
2019/08/19(月) 20:43:11.70ID:y72D5AUNp
>>380
ここおススメやぞ

https://blogs.msdn.microsoft.com/nakama/2009/03/30/part-1-windows/
382デフォルトの名無しさん (アウアウカー Sa15-cJb6)
垢版 |
2019/08/19(月) 20:46:44.95ID:cJsYlnhia
パッと見で適当だけど、formにコントロールの変更記述して、コールバック登録してtaskはしらせればいいの違うのか?invokeは当然
2019/08/19(月) 21:00:04.04ID:Vps+pUHe0
>>380
delegate用のメソッド作ってdelegateにセットしてinvoke
https://www.atmarkit.co.jp/ait/articles/0506/17/news111.html
384デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/19(月) 22:54:50.46ID:aQCsW5pK0
doubleって整数のほうに偏りがあったら
小数部分は短い精度になるんですが、これ何とかなりませんか?
doubleは精度高いから小数点第5位とか精度余裕だろwwwwwwwwwww

989〜〜〜132.1235212596  算出結果
989〜〜〜132.1235312314 正解

え???????????
ちょwwwwww

助けてください
385デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/19(月) 23:06:59.10ID:eDOlyF+5a
>>384
何を言ってるか人に分かるように書かないと誰も答えようがないよw

一般論として、演算誤差を累積させずに
演算可能かどうかはどういう演算をしてるかによるので、
具体的な処理が分からないと何とも言えん
2019/08/19(月) 23:27:14.16ID:9Ob07fGvd
decimal型使えば
2019/08/19(月) 23:36:21.05ID:0KlGy2IO0
>>384
浮動小数点とはそういうもの
小数点以下何桁かではなく全体で何桁か
2019/08/19(月) 23:57:36.54ID:0eZQgVij0
分数型クラスを自分で作ってとっとけ
2019/08/19(月) 23:59:07.58ID:HKOIeNMl0
Seleniumを極めよう
2019/08/20(火) 00:07:25.79ID:VMXKYR4od
Form1, Form2, CounterForm があります。

CounterForm にカウントを表示して、0 になったら、Form1 か Form2 のメソッドを実行するにはどうしたら良いでしょうか?

やりたいこと
5. 4. 3. 2. 1. 0 と表示 → form1.DoSomething();

CounterForm と Form1 の部分はできているのですが、
複数class間で通知する方法がよくわかりません。
2019/08/20(火) 00:22:58.41ID:sL7gwS880
>>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間で通知する方法がよくわかりません。
の意味が分からないんでもう少し詳しく
2019/08/20(火) 01:06:30.58ID:yjnOK/Bv0
「通知」…もし表示済みのフォームをあとからいじりたい場合、

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; } //変数を経由して外側でスローする
393デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/20(火) 01:15:05.72ID:zheL5RcIa
>>390
Formだろうが何だろうが、操作したい側が操作対象の参照を握れば良いだけだけど、
親子関係が成立しているとか特殊な前提がなければ、Formが別のFormの参照を
握るのはあんまり良くない。

原則論を言えばそもそもFormにUIと無関係の処理を書く時点で間違っている。
2019/08/20(火) 07:52:56.91ID:yjnOK/Bv0
UIと関係あるからフォームなんだろうけど…

非同期処理中にポップアップが出て、その間もメインは触れるが、終わるとメインが変更される
なんてことはよくある

書式設定的なのも別フォームから別フォームをいじるわけだし

前のいじり方を残すために、閉じても隠すだけで、同じインスタンスを再表示したい場合とか
2019/08/20(火) 09:26:58.30ID:+NAZ1HN+M
フォームと無関係な〜って書いてあるぞ

そんなことより全角半角がきもい
2019/08/20(火) 12:03:48.15ID:NghMzgaN0
対象のフレームワーク:Framework 4.0 でコンパイルした自作 DLL があります。
この DLL を 対象のフレームワーク:Framework 4.8 なプロジェクトから参照して使用したとき、
DLL の中はどっちで動くのでしょうか?

たとえば自作DLL内で、DataGridView から継承した DataGridViewEx を作ってあったとして
これを 4.8 なプロジェクトで利用したとき、DataGridViewEx 内で
4.0 の DataGridView が使われるのか、4.8 の DataGridView が使われるのか、って意味です。
2019/08/20(火) 12:10:21.33ID:mC8iPjWhd
自作DLL内でDataGridViewの参照を特定バージョンにしておけば4.0になるしそうじゃなければ4.8
2019/08/20(火) 12:17:12.47ID:NghMzgaN0
自作DLL 側の System.Windows.Forms を見たら
特定バージョン:false
になっていたので、呼ばれる側のバージョンの System.Windows.Forms.dll が使われるってことですね。

Framework 4.8 用に新たに作らないといけないかと思ったのですが、その心配ないみたいで安心しました。
2019/08/21(水) 00:27:12.96ID:7whQ/iRu0
あ、間違えた
× this.Invoke( (MethodInvoker)delegate {
〇 static1.form1.Invoke( (MethodInvoker)delegate {
(thisは自フォーム内のマルチスレッド部分のソースだった)

カウントダウンにマルチスレッドが必要とは限らんが
むしろモーダルだったり
でも「オブジェクトがあれば必ず「通知」できる」という方法は確立しといた方が、オブジェクト指向っぽい
クラスオブジェクト指向の前にメッセージオブジェクト指向があったので(Win32API)
メッセージ、つまり「通知」
2019/08/21(水) 00:57:19.98ID:CGK7jfA0d
>>392
解答どうもありがとうございます。
event かデリゲートで解決できそうです。

// Form1
private void CountDownBtn_Click(object sender, EventArgs e) {
var countdownForm = new MYCountDownForm();

// 4 3 2 1 0と表示してから、下に行きたいが、
// これだとカウント 0 を待たずにすぐ下に行く。
countdownForm.Show();

// このクラスのいろいろな処理

}
2019/08/21(水) 01:36:11.80ID:7whQ/iRu0
>>400
そっちかw
そっちは「モーダルフォーム」でググると出てくると思う
その方が普通に基本
2019/08/22(木) 16:28:36.46ID:tih7LC2d0
APIが公開されていなくてもスクレイピングして非公開websoketに接続したいのですが、
解析からトークンなど必要なheader情報取得すればできるものですか?
403デフォルトの名無しさん (ワッチョイ da47-9WLl)
垢版 |
2019/08/22(木) 16:50:43.33ID:xQsiKIbM0
出来るけど利用規約読め
API経由だとセーフで
API経由しないと逮捕とか書いてあるから
404デフォルトの名無しさん (ワッチョイ 7aad-HwVO)
垢版 |
2019/08/22(木) 16:57:22.84ID:erkZnaOI0
>>402
https://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=411AC0000000128
2019/08/22(木) 17:10:49.32ID:NpAwFZ6qM
>>404
条文ぐらい示してやれよ
2019/08/22(木) 17:59:59.30ID:90PkXrDL0
色んなところで迷惑なヤローだな
2019/08/22(木) 21:54:01.43ID:rNXeNA230
>>402
非公開だろうがクライアント側で処理してるのには変わりないんだから
お前が本当にブラウザになり切れればやれるよ

単純に能力と手間の問題だ
2019/08/22(木) 22:05:00.16ID:yaxmcT7W0
この質問結構前からいたるところで見る気がするんだけどただのマルチ?
2019/08/22(木) 23:55:52.03ID:W1llczT4d
>>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 更新
}
2019/08/23(金) 00:00:27.51ID:RwBPjFxxd
ソース抜粋 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; }
}
411デフォルトの名無しさん (ワッチョイ 6568-CMhc)
垢版 |
2019/08/24(土) 00:16:35.07ID:EZ15JXYo0
アホな質問ばっかですいません
光速の計算をしたいんですが、doubleでは無理ですか?
decimalは使いません
お願いします。小数点以下が信用できません。
2019/08/24(土) 00:22:03.18ID:ka7Yl/470
>>411
お前さんが使おうとしている計算方法や欲しい精度とか示さんと答えられんだろうよ
2019/08/24(土) 01:21:02.23ID:g8XGZa5Z0
>>411
2019/08/24(土) 08:41:25.65ID:VP6gB9DD0
質問いいですか、クラスの処理の途中経過をTextboxのコントロールに送りたいのです
public partial class Form1 : Form
{
Class1 class1 = new Class1();
}

class Class1
{
public Class1()
{
Form1.Textbox1.AppendText("Class1を実行しています");
}
}

このようにしてもForm1のインスタンスがないから実行できません
みなさんはクラスのログなどをテキストボックスに送るとき、どう書かれてますか?
2019/08/24(土) 09:03:40.17ID:BNVmeU2m0
>>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から呼び出す
2019/08/24(土) 15:23:44.45ID:VP6gB9DD0
>>415
レスさんくすです
上の方法でうまくいきました
クラスからコントロールを操作ってあまり使わない、というか推奨されてないのかな?
2019/08/24(土) 15:40:00.64ID:glPHIee0p
コントロールは何かを操作する為の機能なんだから、
普通はその操作する何かを直接操作するだろ?
2019/08/24(土) 15:45:48.43ID:BNVmeU2m0
>>416
インスタンスをどう指定していいかわからないんじゃなかったのか
親子関係にあるウィンドウでの操作はいろんなアプリで普通にあるし
C#だけにしても「C# 別のフォームのコントロール」でググればやっているところはいっぱい出てくる
419デフォルトの名無しさん (アウアウウー Sa09-Aknt)
垢版 |
2019/08/24(土) 15:56:01.09ID:dsz+mirUa
>>416
非推奨というか、普通はやりたいと思わないね。
何かの参照を握るってことはそれに依存してしまうってことだから。

Class1は本来はForm1の参照を持つ設計にしたことで、
事実上そのプログラム専用の他で流用できないコードになってる

他で使う予定ないからそれで問題ないと思うかもしれないが(以下略
2019/08/24(土) 19:37:50.96ID:VP6gB9DD0
>>417
確かにコントロールというぐらいだし

>>418
さんくす、実際にやる方法もわからなかったし、教えてもらったのはわかりやすかった
考え方を標準っぽいやり方に寄せたいのです

>>419
さんくす、なるほどパーツとして完成してないですね
汎用性の低いコードは改善しないと、でも今回はこれでいきます
logの取り方考えないと
2019/08/24(土) 21:52:23.83ID:PMKXSgkW0
処理側に出力するだけの意味しかないデリゲートでも渡してやれば?
受け側はコントロールを操作とか意識しなくて済むけど
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;
 }
 :
}
2019/08/24(土) 22:59:49.50ID:sQirZTQZ0
よく答えられるな
なにをしようとしてるのかすらわからんわ
2019/08/24(土) 23:07:54.21ID:VP6gB9DD0
>>421
レスさんくすです
でもしかし、半分ぐらいしか理解できませんでした、スイマセン
〜解読中〜
2019/08/24(土) 23:11:33.91ID:XZUr8QhOa
refやout, in引数のないdelegateなら
自分で定義せずにSystem.ActionやSystem.Funcを使う手もあるよ
425デフォルトの名無しさん (アウアウウー Sa09-Aknt)
垢版 |
2019/08/24(土) 23:15:15.44ID:dsz+mirUa
>>423
理解しなくていいよw
デリゲートを直で受け渡しなんかせず、素直にイベントの方を使いましょう。
2019/08/24(土) 23:54:17.30ID:GocaxRhS0
>>422
さすがにそれはお前がアホやで
2019/08/24(土) 23:56:09.98ID:4OMYNXZ10
使う手もあるというか余程じゃなければActionかFuncでは
2019/08/25(日) 00:04:50.89ID:dkxX1jtZ0
俺もActionを推す
2019/08/25(日) 00:26:08.77ID:DAHO6xPV0
MethodInvoker(´・ω・`)ボクも忘れないでね
2019/08/25(日) 06:55:23.52ID:Jlb1UCj1M
>>414
こういうのってbindingでどうにかするものじゃないの?
2019/08/25(日) 07:21:22.29ID:UfI3Un4o0
可変長の戻り値って実現できませんか?もしくは可変長のタプル
これを
public void hoge<T>(List<T> list, Func<T, string[]> selector) { ... }
hoge(list, listItem => new string[2] { listItem.A, listItem.B });
hoge(list, listItem => new string[3] { listItem.A, listItem.B, listItem.C });

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

require "selenium-webdriver"

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

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

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

driver.navigate.to ARGV[0] # URL
2019/09/02(月) 17:47:47.05ID:btOIY8sya
>>515
MemoryExtensions.AsMemory()を経由してSystem.Memory<T>を管理するのはどう?
2019/09/02(月) 22:24:59.33ID:yMcQzedZ0
>>518
C#で書かないならスレチ
2019/09/03(火) 00:14:45.15ID:nBDYMOwL0
なんで突然ruby?
2019/09/03(火) 00:20:55.08ID:UWVASv0T0
>>521
ソイツはいくつかのスレタイにRuby禁止といれることになった元凶だから、考えるだけ無駄よ
2019/09/03(火) 04:53:21.49ID:uBbuO65f0
これもう半分まつもとゆきひろだろ
2019/09/03(火) 07:44:05.39ID:ZfMnDhcZ0
Matzから分離した闇の半身か何か(ダークファンタジー感)
525デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/09/03(火) 15:02:01.60ID:qa0OGce90
zipファイルのパスワード総当たりのコードってどこかに落ちてたりしません?
526デフォルトの名無しさん (アウウィフ FF55-ca7b)
垢版 |
2019/09/03(火) 15:23:56.69ID:gWEsYspAF
ム板なんだし自分で書いても大した手間じゃないだろ
2019/09/04(水) 23:01:10.22ID:YAGCYgl00
ラプラス使ったほうが早い
2019/09/04(水) 23:19:14.03ID:+3gE1skmF
ラプラス変換関係ないだろ
2019/09/04(水) 23:23:33.02ID:YAGCYgl00
フリーソフトなんだけど(´・ω・`)
2019/09/05(木) 08:24:49.80ID:cdpeKhxuM
ラブプラスに見えたし
2019/09/05(木) 12:39:28.85ID:mWzCSlDu0
頭がc
胴体がDelphi
尻尾がJava

これはなんという生き物か?
2019/09/05(木) 12:52:58.36ID:IuZ8kmLDd
メインフォームと5つボタンがあるサブフォームあります。

サブフォームで押されたボタンをメインフォームに渡す方法として、下記のようなことが書いてあります。

「サブフォームの呼び出し時にメインフォームのインスタンスをサブフォームの変数に渡すか、もしくは Ownerプロパティを設定し、サブフォームにメインフォームのインスタンスを伝える必要があります。」

これ循環参照にならないのですか?
owner プロパティならフレームワークでうまくやってくれそうですが、そうしないなら典型的な循環参照でメモリにいつまでも残るように見えます。
2019/09/05(木) 12:57:57.83ID:IuZ8kmLDd
>532のコードで気になった部分

public FormMain() {
InitializeComponent();
fs = new FormSub();
fs.formMain = this;
}

private void button1_Click(object sender, EventArgs e) {
fs.Show();
}
2019/09/05(木) 13:07:57.99ID:/TG+lkXnd
昔のVBとかじゃないから
参照カウント方式とかじゃないから
大丈夫だよ
2019/09/05(木) 15:05:44.19ID:olW2Z8c3M
>>533
循環になってないやん
相互参照になってるだけ
2019/09/05(木) 15:11:39.37ID:MYIgyYNAM
>>535
相互参照⊂循環参照
2019/09/06(金) 07:39:44.27ID:ON7V4Cum0
awaitの仕組みって面白いな
プログラムは逐次実行と思い込んでいたから最初戸惑ったけど
プログラムの可読性を上げつつ非同期が書ける仕組み
2019/09/06(金) 12:21:39.70ID:5uKlWCRxp
バカ、逆に非同期の仕組みが分かりにくい事になってて最悪だわ。
若い奴らはある種のおまじないとしか思って無いぞ。
だからサンプル通りに書いたら動いたで思考停止してるわ。
2019/09/06(金) 12:23:25.42ID:5uKlWCRxp
だったら最初から完全に隠蔽しちまえばいいのにそれも出来ない半端な言語だよな。
2019/09/06(金) 12:27:55.87ID:RjtqJRZu0
>>537
async/awaitはとてもいいよな
2019/09/06(金) 12:36:51.77ID:dfZG2SkRd
>>539
へー半端な言語が大増殖してるねよかったね
2019/09/06(金) 13:29:27.52ID:TB1/9ae/0
ものすごく細かく気にする価値のないであろう上で質問させてください。
下記のようなコードでは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);
}
}
2019/09/06(金) 13:30:16.71ID:I5nGSvp60
Occam 呼んだ〜
2019/09/06(金) 13:38:31.81ID:qBxw88Xh0
Convert呼び出した側がOpacityとか勝手に変えたりすることがないことが明らかなら
SolidColorBrushで持っててもいいよ
2019/09/06(金) 13:43:03.96ID:TB1/9ae/0
>>544
上記のコードは色以外は初期化したいっていう意図だったんですね
理解出来ました、どうもありがとうございます。
546デフォルトの名無しさん (スップ Sd62-aA0m)
垢版 |
2019/09/06(金) 20:41:34.27ID:QErA9RfTd
return HttpResponseMessage {
StatusCode=HttpStatusCode.InternalServerError


これでクライアントにレスポンス返しても、クライアントで受け取ったレスポンスコードが200になるんだが、どうすりゃ良い?
2019/09/06(金) 23:59:27.95ID:2XeZAy8C0
short lo = 500;
short hi = -1;
int value = hi << 16 & lo;

上記のプログラムでvalueに期待する結果が格納されません。
valueの右辺へおかしいところありますか?
2019/09/07(土) 00:04:12.02ID:1iyY1sdc0
まず期待結果を教えろよ
脳内に格納したままで喋るな
549デフォルトの名無しさん (アウアウウー Saa5-DVh7)
垢版 |
2019/09/07(土) 00:35:07.80ID:lng4b11Wa
ぶっ飛んでるねw
2019/09/07(土) 00:47:49.03ID:lKqYze8d0
>>547
なんとなく&(and)と|(or)を間違えてる気がするけど、期待値書いてくれなきゃ分からんねw
2019/09/07(土) 01:10:23.93ID:ClfuNVBY0
>>547
ビット演算?をしてる割には
unsignedじゃないのが気になった
2019/09/07(土) 01:21:40.06ID:SOW3zbb30
C派生のシフト演算子ってビット演算子よりも優先順位低いんじゃなかったか?
C#で入れ替わったのかもしれんが
553デフォルトの名無しさん (アウアウウー Saa5-4tq8)
垢版 |
2019/09/07(土) 01:30:36.24ID:spGdC07na
型変換か?
2019/09/07(土) 01:31:47.20ID:l9Sxm6Vo0
>>552
docsに演算子の一覧と優先順位がある
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/
2019/09/07(土) 01:52:37.97ID:lKqYze8d0
>>552
逆だぞ
Cの時から
2019/09/07(土) 01:57:56.73ID:7Z6eBjmW0
?はもっと上げてほしい
2019/09/07(土) 01:58:53.26ID:7Z6eBjmW0
じゃなくて??
2019/09/07(土) 11:12:31.90ID:53qID/ifa
async/await、読みやすいし書きやすいけどな。
559デフォルトの名無しさん (ワッチョイ 8990-uegj)
垢版 |
2019/09/07(土) 11:14:11.92ID:LlCffhcK0
https://www.youtube.com/watch?v=O8ucIQA829w
Introduction into StockSharp training course

どうこれVisual Studioってこんなに速く作れるの?
自分で自動売買ソフト組めるってすごくね?
2019/09/09(月) 13:42:14.17ID:mFi2C/Ml0
クラスの継承について分からくなってしまったので教えて下さい。
以下のプログラムを実行すると、コメントの通り、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 で実行しました。
よろしくお願いいたします。
2019/09/09(月) 13:57:18.69ID:+ClizqJ4d
下記 は子フォームから親フォームへのデータ引き渡しのサンプルです。
ShowDialog(); の戻り値を使ってないのですが、ここがよくわかりません。

static public List<object> ShowForm2(List<object> argObjs) {
using (Form2 subForm = new Form2(argObjs)) {
subForm.ShowDialog(); // 戻り値は?
return subForm.resultObjs;
}
}

現在はデータの受け渡しは ShowDialog(); で表示、DialogResult を受け取り、これで処理を分岐。
これだと呼び出し側が少し膨らむと思って探していたサンプルが上のやつです。
562デフォルトの名無しさん (ワッチョイ ed7c-p7Vf)
垢版 |
2019/09/09(月) 14:01:51.48ID:FLVXg6p/0
>>560
type of
2019/09/09(月) 14:25:45.50ID:wj5pBZXU0
>>561
それだけじゃ何とも言えないけど
ダイアログがキャンセルされたかどうかもresultObjsに含んでる
またはキャンセルされたかどうかは重要ではない
のどっちかでDialogResultは不要と考えたんじゃね
あとはただのチェック忘れか
2019/09/09(月) 14:33:19.47ID:+8Zg4WGY0
showdialogはあくまでサブフォーム表示中に
処理を進めないためだけに使っていて
表示したサブフォームがOKもキャンセルもない作りなら
返り値を使う必要がないんだろう

例えばファイルの検索処理とその経過を表示するだけの
サブフォームだったりするんじゃないかな
565デフォルトの名無しさん (アウアウウー Saa5-DVh7)
垢版 |
2019/09/09(月) 14:44:41.43ID:y33/yVcMa
>>560
FolderItems2とかFolderItems3はあくまでVSによって作られた
ラッパークラスなんだと思うけど、たぶんこのラッパークラスには
元のCOMの継承関係は反映されないんだろう。

知らないけど。
2019/09/09(月) 14:54:29.42ID:mFi2C/Ml0
>>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;
}

のようなコードもコンパイルエラーにならないので、
継承関係があることは間違いないと思います。
また何かお分かりのことがあれば教えていただけると嬉しく思います。
よろしくお願いいたします。
2019/09/09(月) 15:06:55.45ID:wj5pBZXU0
COMにおける継承はメンバを引き継ぐという意味であってキャスト可能かどうかは別の話だから
.NETのコード上で明示的または暗黙的にCOMオブジェクト(のラッパ)をキャストした場合
QueryInterfaceが呼び出されてそのインターフェイスに変換できるかどうかオブジェクト自身に問い合わせる
だから共通型システム的には問題ない暗黙的キャストでもその下のQueryInterfaceで拒否される可能性がある
2019/09/09(月) 19:12:21.94ID:ko6k1+RqM
正規表現を教えてください。
先頭一文字は大文字アルファベット、
次の一文字は大文字アルファベットかスペース、
残り五文字が数字、です。
文字数は多すぎても少なすぎてもダメてす。
2019/09/09(月) 19:34:55.30ID:N7SL81rE0
[A-Z][A-Z\s]\d{5}
2019/09/09(月) 19:51:19.13ID:P/8qmdeQ0
C#でdxfファイルを読み込んでどんなCADデータかなと表示するにはどんな方法がありますか?
2019/09/09(月) 19:51:40.30ID:+ClizqJ4d
>>563
戻り値使わないとエラーでビルドできないと思ったんですが、こんな書き方あるんですね。
2019/09/09(月) 19:58:03.26ID:ko6k1+RqM
>>569
ありがとうございます!
できました!!
2019/09/09(月) 19:58:22.06ID:8qRxx3SUa
>>570
Autodeskのサイトからviewerが落とせたと思うがそれ使うんじゃダメなのか?
C#を使って何か独自のことがしたいの?
2019/09/09(月) 20:38:09.86ID:/GXaCKPOd
>>570
自力でレンダリングしてるらしきサンプル見つけた
https://www.codeproject.com/Articles/156522/DXF-Import-NET-Read-and-View-AutoCAD-Format-Files
2019/09/09(月) 21:02:37.25ID:gB0pdJ5j0
>>570
結構大変。DWGならlibreDWGってライブラリーがある
2019/09/10(火) 22:30:01.75ID:/j9k/Fivd
>>573
最終型は建築のキープランってものがあって、そこに無数の符号という記号が丸の中に書いてあるんだけどそこを色塗りをしたい。

>>574
ありがとうございます。
難解過ぎてゆっくり休みの日にでも読んでみます。

>>575
やっぱ大変そうですよね。調べてもなかなか...


C#スレはあったかいな。ありがとうございます!
2019/09/11(水) 00:00:22.11ID:1SzE9pLa0
一般人「ウィンドウ」
キモオタ「フォームがーーー」
578デフォルトの名無しさん (ワッチョイ 8990-uegj)
垢版 |
2019/09/11(水) 18:58:32.68ID:YXyi8nZ+0
フォームってなに?泡?
2019/09/12(木) 08:36:47.62ID:XbTCqLqm0
c#は食わず嫌いだったけど使ってみたら案外良かった
使いやすいように改良してるんだな
2019/09/12(木) 11:25:52.65ID:QIiZhm2T0
コントロールのタイマーの質問なんですが
private void Timer1_Tick(object sender, EventArgs e)
{
  MyClass myClass = new MyClass(this);

  myClass.//クラスの処理いろいろ

}
こう書くと毎回クラスが初期化されてしまいます
タイマー内で同じクラスのインスタンスを使い続けたい場合どのように書けばいいのでしょか?
2019/09/12(木) 11:31:00.31ID:AZGZd9Ny0
myClassをメンバ変数にする
2019/09/12(木) 11:40:42.95ID:2zGYYD27p
myClassなんて再利用性が皆無なネーミングすんなよ。
2019/09/12(木) 11:45:28.48ID:joMf8nOja
>>582
説明のための命名だろうよ
2019/09/12(木) 12:10:59.94ID:V+BKjeIEM
発達はコンテキストが想像できないから…
2019/09/12(木) 13:44:13.80ID:j3ZoG8EK0
>>582
aho
586デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/12(木) 14:02:29.31ID:0aQt/zFJa
>>580
タイマーのイベントハンドラを消して、適当なタイミング(例えばFormのLoadイベントとか)で
private void Form1_Load(object sender, EventArgs e)
{
var count = 0;
timer1.Tick += (snd, ea) =>
{
Console.WriteLine($"count = {count++}");
};
}

でもこれだとイベントの購読解除ができないので注意
っていうか、ジョークだから真に受けないでw
2019/09/12(木) 20:25:20.03ID:QIiZhm2T0
>>581
レスサンクス、そもそも宣言しないってことですか
それもアリかも、今回はインスタンス1個で済みそうだし

>>586
レスサンクス、むむむ、どうなるん?

>>582
めっちゃわかりやすいし
2019/09/13(金) 14:33:13.49ID:FohQxIv6d
>>587
コンストラクタかTickイベント(初回のみ)でTimerのTagプロパティにMyClassインスタンスを設定
senderからTagに設定されているインスタンスを取得して利用するってやり方もある

1タイマー1MyClassって感じの設計ならこっちの方がいいかもね
2019/09/13(金) 16:09:57.39ID:GqasltTgM
再利用性のないクラスの名前に拘り過ぎるのは
効率的に無駄だなと感じる

ライブラリ用のクラスは拘るけどね
2019/09/13(金) 17:07:26.51ID:zz4VRjti0
>>588
レスサンクス
だけど考えても理解できませんでした
2019/09/13(金) 17:17:29.19ID:GqasltTgM
これでいいじゃない

private MyClass myClass = new MyClass(this);

private void Timer1_Tick(object sender, EventArgs e)
{

  myClass.//クラスの処理いろいろ

}
592デフォルトの名無しさん (ワッチョイ 9f90-bRiQ)
垢版 |
2019/09/13(金) 17:23:20.15ID:65eTAicb0
マイコラスの嫁がかわいい
2019/09/13(金) 17:47:41.70ID:FohQxIv6d
>>590
コンストラクタで、
Timer1.Tag = new MyClass(this);

イベントで
var myClass = ((Timer)sender).Tag as MyClass;

コンストラクタで作ったインスタンスがTimer1のイベントで使えるようになる
これで理解出来そう?
594デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/13(金) 17:49:44.94ID:XXPMNkq8a
>>590
たぶんこう
var mc = (timer1.Tag ?? (timer1.Tag = new MyClass())) as MyClass;

でもこんなアホなことやったらあかんw
2019/09/13(金) 17:59:46.24ID:FohQxIv6d
捕捉でsenderの扱いに馴染みがなくて分かりずらいなら
var myClass = Timer1.Tag as MyClass;
って直接コントロールを見てもいいかな

10個のタイマーでそれぞれクラス作るとかだと、メンバに持つのが嫌になるからそういう時に便利
2019/09/13(金) 21:09:16.91ID:zz4VRjti0
>>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
サンクスです、うまく動きました
でも正直あまり理解できてません

注:理解するのに時間がかかります
2019/09/13(金) 21:48:16.79ID:PFGdVlPv0
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);

// 終了条件チェック、
// 終了処理
}
2019/09/13(金) 22:11:07.86ID:YdWi/cYta
>>597
int counter = 0;
void timer_Tick(object sender, EventArgs e)
{
counter++;
counter %= 256;
textBox1.BackColor = Color.FromArgb(255 - counter, 255 - counter, 255);
}
2019/09/13(金) 22:12:15.08ID:Gf0j4OgCd
>>596
>>580 でMyClassにthis を渡しているから皆thisを渡してインスタンスを作ってんだけどthisいらないの?
いらないならthisは消していいよ
2019/09/13(金) 22:27:35.64ID:zz4VRjti0
>>599
いやthisは欲しいです、Class内からtextboxコントロールのメソッド触りたいので
form1渡してます
601デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/13(金) 23:44:37.81ID:aO4dryeFa
>>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);
  }
602デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/13(金) 23:44:54.82ID:aO4dryeFa
  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);
  }
}
2019/09/14(土) 02:16:18.45ID:BYSNLn3J0
>>600
コンストラクタやフィールドだとthisって使えないんだっけ?
それならこれでいけるかな
Tagの方も同じ感じでいけるはず

private MyClass myClass;

private void Timer1_Tick(object sender, EventArgs e)
{
if(myClass = null)
{myClass = new MyClass(this);}

myClass.//クラスの処理いろいろ
}
2019/09/14(土) 09:11:10.12ID:weYOKlpc0
>>603
れすさんくすです
なるほど宣言と初期化をわけるのですね、うまく動きました
2019/09/14(土) 11:56:47.95ID:vC+cN/7F0
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は変化なし
2019/09/14(土) 12:17:37.64ID:iAxlaW7xa
デリゲートは参照型
action += method は文字通り action = action + method であり、結合後の新しいインスタンスが action に代入される
デリゲート同士の + は String と同様に言語仕様によって特別扱いされており、Delegate.Combine メソッドの呼び出しに変換される
ちなみにイベントに対する += は x.ev = x.ev + method ではなくプロパティと同様にxに対する特殊なメソッド呼び出しになる
作法的な話をすると、デリゲートのマルチキャストは歴史的経緯による遺物であり、イベントハンドラ以外には基本的に使わない方がいいよ
2019/09/14(土) 12:37:52.80ID:vC+cN/7F0
なるほど、action += methodは、action = new Action(action + method)的な形ということだったんですね
ありがとうございます
2019/09/14(土) 14:06:14.47ID:nQc/7xFt0
Windows form だとちょっとした色変えるだけのエフェクト書くの大変。

iPhone swift だと 下記みたいな 2行 でかけるのに。
UIView.animate(withDuration: 0.5, delay: 0.0, options:[]
, animations: { TextField.backgroundColor = .blue }
, completion : { _ in TextField.backgroundColor = .white } )

Form のクラスメソッドに色、透明度、位置、回転、大きさとかを変化させるアニメーション系のメソッド追加してほしいね。
2019/09/14(土) 16:27:56.54ID:y7dkXYFS0
>>608
そういう人はWPF使う方がええよ
mvvmにこだわらなければそんな差ないし
610デフォルトの名無しさん (アウアウウー Sa63-3FT0)
垢版 |
2019/09/15(日) 11:17:21.32ID:ZbgEJrYza
今でも業務系のASPって、MVCよりWeb formsのほうが多い?
2019/09/15(日) 11:21:19.74ID:0P7zcb1/0
>>610
多いと言うか更改されずに腫れ物システムとして生き残ってるのが多いよ
2019/09/15(日) 11:23:22.76ID:qUTb/lfg0
>>610
ASPとASP.NETは違うよ
613デフォルトの名無しさん (エムゾネ FF9f-+dKN)
垢版 |
2019/09/15(日) 14:39:22.86ID:CYqvBFjrF
ASP: Application Service Provider
2019/09/15(日) 17:44:41.18ID:DjqXGTBC0
>>612
aho
615デフォルトの名無しさん (ワッチョイ 9f90-bRiQ)
垢版 |
2019/09/15(日) 17:46:02.32ID:tc+PQ4bB0
アスペルガー
2019/09/15(日) 18:48:25.55ID:qUTb/lfg0
>>614
お前がな
2019/09/15(日) 19:36:43.99ID:50f2l1H40
application hosting options
2019/09/15(日) 20:38:22.87ID:IMDj4f3rd
>>612
アプリケーションサービスプロバイダ(英語: Application Service Provider、ASP)とは、
アプリケーションソフト等のサービス(機能)をネットワーク経由で提供するプロバイダ(= provide 提供する 事業者・人・仕組み 等全般)のこと[1]。

広義にはこうした仕組みのソフトウェア提供形態やビジネスモデルまでも指す[1]。
https://ja.m.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80
619デフォルトの名無しさん (アウアウウー Sa63-3FT0)
垢版 |
2019/09/15(日) 22:04:55.99ID:ZbgEJrYza
>>610です
>>612
ごめんなさい。自分が端折ってしまったのがいけませんでした。ASP.NETです
>>611
やはりそんな感じなんですかね。意外とASP.NET関連の求人が多いので保守メインなのか開発メインなのか気になったもので
2019/09/15(日) 22:31:35.04ID:007yvQzV0
ACTIVE SELF PROTECTION の求人だったりして
https://activeselfprotection.com/
2019/09/16(月) 01:27:46.19ID:2BSu07WM0
Bitmapを返すdllがあります(C#で作成)
それをWinFormsで参照し、Bitmapを受け取りたいのですが、空の?Bitmapが返ってきます。
デバッガでdll側がきちんとBitmapをreturnしているところまでは確認できました。
ほかにどごを見直せばいいでしょうか
2019/09/16(月) 01:45:47.54ID:2BSu07WM0
>>621
dll側をよく確認したところ、記述ミスがありました。
スレ汚ししてしまってすみません。
2019/09/16(月) 10:01:49.86ID:z/LnXMaR0
Process.Start()
で既に起動済みの外部コンソールアプリにコマンドを渡して結果を受け取りたいんですけど
どうすればいいですか?
624デフォルトの名無しさん (ワッチョイ 7fad-BCJT)
垢版 |
2019/09/16(月) 10:55:23.20ID:1SVMjj7z0
>>623
起動時に繋いどかないと後からは無理
http://cammy.co.jp/technical/2017/05/16/c-%e6%a8%99%e6%ba%96%e5%87%ba%e5%8a%9b%e3%82%92%e8%87%aa%e5%88%86%e3%81%ae%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%a0%e3%81%ab%e3%83%aa%e3%83%80%e3%82%a4%e3%83%ac%e3%82%af%e3%83%88%e3%81%99/
2019/09/16(月) 11:17:36.58ID:TvwShLRF0
>>623
processをどう作ったか書かないと
2019/09/16(月) 12:31:59.14ID:z/LnXMaR0
>>625
普通にこんな感じです

Process prc=new Process();
ProcessStartInfo psInfo = new ProcessStartInfo();

psInfo.FileName = "hoge.exe";
psInfo.CreateNoWindow = true;
psInfo.UseShellExecute = false;

prc.StartInfo = psInfo;
prc.Start();

コンソールアプリはすぐに終了せずに待機してくれるタイプです
2019/09/16(月) 12:42:54.00ID:yFJZVYWt0
>>626
自分でプロセスを起動してるなら入出力をリダイレクトするだけ
psInfo.RedirectStandardOutput = true
psInfo.RedirectStandardInput = true;

起動後は
proc.StandardInput.WriteLine("hoge");
proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
2019/09/17(火) 18:45:14.27ID:4wOD4j6P0
ポリモーフィズムに関しての質問なんですけど
よくある例えでdogクラスのオブジェクトもcatクラスのオブジェクトもまとめてanimalクラスの配列で扱えるみたいなのあるじゃないですか
でも例えばこの時catクラスでだけ定義されてるフィールドがあったとして、配列に格納した途端アクセスできなくなっちゃいませんか
privateとかpublicは置いといて、たとえば、bool isPrettyとか定義されてたとして、animals[0].isprettyは無理じゃないですか。親クラスから子クラスで独自に定義されてるもんは触れられないですよね
とりあえずまとめて親クラスで持っておいて使う時になったら子クラスの情報使いたいみたいなときなんかうまくやる方法ってないもんですかね。
2019/09/17(火) 18:49:22.91ID:6boldAmf0
C#的にはパターンマッチングで分岐すればそれは可能だが
親クラスが持っていない情報を子クラスが持っている時点でそのクラス設計は疑わしい
その例ならanimalクラスにvirtual bool IsPrettyを持たせるべき
2019/09/17(火) 18:50:41.39ID:fvAMDErgd
そもそも使うものをまとめておくのが親クラスというかインターフェースや抽象クラスの役目なので、持ってるかどうかもわからないisprettyを使いたいのが間違ってる。無理やりやるんならリフレクションで存在確認するしかないよ
2019/09/17(火) 18:51:12.83ID:6boldAmf0
親クラスが持っていない情報というのは言い過ぎだな
親クラスが持っていないpublicプロパティを子クラスが持っているのは怪しい設計
2019/09/17(火) 18:54:14.01ID:fvAMDErgd
例えばヒゲのプロパティは猫しか持ってないと思うけど、そういう場合は is か as で具象クラスの型を確認してキャストして取ることは出来るけど、それはなんか気持ち悪い気がする
2019/09/17(火) 19:11:59.16ID:6boldAmf0
全動物のうち猫しかヒゲを持ってないわけじゃあるまいし
Animal型にNullable型のヒゲプロパティを持たせてそれがnullかどうかで処理を分岐させればいいだけでは

Animalクラスがヒゲを持ってるのは唐突過ぎると思うならFaceプロパティでも挟めばいい
2019/09/17(火) 19:13:48.81ID:189yfApBd
>>628
親クラスを無駄なメンバーで膨らませるのはバッドパターン。
インターフェイスを使うべき。

IPrety InterFace を付けたなんらかの型のリストをループすればいい。

// IPrety InterFace で拡張した型ならなんでもループで回せる。
if myUnit.isPrety == true {
myUnit.doSomething();
}
2019/09/17(火) 20:02:19.06ID:5qQz1pKl0
>>628
ダウンキャストしなされ
as クラス名;でよろし
2019/09/17(火) 20:15:43.47ID:4wOD4j6P0
色々勉強になりました
こう共通のメソッドとフィールドがあるからくくりだして親にしようくらいの気持ちだったんですけどぐぐったらそういうのそもそもダメらしいですね
素直に各クラスで同じフィールド定義して継承関係全部なくそうと思います。
2019/09/17(火) 20:16:03.96ID:mLXav9Fo0
まあそれだったらanimalに純粋仮想メソッド作ってCatにだけ必要な処理書くほうがいいって考えはわかる
2019/09/17(火) 20:45:51.61ID:gcZDzsnLa
>>631
えー、そうなんか
それけっこう使ってるなぁ、、、
2019/09/17(火) 21:13:37.27ID:XDhMjXUv0
.NET Framework の Object クラスを全否定してるじゃんw
2019/09/17(火) 21:14:22.17ID:D+I+Wj20M
親クラスが持ってないプロパティを子クラスが持ってるって
.Netですらわんさかあるじゃないの
2019/09/17(火) 21:15:50.88ID:D+I+Wj20M
あ、かぶった
機能を追加するために継承して関数やプロパティを増やすのが
ごく普通の設計じゃね
子クラスの全プロパティを親が網羅してたら使いにくいわ
2019/09/17(火) 21:42:46.98ID:hXcOzvgxa
機能を追加するための継承は現代的なOOPではあまり積極的には行われないんだよ
現代的なOOPにおいては実装継承は本質的に悪であるとされ、明確なメリットがある場合を除いて基本的に避けるんだよ
端的に言えば、抽象クラスを定義して、明確に拡張ポイントとして用意されたメソッドのみをオーバーライドする、
という使い方が今時の唯一の実装継承の使い方であると理解しておけばマサカリを食らうことはない
機能を追加したいだけなら継承する必要は全くなくて、ただそれぞれのクラスを別個に使うか、包含すりゃいいだけだ
643デフォルトの名無しさん (アウアウウー Sa63-3FT0)
垢版 |
2019/09/17(火) 21:44:46.02ID:02KenGFka
それほんとにその親いる?って感じの実装だったらabstractにするんじゃなくて?
644デフォルトの名無しさん (アウアウウー Sa63-3FT0)
垢版 |
2019/09/17(火) 21:45:27.86ID:02KenGFka
あっ被った?
2019/09/17(火) 23:37:00.02ID:PSgriU0H0
>>641
.NETだとコントロールの大半がそうなっているなw
親の方のクラスでまとめて配列にして場合に応じてキャストして子のプロパティを取り出すとか実装したことはある
2019/09/17(火) 23:46:29.64ID:e7oun/vJ0
すみません、初歩的な質問なのですが、クラスやらメソッドやらメンバーやらにアクセシビリティを設定するのは、他の誰かが使用するライブラリーを作成することを想定しているからなのでしょうか?
できるならpublicだらけで作りたいのですがそれがどんな問題に繋がるのかわからずモヤモヤしてます。
2019/09/17(火) 23:59:21.95ID:rQ8N7dRz0
>>646
問題ない
2019/09/18(水) 00:04:42.53ID:PFlVcPVS0
>>645
ふーむダウンキャストも絶対やっちゃダメってわけでもないのか
2019/09/18(水) 00:12:27.01ID:o3BZQkX70
>>646
システムが巨大になったときにpublicばかりだと複雑過ぎて手に負えなくなる
巨大になる予定も無いし他人に開示する予定も無いなら好きに作れば良いよ
2019/09/18(水) 00:13:40.45ID:MOtnHukC0
>>647
>>649
ありがとうございます!
2019/09/18(水) 00:46:19.09ID:XJgNYgHy0
>>648
わざわざ言語仕様にダウンキャストがあるのはそれが有用だからで、使っていけないわけではないよ。下手な設計で濫用されるのが非難されるだけで、適切な使い方をする分には問題ない。
理由も説明せずに杓子定規に◯◯は使うななんて書いているサイトがあれば、おそらくその書き手もちゃんと分かってないと疑ってかかった方がいいくらい。
652デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/18(水) 01:18:05.53ID:cuUyZOV2a
>>650
普通に考えて問題だから真に受けたらあかんw

外からアクセスする必要がないメンバーがpublicになってるクラスは
滅多に使わない機能のボタンがてんこ盛りのリモコンみたいなもの。

使いたい機能を探すのに不必要な苦労するでしょ
インテリセンスに使いもしないメソッドやプロパティが100とか
表示されるようなクラス使いやすいと思うか?
2019/09/18(水) 02:24:45.00ID:haPYpedoa
使いやすさなんて結局はドキュメントの質や命名規約などの高レイヤーの話であって、アクセス制御自体はそれほど重要ではない
メンバをpublicにするということは、そのメンバが利用できることをクラス外に対して約束するということに他ならない
そして、それを後で変更しようとすればクラス外へ波及する破壊的変更となる
将来的な変更の余地を残すために、客に対して不必要な情報公開を避けるという判断は、コーディングに限らずIT業界のビジネスのあらゆるシーンにおいて非常によく行われる
654デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/18(水) 02:39:11.63ID:cuUyZOV2a
そういう議論は為にする議論ってやつだと思うよw

晒すメンバーの数だけ拘束されて自由が減るってのは論理的にはその通りだけど、
現実問題いらないメンバーに故意にアクセスするコードを書くことなんかまずない。
だっていらないんだからw

本質的に重要なのは見えるメンバーの数を減らして複雑性を下げ、生産性を上げること。
時間が一番貴重なんだから
2019/09/18(水) 07:50:17.10ID:PFlVcPVS0
何から何までそれこそループ変数までパブリックフィールドにしていろいろなメソッドで使い回すクラスと対峙しているのでなかなか響く話題
辛い
2019/09/18(水) 07:58:41.43ID:5e31sw6sa
>>655
全部書き換えてしまへ
2019/09/18(水) 08:07:10.60ID:n4vg2Vie0
Windowsでbluetooth BLEの心拍計とケイデンスセンサーから
データを取得したいんだけど
どういうコードを書くと取得できるかな?
わかる人いるだろうか
2019/09/18(水) 08:24:07.29ID:o3BZQkX70
デバイスのAPI仕様書読め
2019/09/18(水) 14:09:46.88ID:uVuJujwEF
Process.Startにディレクトリを渡すとエクスプローラで開いてくれるけど、同じことをスマホなどMTP接続されたデバイスのフォルダでやりたいのですが
エクスプローラでスマホのフォルダを開いた時のウインドウタイトル(PCデバイス名〜)を渡してもエラーになります。
ProcessでMTPのフォルダを開くことは出来るでしょうか?
660デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/18(水) 14:50:14.61ID:9K+6bCRKa
>>659
MTPってことはPCからはストレージに見えてるってこどだよね?
普通にそのパスを渡すだけじゃないの?

ドライブレターが不変じゃないのが困るってこと?
2019/09/18(水) 15:08:01.73ID:n4vg2Vie0
スマホの場合、標準のエクスプローラに相当するものがないから
ひらけないんじゃね?
2019/09/18(水) 15:11:26.73ID:n4vg2Vie0
ああごめん、スマホをデバイスとしてPCに刺してる場合ね

ファイル名を指定して実行でアドレスを入れて開けないなら
ファイルパスが認識できていないのかもしれない

エクスプローラのexeにパスを引数で渡して起動するよりないんじゃね
2019/09/18(水) 17:08:55.83ID:8TRa6KIP0
エクスプローラーはMTPを通常のフォルダと変わらないように見せかけてるだけ
自分でアクセスするにはそれ用のAPIを使う必要がある
2019/09/19(木) 00:42:07.12ID:d/lXkOqta
質問です
VisualStudioとかUnityってメモリ4GBのノートパソコンでも動きます?
それともゲーミングノート買った方が良い?
2019/09/19(木) 00:43:51.43ID:bue4KA2uM
動かなくは無いかな
重いかどうかはやるのが早いんじゃない?

速度に不満で長く続けられそうなら
新しいのを買えばいいんじゃないの
2019/09/19(木) 01:05:46.17ID:d/lXkOqta
>>665
ありがとうございます
2019/09/19(木) 01:08:28.00ID:+/h2Zlffd
そふとうぇあなど実態のないデジタルデータを売ってお金をだまし取るのは詐欺なのでは?
2019/09/19(木) 03:08:03.44ID:VsuqkEyW0
何を売ろうが騙し取れば詐欺だろw
2019/09/19(木) 07:20:07.81ID:2k5+XP3O0
文字列を検索して文字数と行数を同時に取得する方法はないでしょうか?

VisualStudioのフォルダ検索みたいにヒットした行の行数と内容を表示して
ダブルクリックで該当ファイルを表示→選択箇所へジャンプとかやりたいです
2019/09/19(木) 09:52:48.59ID:AAQe7fcf0
文字列探索の要件が判らないとエスパー回答になるな

C#ならではの方法としては、オブジェクトのハッシュコードを照合するという
方法もあるね
2019/09/19(木) 10:34:03.67ID:2Fbpp9uL0
文字数はstring.Lengthで良いのでは?
行数はそのstringをforして1charづつ改行charなら++して数えていくとか
2019/09/19(木) 12:14:01.52ID:EhHD1H1Td
File.ReadAllLineで全部とるか、メモリ上なら改行コードでsplitして配列の添字を取ればいいじゃない
2019/09/19(木) 12:29:35.89ID:+/YZqQed0
>>672
その場合、テキストボックスでフォーカスを当てるための文字数って地道にカウントしてくしかないっすよね?
2019/09/19(木) 12:31:08.07ID:VB98Oc2p0
>>673
基本的にそう
テキストエディタとかはそんな感じで実装してる
2019/09/19(木) 13:00:06.50ID:cKzRnh020
>>674
なるほど
地道にやってんすね

やってみた感じ
文字数から行数出した方が楽だったのと
検索しながらは検索文字列に改行コード入ると面倒だったので

@検索文字列のヒットした文字数を出す
A文字数に対する行数を出す

の順でやりました
ありがとう御座いました
676デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/19(木) 14:17:59.08ID:R2S0qhpOa
何言ってるのかよく分からんかったけど、

文字数 ⇒ 一致部分の最初の文字のインデックス
行数 ⇒ 一致部分の行の行番号

ってことかw

数え方の問題があるからだろうけど、Stringには一致箇所の数をカウントする
メソッドは存在しないんだね。
2019/09/19(木) 14:45:37.14ID:6IKimtYb0
検索一致箇所までの文字列を切り出して
改行でspritして要素数から行を得るというのはどうかな
折り返しは考慮されないけどね

あとtextboxなら折り返し込みで
文字インデックスから行に変換する
メソッドがあった気がする
678デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/19(木) 14:58:17.90ID:R2S0qhpOa
検索される文字列が巨大だった場合Splitはさすがに富豪的過ぎるでしょ。
RegexかString.IndexOfでベタにやった方が
2019/09/19(木) 15:15:08.89ID:VB98Oc2p0
文字数多いとsplitはパフォーマンス辛い可能性があるね
regexもそれなりに…
パーサー的なものなら頭から逐次処理するのが一番だったりするし
2019/09/19(木) 15:41:06.68ID:6IKimtYb0
ググったらreplaceを使ってlengthの差で求める方法があったけど
これも一時的にメモリ上で二重化されるから
巨大なログファイルとかだとあまりいい方法ではないな

IndexOfの検索結果を次の検索開始インデックスにしながら
カウントするのが一番楽で無駄がなさそうだ
2019/09/19(木) 21:16:22.29ID:sYHr9xpc0
自己解決
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")というようにディレクトリを追加すれば、そのフォルダを開いてくれます。
2019/09/20(金) 00:06:22.05ID:Z+Dr4fZe0
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が重複している情報を取得と排除したいんですがループでチェックするのは時間がかかりすぎるので
簡単で早く処理できる方法はないでしょうか?
2019/09/20(金) 00:15:35.18ID:JBznBYO/0
Parameter.Equals() をオーバーライドして
用意した HashSet<Parameter> foreach で Add() を呼ぶ
2019/09/20(金) 00:15:52.99ID:MWgaILTA0
>>682
個々の要素参照するんだからループするしか無いんじゃないの
あらかじめどこか他にデータ持っているのならともかく
簡単にというのなら参照したデータをList<T>に入れていけばList<T>.Containsでチェックできる
2019/09/20(金) 00:17:07.07ID:JBznBYO/0
なんか色々おかしかった

↓正
Equals() をオーバーライドして
用意した HashSet<Parameter> に対して foreach で Add() すればよい
2019/09/20(金) 00:20:11.39ID:H/0RNa6Fa
>>682
普通のListで「全要素について、別の要素と重複があるか」をチェックしようとしたらO(N^2)になるから
効率よくしたいならHashSetを使うといい
ただEquals()とGetHashCode()を適切に(今回の場合、setTime, Name, Ageだけで決まるように)実装する必要がある
2019/09/20(金) 00:21:51.81ID:JBznBYO/0
>>686
HashSet の重複判定って GetHashCode() 絡んでるのかね?
名前的には関係ありそうだけど
仕様が見付からない…
2019/09/20(金) 00:32:56.51ID:Z+Dr4fZe0
まだ試してないけどHashSetってことはsetTime, Name, Ageだけのチェックにはならないのかな
setTime, Name, AgeがDBのキーになる予定なので無理そうな気が
2019/09/20(金) 00:33:33.46ID:73yDKPmS0
Reference Source で実装みればええやん
GetHashCode と ICompare 指定しなければ Default の Equals の両方やね
2019/09/20(金) 00:34:05.25ID:H/0RNa6Fa
>>687
Microsoft Docs見てきたが明言はされてないのか……ただ
https://docs.microsoft.com/en-us/dotnet/api/system.object.gethashcode ではDictionaryなどで使われるとあって
https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.hashset-1 ではDictionaryのKeyアクセスと同様のハイパフォーマンス集合操作を提供、とあるから
HashSetで扱う型についてもGetHashCode()の実装は必要なはず
691デフォルトの名無しさん (アウアウウー Sa85-TrZH)
垢版 |
2019/09/20(金) 00:41:13.96ID:WJxc7oYHa
>>689
質問の感じから今現在自分で実装したものがあるんでしょ?それを載せたほうが微妙な解釈の違いに対しても最適解が出してもらえそうな気がするけど
2019/09/20(金) 00:57:02.51ID:JBznBYO/0
キーの重複は
GetHashCode() の一致 → Equals()
みたいだな

GetHashCode() は重複しにくいメンバの GetHashCode() で
Equals() で完全一致の判定をすれば大丈夫そう
2019/09/20(金) 00:58:18.71ID:Z+Dr4fZe0
あるサイトを参考にしてみたのが
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;
}
}
2019/09/20(金) 01:02:47.93ID:Z+Dr4fZe0
//データ追加
var ParameterList = new List<Parameter>();

//重複排除
ParameterDistinct qualityComparer = new ParameterDistinct();
IEnumerable<Parameter> ParameterLister = ParameterList.Distinct(qualityComparer);

でやってみたんだけど重複がでたんだけど何かまずいだろうか
参考にしたところはDatetimeは使っていなかったので駄目なのかな
2019/09/20(金) 01:09:28.14ID:73yDKPmS0
DateTime をつめるときに DateTime.Now とか使ってると ミリ秒で差がでてるかもしれない。
DateTime を == で比較すると 内部的には DateTime.Tick 同士で比較するから
2019/09/20(金) 01:21:43.10ID:Z+Dr4fZe0
なるほどDateTime.Nowは使っているので調べてみます。
ありがとうございました!
2019/09/20(金) 01:31:14.65ID:v9n6qqFa0
なんで単なる取得でメモリ使うんだよ
unsafeかなんか付けて昔ながらの方法でやるのが一番速い
2019/09/20(金) 01:35:53.41ID:JBznBYO/0
ライブラリ作ってるわけでもないのにunsafeとか論外なんだが

その上unsafe付けてやることが2重ループでの完全一致検索とかじゃ
どうせHashSetのパフォーマンスに大敗する
2019/09/20(金) 02:27:15.79ID:pTVI5tHY0
NGID:JBznBYO/0
2019/09/20(金) 11:53:09.00ID:URFVhEsV0
git使わずに、自宅のデスクトップ環境とノートPCのプロジェクトファイル類を同期させたいです。

現在Onedrive使ってますが、binやobj配下まで同期されるのが残念な感じ。
binやobjの出力先はWPFプロジェクトなら変更できましたが、ASP.NET coreプロジェクトでどう変更するのか不明

VSTSで上記を実現または他の方法あったりしますか?
ちなみに現在はVS pro サブスクリプションに入ってます
2019/09/20(金) 12:00:15.35ID:Ew/p9Snjp
Microsoftの開発ソフト使ってんならOneDrive使えるだろ?
2019/09/20(金) 12:02:00.53ID:Ew/p9Snjp
最後にcleanすりゃいいだけだから。
もしくは同期ドライブ直接はコンパイルしないとかな。
2019/09/20(金) 12:02:42.34ID:bfuJBtmYd
svnを使う
onedrive以外の場所で開発してonedriveフォルダに必要なファイルを同期ツールとかでローカルコピーするようにする

なんでonedriveはokでgitがngなのかがわからんと提示しづらい
704デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/20(金) 12:48:37.25ID:uLmjcKMSa
OneDriveって特定のフォルダだけ同期しない設定にできないのか

6,7年前にオンラインストレージが流行った時には
タダで大容量で高機能のがいっぱいあったのになんだか退化してるよねw
705デフォルトの名無しさん (ワッチョイ 4605-Mu6I)
垢版 |
2019/09/20(金) 12:56:56.83ID:uH7l3KIr0
labelの文字列の一部を太文字にしたり色を変えたりといった表現をしたいのですが
何か良い方法はないでしょうか?
コントロールではなくメインプログラムのほうで操作できるようにしたいです
labelと同じ見た目ならなんでもよいです
textboxの様な感じではなくlabelのような感じが目標です
2019/09/20(金) 13:13:16.41ID:WW0nVoDA0
のような感じと言われてもどういうのがNGでどういうのがOKなのかよく分からんが
手軽なのはRichTextBoxを使うことで
そうでなければPaintイベントで全部自前描画ということになる
2019/09/20(金) 14:28:02.26ID:9RWO75b+d
>>700
ちと面倒だけど、ブランチとか使えるのが便利だから、サーバ立てるまでOneDriveのフォルダ上にgitのリポジトリ作ってた事がある。
OneDrive内の任意のフォルダの中でgit init --bareするだけ。
したら、そのフォルダをremoteとして登録出来る。
あとは任意のタイミングでpush/pullするだけ。

作業フォルダをOneDrive内に置いて自動的に同期もやったけど、objとかが共有される問題よりも、同時に開いて悲惨なことになる事があったので、今はしてない。
(競合したら「もとのファイル名-端末名」ってファイルが大量にできる)
2019/09/20(金) 15:01:20.41ID:riKFjdTV0
ああ、確かにリポジトリをonedriveに入れるのが一番スマートかも
昔dropboxにsvnリポジトリ作ってたことあるわ
709デフォルトの名無しさん (ワッチョイ 6990-jgJV)
垢版 |
2019/09/20(金) 17:01:09.25ID:9F0x+J+E0
メモリ消費は税のようなもの
しょとくだけに
消費だけに
2019/09/20(金) 19:34:13.48ID:dvP1e2Mn0
環境はWindows formアプリです。
TableLayoutPanel と DataGridView の使い分け方がわかりません。
datasource property の有無だけ?
2019/09/20(金) 19:53:22.57ID:+tHFIfxx0
>>705
自分で描画するのはメソッド作るのも指定するのもめんどくさいよ
https://dobon.net/vb/dotnet/graphics/measurestring.html#section1
>>706の言う通りRichTextBoxをBorderStyle.Noneにして背景色を合わせた方が楽じゃないかな
どうしても文字以外を透過させたいとかならともかく
>>710
HTMLのテーブルとExcelの表が同じに見えるのならそうかもね
712デフォルトの名無しさん (ワッチョイ c245-Iqd1)
垢版 |
2019/09/21(土) 10:00:25.29ID:DmWWMvK20
コンソールアプリが作れればいいやと思ってpaizaでシコシコ勉強してますが他にどんなことすればいいですか?
目標は外部のファイルを読み込んでコンバートするアプリを作ることです。
2019/09/21(土) 10:08:45.30ID:ZhDsxJHf0
外部のファイルを読み込んでコンバートするアプリを作ればよいのでは?
そんなに難しくないよ
何をどうコンバートするかにはよるかもしれないけど
2019/09/21(土) 11:05:31.91ID:wLZyePcca
プログラミング未経験者です
すいません、ちょっと趣旨から外れるかもしれませんが質問です

電気(強電)、計測(コンビナートとかのプラント計装)の知識ってC#で活かせますか?

C#の求人や書籍を検索すると、電気回路の制御ソフトとか計測器制御とかがヒットするので気になって質問させていただきました
2019/09/21(土) 11:05:33.11ID:DmWWMvK20
SQLもどき文をパース?して出力したいです
716デフォルトの名無しさん (アウアウウー Sa85-TrZH)
垢版 |
2019/09/21(土) 11:42:35.85ID:uzyGV4kra
>>714
FAの制御系だったら測定器やPLCとの通信がメインになるからそれなりに知識あったほうがいいとは思うよ
2019/09/21(土) 12:00:01.02ID:wLZyePcca
>>716
ありがとうございますm(_ _)m
2019/09/21(土) 13:30:42.97ID:ox/L2PXG0
>>715
SQLの整形をしたいの?
SQLって方言が結構あるしパース(字句解析+構文解析)自体の難易度も初心者がやるものじゃ無いと思う
2019/09/21(土) 13:39:06.70ID:cHmpI1M9M
>>715
SQLのパーサーなんて出来合いのライブラリがいくらでもあるよ
自分でわざわざ使い物にならないゴミを作って時間をドブに捨てる必要はない
2019/09/21(土) 14:11:59.87ID:gZFDeRYs0
オライリーのlex & yacc がsqlのパースの
サンプルだったけど

C#は対応していないかと
721デフォルトの名無しさん (ワッチョイ ae2d-Z796)
垢版 |
2019/09/21(土) 14:57:58.99ID:8edEcM0R0
すまんが、スレッドを指定して実行ってできないもんなの?
指定できればロックが必要な箇所が減っていい気がするんだけど・・・・どうなんだろう
2019/09/21(土) 15:03:52.53ID:gZFDeRYs0
スレッド起動しないかWaitしておけば、
良いんじゃね
2019/09/21(土) 15:21:35.32ID:Ef6g+Zfma
>>721
Producer-Consumerパターンを使って特定スレッドでだけ処理するのはどう?
BlockingCollection<T>使うと楽に実装できるよ
2019/09/21(土) 15:59:40.26ID:3kDOCDXv0
Dllimortで呼び出す関数の引数にはジェネリックは使えないのでしょうか?
2019/09/21(土) 17:32:33.11ID:CRAyGleP0
使えない
726デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 17:41:38.79ID:dMKiDHPTa
>>724
どんな使い方を想定してるの?
っていうかそれ、呼び出されたアンマネージド関数側はどうしたらいいの?www
2019/09/21(土) 17:50:18.96ID:GoVsp8loa
>>726
.NETのジェネリックは実行時に特殊化されるから、技術的にはそんなに無茶な話ではないよ
2019/09/21(土) 17:57:47.91ID:rw4WtgZd0
まあどのみち今のところできないから、いんぽ関数自体はIntPtrで受け取って
Marshal.PtrToStructureとかでごにょごにょするジェネリック関数でラップする感じでやるしかないね
SystemParametersInfoとかでそういう欲求があること自体はわかる
2019/09/21(土) 17:59:11.73ID:ox/L2PXG0
>>727
それじゃ質問者に回答してやってくれ
2019/09/21(土) 18:12:58.46ID:GoVsp8loa
>>729
質問者を馬鹿にするほどには突飛な発想ではないということだよ
.NETのジェネリックがどのように実装されているかを知っていれば、できてもいいと考えてもおかしくはない
731デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 18:32:15.65ID:dMKiDHPTa
十分突飛だと思いますけどね。

これ、アンマネージドに限らない。
マネージドだろうが、他のアセンブリで既に定義されてる
非ジェネリックなstaticメソッドをジェネリック化したいと言ってるのと同じ。

だから、呼ばれた側は何すりゃいいんだよw
2019/09/21(土) 18:43:55.34ID:GoVsp8loa
>>731
CのAPIだと、サイズが同一の異なる型を一緒に扱ったり、条件に応じてポインタの指す型の解釈を変えたりとか珍しくないでしょ
733デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 18:44:55.69ID:dMKiDHPTa
>>732
そういうのは共用体とかオーバーロードで解決できるでしょ。
ジェネリックを使うって発想は意味不明だよ
2019/09/21(土) 18:46:58.39ID:3kDOCDXv0
>>726
具体的にはLPVOID引数で自己責任ながら参照型からref、outやintなどの値渡しまで色々な型のオーバーロードを作って実際にちゃんと機能しています
なので一々オーバーロードとそのラップだけで30行ほど使ってしまってる現状が無駄に思えてどうにか方法ないかなと
2019/09/21(土) 19:46:47.84ID:rw4WtgZd0
一例としてはこんな感じ

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
2019/09/21(土) 19:58:38.68ID:A1p2bytl0
c# で必殺技みたいなメソッドがあったのですが思い出せません。どなたかご存知ないでしょうか?
2019/09/21(土) 20:03:15.85ID:y68BphyG0
>>736
リフレクション?
2019/09/21(土) 22:34:09.60ID:rnFOOH9a0
>>736
privateメソッドを外部から無理矢理呼び出すやつ?
2019/09/21(土) 22:42:59.80ID:70YMyRx+a
リフレクションならDynamicInvoke()がなんともかっこいいメソッド名
>>736のはおそらくはデストラクタあたりを想定してるんじゃないかと思うけど
2019/09/21(土) 23:13:56.71ID:GoVsp8loa
DangerousAddRefもなかなか
2019/09/22(日) 01:11:49.71ID:YKAr5fZO0
>>736
オーバーライド!!
2019/09/22(日) 01:26:33.02ID:01VTDUEXM
オーバーロード!!
2019/09/22(日) 01:39:55.72ID:V8FjsYeid
>>736
ラムダ式!
2019/09/22(日) 07:51:48.39ID:Wx+hr3d10
>>718
>>719
さんきう
とある製品のRDBMSのSQLに独自の書き方やら関数やら記法やらが混じってるからなんとかしたかったんだけどライブラリとやらを使えばいけるのかな。
2019/09/22(日) 08:33:40.66ID:6LYYKR960
1) githubで"sql parser"と検索
2) C#で絞り込む
3) 上から順に試す
4) 好みのが見つかったら改造を試みる

少なくとも1から作るよりは圧倒的に楽だし勉強にもなるよ
2019/09/22(日) 09:28:54.26ID:p/RNYxc40
>>726
dllってことは既にasm化されてるんだから型なんて関係なく受け取ったもんを問答無用でバイナリとして処理するだけだろ
C#はそういうのをコーディング段階で防いでるだけであって
747デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/22(日) 12:11:14.62ID:PittLpUUa
>>746
〜だろ
馬鹿ほどぞんざいで偉そうな口調なのは法則なのかねwww
748デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/22(日) 12:16:38.76ID:PittLpUUa
少なくともC#のジェネリックはstringとbyte[]を透過的に扱ったり、
longをint2つと透過的に扱ったりするための仕組みじゃありませんwww

だからそういうのは共用体やオーバーロードを使うんだってw
2019/09/22(日) 12:28:14.42ID:GskCdwYSM
端的に答えとけばいいんだよ
余計な講釈を垂れるな
2019/09/22(日) 22:36:43.63ID:584djEVu0
BitmapをBitmapDataにしたいのですが、使用されたパラメータが有効ではありませんと言われてしまいます。
ファイルから読み込んだbitmapは変換できるのですが、このようにコード上で作ったbitmapはダメです。
何がいけないのでしょうか?

Bitmap trimBmp = baseBmp.Clone(rect, baseBmp.PixelFormat);
BitmapData bitData = trimBmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
2019/09/22(日) 22:44:27.94ID:6/LwH+kT0
rectで切り出した後、その切り出した後のビットマップから
さらにrectで一部分のロックしようとしてるけど大丈夫? 全面じゃない?
2019/09/22(日) 22:53:39.23ID:584djEVu0
>>751
baseBMPからrectで切り抜いてますが、trimBMPにとってはrectは全面だと思うのですがダメなのですかね?

でも
Bitmap bmp = new Bitmap(100,100)
みたいな素画像でもやっぱりLockBitsできないです
2019/09/22(日) 23:53:45.92ID:yl5BH+I+0
>>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できないです
できる。そっちもちゃんと引数の指定してみて
2019/09/23(月) 01:34:07.15ID:CAyWI0VB0
private Point CalcPopupLoction(Form launcher, Form popupForm) {}

ボタン押したときに上部に表示する モーダルな popup フォーム の位置を計算するメソッドを書きました。

ボタンが左の方にあると、親フォームの左枠をはみ出さないように、popupForm は左揃えで表示。
真ん中へんにあると中央揃え、右端ならボタンとpopupForm を右揃えで表示する感じです。

1つ目の引数の良い名前が思い付きません。
主にボタンを想定してる引数です。
launcher (発射台)はどうもしっくりきません。
parent や baseForm はなんかおかしいのでやめました。
755デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 03:14:26.31ID:QdBzCxoka
>>754
そもそもそんなメソッドいらんでしょ。

ポップアップがどこに表示されるべきかはボタンを持つFormが知っているんだから
そいつに聞く(そいつのプロパティーとして実装)のが一番
756デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 03:28:32.57ID:QdBzCxoka
あー、右に揃える場合もあるのね。
じゃあボタン持ってるFormに

void ShowModalPopup(Form popup)
みたいなメソッドを持たせればいい
2019/09/23(月) 03:42:05.85ID:ltbH9/U50
こういう使い回しが効きそうなのはいちいちフォームに実装しないで拡張メソッドにでもした方が
758デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 03:56:41.99ID:QdBzCxoka
本当はボタン持ってる方のFormに
interface IDialogOwner:IWin32Window
{
  HorizontalAlignment DialigHAlignment { get; }
  Rectangle Rectangle { get; }
}
みたいなのをかぶせて、Popupする方のFormでShowDialogをオーバーロードして
void ShowDialog(IDialogOwner owner)
みたいにするのがいいのかも。

酔っぱらってるんでよく分からなくなってきたw
759デフォルトの名無しさん (ワッチョイ a211-2BIS)
垢版 |
2019/09/23(月) 08:49:12.84ID:l2jPGLgc0
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");
}
2019/09/23(月) 08:58:35.82ID:ZRlL2jPD0
https://docs.microsoft.com/ja-jp/dotnet/api/system.threading.tasks.task?view=netframework-4.8#creating-and-executing-a-task
761デフォルトの名無しさん (アウウィフ FF85-9GzD)
垢版 |
2019/09/23(月) 12:17:14.67ID:3qdqqJ07F
bitmapinfo とか
dibsection とか
bitmapinfoheader とか
勉強してみたら
2019/09/23(月) 14:47:11.75ID:vpc5pW+6d
>>759
TaskCompletionSourceだっけ?うろ覚えですまんが、jsのPromiseオブジェクト的に使える。
2019/09/23(月) 15:20:09.58ID:LbTjUCX60
taskをstartしてないだけだから...
764デフォルトの名無しさん (ワッチョイ c135-2BIS)
垢版 |
2019/09/23(月) 15:46:49.67ID:s6/Kehza0
>>763
ありがとうございます!
2019/09/23(月) 18:09:27.70ID:7f5aVpAAd
どういたしまして!
2019/09/23(月) 19:11:24.16ID:24/7TZbh0
ID:QdBzCxoka
何の話してんのこの人
>>754
変数名が思いつかないとかはこのスレじゃなく
クラス名・変数名に迷ったら書き込むスレ。Part28 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1494147712/
767デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 22:40:56.88ID:6ZQTgZjHa
>>766
交通整理バカw
設計が間違ってるのに名前付けて何の意味がある
2019/09/23(月) 22:48:38.96ID:CAyWI0VB0
>>766
レスありがとうございます。
そんなスレあるの知らなかった。
2019/09/23(月) 23:35:14.83ID:CAyWI0VB0
>>754
private Point CalcPopupLoction(Form launcher, Form popupForm) {}

上記は下部のボタンの位置に応じて、大きさのことなるpopupForm の表示位置を計算するメソッド

exportButton_Click 内で、
ShowDialog(); で表示する popupForm に戻り値を設定

https://i.imgur.com/ggjo4td.jpg
2019/09/24(火) 00:01:07.45ID:OEzHH54a0
>>754
・Loctionて何
・ボタンの置いてあるオーナーウィンドウと対象のボタンを引数に取った方がいいと思う
・計算だけなら全部Rectangleでいいんじゃないの
Rectangle CalcPopupLocation(Rectangle Owner, Rectangle TargetButton, Rectangle Popup)
771デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/24(火) 00:03:53.21ID:ftn8dtDua
>>769
だからさ、そのメソッドをどこに書くおつもり?

ポップアップを左右どちらに寄せるべきかを知ってるのは特定のFormだけのはずなのに
その例のllauncherの型がFormってのは変じゃないか?

そもそも何で「左右どちらに寄せるべきかを知ってる」奴のメソッドとして実装しないの?
それなら引数で渡す必要ないと思うんだけど。
772デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/24(火) 00:09:30.85ID:ftn8dtDua
>>770
必要な情報は

(1) 左右どちらに揃えるか?(HorizontalAlignment)
(2) 揃える位置のx座標

だけだね
2019/09/24(火) 11:39:03.69ID:vbZsX/Wo0
書き込みは、人を憎んでコードを憎まずのこころで行いましょう。

たとえクソコードであっても悪いのは書いた人だけです。
コードやプログラミング言語に罪は一切ありません。
コードの悪口はやめましょう。
クソコードの修正と言わず、リファクタリングといえばいいのです。

大量殺人犯や c# プログラマーの醜い心はリファクタリング不可能ですが、コードのリファクタリングはカンタンですよ。

https://www.google.co.jp/amp/s/anond.hatelabo.jp/touch/20180319181104%3fmode=amp
2019/09/24(火) 12:11:17.28ID:yrtqWHxIM
性格の悪さもリファクタリングしてくれ
775デフォルトの名無しさん (エムゾネ FF22-9GzD)
垢版 |
2019/09/24(火) 14:58:01.43ID:oiN+60axF
性格はコードに滲み出るよ
2019/09/24(火) 23:29:02.86ID:OoYPx0Tk0
性格は分からないけど姿勢みたいなものは見えると思ってる
こんなコピペばかりして少しはおかしいと思わないのかな?とかこんな古い書き方して言語の文法ざっとでもいいから一通り見たのかな?とか
いいコードを書こうとしてる人とそうでない人の差ってすごくよく分かる。本当に能力無くて頑張って頑張ってるのにひどいって場合もきっとあるんだろうけど
777デフォルトの名無しさん (ワッチョイ 4690-jgJV)
垢版 |
2019/09/24(火) 23:44:57.44ID:3clb0+hp0
ようわからんけど動いてるからヨシ!
2019/09/25(水) 07:36:43.68ID:apbfD+2I0
式木がイケてるらしいですが使いどころが解りません
プロの皆さんはどこで使ってますか?
2019/09/25(水) 10:16:37.93ID:HV92OfVjM
>>778
使わない
高度なフレームワークを作るための機能であり、ドカタグラマには全く必要ないから忘れていいよ
2019/09/25(水) 22:57:19.53ID:5YRgoX3y0
>人を憎んでコードを憎まず

逆じゃないんかおい
2019/09/25(水) 23:01:24.46ID:1MbrNFaz0
自分より給料貰ってる先輩(笑)が
クソコードを産み落としていた場合は人もコードも憎む
というか蔑む
2019/09/25(水) 23:16:09.44ID:5YRgoX3y0
何をもってくそコードと言ってるのか
2019/09/25(水) 23:38:23.64ID:1MbrNFaz0
何を以ってクソコードかは難しいところだが具体例なら無数に挙げられるぞ

switchを使わず延々とif-else if分岐
if(flag) return ture; return false;
一行違うだけのメソッド大量生成
マジックナンバーだらけ
コレクションはほとんどList
かと思えば特にライブラリに必要とされているわけでもないobject[]
もちろんパターンマッチングなんて概念は存在しない
out代わりにrefを使う
boolではなくintをフラグとして使う
クラス内のあらゆる場所から明示されず書き換えられるフィールド
どう見ても親子関係にない継承
メソッド1個300行以上
これがさぞ大変な処理かと思えばリファクタリングしたら40行で書けた
1行に300文字以上
リソースでもFormsでもない普通のクラスが4000行
2019/09/25(水) 23:54:44.99ID:NtFNmlTfp
>>778
ドカタだけどlinqのwhereメソッドの引数を動的に生成するときに使った

ここ参考になるよ
https://www.atmarkit.co.jp/fdotnet/dotnettips/986dynamiclinq/dynamiclinq.html
2019/09/26(木) 00:03:29.50ID:68XB546j0
>>783
ぜんぜん許容範囲だな!
その程度でくそ呼ばわりされたらたまらん
2019/09/26(木) 00:08:48.21ID:QoSQSwcY0
>>783
>>switchを使わず延々とif-else if分岐
>>マジックナンバーだらけ
>>クラス内のあらゆる場所から明示されず書き換えられるフィールド
>>メソッド1個300行以上
>>リソースでもFormsでもない普通のクラスが4000行
今直面してるのにまさに当てはまっててもう

>>コレクションはほとんどList
こっちはListどころか配列しか使わないんだぜ。もう書き方が完全にC
2019/09/26(木) 00:09:16.61ID:NU/jFtK40
メソッド以外はどれも影響は大きくないし
多少大きくてもテストできればなんとかなる
ちょっとした文化の違い程度の話だ
2019/09/26(木) 00:10:34.86ID:NU/jFtK40
初心者が一見してくそ呼ばわりするコードはたぶんくそじゃない
わかるから細かい粗が目に付く

普遍的恐怖を知るべきだ



ぐちゃぐちゃな循環参照
テストできないメソッド

う そ っ ぱ ち の 名 前
2019/09/26(木) 00:15:27.94ID:ThQ6mTfg0
突然現れるlinqの長々としたクエリ式
せてめメソッド式にしてくれ
2019/09/26(木) 00:18:57.61ID:NU/jFtK40
しかしC#いつのまにやらパターンマッチまで入ってたんか…
2019/09/26(木) 00:28:52.23ID:ZFJdpCv/0
sqlを全て文字列結合で作ってるうえに500行以上あったときは後輩に丸投げした
2019/09/26(木) 03:16:32.66ID:wZcpOMsUd
>>780
バグやコードを憎んで、人を憎まず。

こんなこと言ってるプログラマーは意識高い系の偽善者のクズ。
2019/09/26(木) 11:30:46.50ID:Av/VHz3vp
あいつに任せた俺の責任だからって最初から頭数に入れていないから憎みもしない。必要なら全面書き直しもいとわない。
2019/09/26(木) 20:59:42.99ID:7bLC7yvk0
なんでListがいかんのか?
2019/09/26(木) 21:12:02.17ID:aLxxu1ok0
ビットで判定とるのがいかんのか?
2019/09/26(木) 21:18:55.30ID:fUfQlO4W0
7f63-aXvPからクソグラマーの臭いがする
2019/09/26(木) 21:21:22.68ID:fUfQlO4W0
>>794
時と場合を考えて最適なコレクションを検討しろ

>>795
特別な理由がないなら褒められないな
2019/09/26(木) 21:37:16.13ID:aLxxu1ok0
ZDDをboolの配列で評価するの?orz
2019/09/26(木) 21:40:05.70ID:fUfQlO4W0
>>798
特別な理由がないならと言ってるだろうが
2019/09/26(木) 22:03:13.49ID:QoSQSwcY0
windows formsの書き方についてなんですけど
メイン画面にタブがいっぱいあってそれを切り替えて……みたいなアプリなんです
んで中身見たらFormクラスが1万行オーバーで。画面一つだからって何もかも突っ込んでる感じなんです
画面というかフォーム一つで1クラスみたいなのが通常の書き方なんでしょうか
2019/09/26(木) 22:10:14.52ID:Av/VHz3vp
普通はブロックに分ける。
2019/09/26(木) 22:13:41.16ID:fJKX2zi80
>>800
タブ毎にユーザーコントロールを作ればスッキリはすると思うよ
2019/09/26(木) 22:23:35.32ID:lGqB6oAG0
>>800
「通常」はどうか知らないけど例えば
MDIアプリケーションを作成する
https://dobon.net/vb/dotnet/form/mdiapplication.html
こういう作り方もある
あと一つのフォームに普通のコードはともかくコントロール(InitializeComponentのなか)を多く詰め込みすぎると起動に時間がかかるようになる
現状で問題ないのならそこは気にすることは無いが
2019/09/26(木) 22:53:44.29ID:d7SzDWCz0
>>800
parcial class でタブごとにファイルわける。
2019/09/26(木) 23:38:48.19ID:QoSQSwcY0
なるほど参考になりました。
今思えば既にタブごとに部分クラスわけしてファイル別になってたような気がしないでもない……となると実質一クラス10万行か。笑えない
2019/09/27(金) 06:43:42.33ID:N2euUEC0M
>>800
1000行超える時点でオブジェクト指向できてない証拠
2019/09/27(金) 08:33:35.75ID:1dreLMG90
フォーム以外で使わない処理を
わざわざ外部のファイルやクラスに作る必要なんてある?
2019/09/27(金) 08:42:46.73ID:eAUqf5T9a
>>807
それで可読性が高まるならやる意味はある
2019/09/27(金) 09:06:13.84ID:ikgA/i06d
C#は1ファイルに全部書けるので必要ないです
2019/09/27(金) 10:07:45.04ID:NnPkuVhE0
再利用しないならそれでいいんじゃね?
2019/09/27(金) 22:47:27.06ID:uik+OEWH0
お前を含めた全人類が未来永劫そのコードに手を加えない保証があるなら好きにすればいい
2019/09/27(金) 23:28:58.48ID:MmWjZkvh0
ググったらタブ大量にあるような場合>>802がクラス分割のためのメジャーな手法なのね
2019/09/28(土) 08:43:54.27ID:uN9Z5b+x0
游ゴシックの英数文字をMeasureStringで取得した矩形を使ってDrawStringすると高さ不足で表示されない

矩形を使わなきゃ表示はできるから良いけどもやもやする
2019/09/28(土) 10:37:47.08ID:elJniuwU0
フォント周りおかしいのはMS伝統では
ないだろうか?

815デフォルトの名無しさん (アウアウウー Sa8b-dvEi)
垢版 |
2019/09/28(土) 14:09:54.66ID:51nJyp6ja
そんなざっくりした話じゃ、どうせお前自身のコードのバグだろって
反応しか返ってこないと思うw
2019/09/29(日) 01:52:26.51ID:sVRG+wNI0
インターフェイスと抽象クラスってどう使い分ければ良いのでしょう?

ググってもよくわかりません。
2019/09/29(日) 02:47:00.08ID:TNnn17Gh0
インターフェースなら継承関係のない複数のクラスのように
振る舞うことができる
2019/09/29(日) 02:49:22.44ID:HU0MDVmv0
大雑把言えば
プロパティとフィールド(値)を保持するのがクラス
クラスのメソッド(挙動)を公開するのがインターフェイス
2019/09/29(日) 02:54:07.57ID:TNnn17Gh0
それが抽象クラスとなにが違うのだ?と彼は聞いているわけで
2019/09/29(日) 03:01:23.20ID:HU0MDVmv0
インターフェイスは値を持たないし
原則として挙動の実装も持たせない
821デフォルトの名無しさん (アウアウウー Sa8b-dvEi)
垢版 |
2019/09/29(日) 03:20:49.12ID:m1n6jIU5a
>>816
使い分けで悩む必要はないと思うよ。
インターフェイスで目的が達成できるならあえて抽象クラスを使う理由はないのだから。

たぶん使い分けが分からないのではなく、インターフェイスの使いどころが分からないだけじゃないのか。
よくわからなくてもとにかく実際コードを書いて使ってみることが重要。
別に難しい話じゃないので使ってるうちに自ずと分かる。たぶん
2019/09/29(日) 03:35:49.46ID:TNnn17Gh0
多重継承的なことがしたくなったらインターフェースを使う
くらいな感じでいいのかもね
2019/09/29(日) 07:08:46.93ID:5VaVy3IA0
私もよくわからないんですが、インターフェースって実装内容は問わないけどこの名称のメソッドは用意しなさいよってコトですかね?
インターフェースでメソッドを定義しても、継承したクラスがそのメソッド名に合ってない実装をしてしまったらと考えるとインターフェースのメリットがイマイチピンときません
2019/09/29(日) 07:26:53.36ID:ehZkSMIn0
疎結合
2019/09/29(日) 08:56:25.44ID:qdFsd7WD0
>>823
継承したクラスで変にオーバーライドされたら…
なんて気にしたら何も書けなくなるよw
それはオーバーライドした奴の責任だから気にしてもしょうがない
2019/09/29(日) 09:00:39.96ID:TNnn17Gh0
それって抽象メソッドでも同じ事じゃないの
2019/09/29(日) 11:47:55.74ID:YvnTsZym0
多態で使うんだよ
用意しなさいってのは発想が逆で、インターフェースに定義されているプロパティなりメソッドなりが実装されていることが保障されていると考える
実際の実装は気にせずに呼ぶ側はインターフェースのメソッドを呼べばいい
2019/09/29(日) 11:59:54.10ID:J9ITXYeqp
抽象クラスは重複の排除で使う、インターフェイスはテストする時の視点で必要

クラスAがクラスBの機能を利用する時に
クラスAはインターフェイスに対して実装しとけば
クラスBの変更に影響を受けないし、
テストする時にクラスBの代わりを作るのがインターフェイス部分だけになる
これがもしクラスAがクラスBの抽象クラスに対して実装すると、
クラスAをテストするときに抽象クラスの不要な部分まで要求されてしまう

また複数人開発においてもインターフェイスを利用すれば各個人が独立に作業しやすくなる
829デフォルトの名無しさん (アウウィフ FF8b-yXpG)
垢版 |
2019/09/29(日) 12:01:49.30ID:3s0zt66kF
呼んだはずのメソッドが(インターフェースでは要求されてるのに)実装されてなかったら
コンパイルエラーじゃなくて実行時に例外吐くか
unknownmethod()みたいな呼び方してくれると便利
2019/09/29(日) 12:05:37.87ID:INBbqatbr
不便だろ
2019/09/29(日) 12:07:56.33ID:wmQ9rxKs0
クラスに由来しない振る舞いを定義するのがインターフェイスとも言えるね。

良く例示される「動物」クラスで考えると。
・「動物」は動くのだから「移動」メソッドに必然性がある
・だけど「移動」するのは動物だけではない
・いま「移動」と言うメソッドに着目して操作を行いたいとする
・「移動」は動物でも自動車でもロボットでも行う
・でも自動車もロボットも動物ではないのでいからそのメソッドの由来を「動物」クラスに求めるわけにはいかない
・加えて、動物や自動車やロボットに直系する(基底)クラスもない
・故に「移動」メソッドの由来を「動物」クラスにではなく「移動」インターフェイスに求めてみる
・・・的な。
2019/09/29(日) 12:08:06.40ID:INBbqatbr
実行時に例外吐くのはめちゃくちゃ恥ずかしい

コード書いたやつはバカですと言う証明
私はデバッグもできない馬鹿ですで表明してるようなもの
2019/09/29(日) 12:13:32.63ID:INBbqatbr
コンパイル時にエラー吐くならそこでデバッグできる

実行時エラーなら全ての場合でエラーがないことを実際に確認しなければならない

どちらが便利かわかるだろ
2019/09/29(日) 19:29:34.79ID:TNnn17Gh0
>>831
いい例えだね
俺も使わせてもらうわ
2019/09/29(日) 20:03:13.25ID:sVRG+wNI0
先日、マンガ村の運営者が著作権法違反の容疑で逮捕された。

c# プログラマもマンガ村と同様の共有システムgit等を利用し、マンガやソースをインターネットを通して共有している。
github など分散型のバージョン管理システムを利用している c#プログラマはマンガ村の管理者と同じ位置にいるといえる。単なる利用者ではない。

c# プログラマはマンガ村管理者と同一人物といえるので、著作権法違反の共同正犯として刑務所にぶち込むべき。
2019/09/29(日) 22:53:02.75ID:1CaVkali0
c#のインターフェイスにはプロパティも宣言できるよね
あれは実質的にはフィールドと同じ様な感覚で使えてしまう
2019/09/29(日) 23:37:43.33ID:uMWzDoEma
だって>>831のような解釈は時代遅れだし特にC#(というかMS系)では一般的ではないからな
今時は「動物」という一般的実在だろうが「移動できる」という抽象的性質だろうが区別せず、
実装を限定したくない場合は原則常にインターフェイスを使うのが一般的だ
特にMSの場合は顕著で、ほぼ全クラスの全メソッドをインターフェイスに定義するというスタイルを取ることが多いし、またそれを推奨してもいる
838デフォルトの名無しさん (アウアウウー Sa8b-dvEi)
垢版 |
2019/09/29(日) 23:56:27.42ID:8QPFQcOxa
ほんとかよそれwwwww
2019/09/29(日) 23:59:46.39ID:k4CvVXqN0
>>837
初心者スレで珍妙な独自理論を一般的だなんて教えるのはやめれ
2019/09/30(月) 00:22:33.73ID:LVz3OUV70
今年始めた初心者だが
クラスが大カテゴリ
メソッドが小カテゴリ
インターフェースが小カテゴリらの存在を保証する中カテゴリ
このくらいの認識しかなかったわ
2019/09/30(月) 00:32:45.02ID:C9eDYcBn0
宣教師と見た
次にスクリプト言語を薦めて来るぞ
2019/09/30(月) 00:57:12.69ID:PJtB8DfJ0
831 だけど。

複数のクラスインスタンスの動的読み込みとか始めるとそんな感じになることもあるよ。
プラグインとかの識別に便利だし。
そうだとしても、たぶん 831 の1行目と矛盾してないでしょ。

ただ初心者相手の説明にこんなこと言いだしたら収拾がつかなくなるし、
全メソッドをってのは、まあ頑張ってな、と返すしかないけど。
843デフォルトの名無しさん (ワッチョイ 7f2d-Jn7s)
垢版 |
2019/09/30(月) 01:48:44.79ID:dOfJdIlZ0
すまんが、エラーメッセージにあるカッコ内の行番号らしきものってさあ
片方は間違ってる行っぽいけど、もう片方は一体何なんだぜ?
2019/09/30(月) 02:02:42.92ID:zBUNKmmLa
>>843
その行の何文字目かって意味
例えばファイル先頭に「int a = "";」と書いたら(1,5,1,6)でエラーが出るけど
これは「1行目5文字目〜1行目6文字目」の箇所でエラーになっていることを表している
845デフォルトの名無しさん (ワッチョイ 7f2d-Jn7s)
垢版 |
2019/09/30(月) 02:09:52.87ID:dOfJdIlZ0
>>844
ありがとう!何文字目かなんて全然わかんなかったよ
2019/09/30(月) 08:08:24.00ID:fD1lXHN30
質問いいですか?
2019/09/30(月) 08:10:26.75ID:ws0x1Tjj0
>>846
駄目です
2019/09/30(月) 08:17:51.94ID:nNBu0V63d
>>847
その返しはこのスレではいかんだろ(笑)
2019/09/30(月) 08:41:05.60ID:bmAzH1750
トイレ行ってきていいですか?
2019/09/30(月) 08:55:42.37ID:BmNMZ9TsM
もう居るだろう
2019/09/30(月) 09:29:49.98ID:fD1lXHN30
では質問しますね
Timerコンポーネントで
Timer1.Interval = 5000;とすると、プログラム起動後5秒後に初めてTimer1_Tickが
実行されますよね、これを起動時に1度実行したいのですがどうしたらいのでしょうか

Form1_Loadに書けばいいような気がしますが引数がわからない
2019/09/30(月) 09:31:40.04ID:Q4pocwaT0
忘れたけどTimerってTimers.TimerもThreading.Timerも大体どんな種類の奴でも最初のディレイタイム指定できなかったっけ?
2019/09/30(月) 09:58:04.89ID:fD1lXHN30
>>852
レスサンクスです
Delayでぐぐってみましたが、プログラムを遅延させるほうのDelayばかりヒットして
なかなか見つかりません、Timerのプロパティにそういうなのがあればいいんですが
2019/09/30(月) 10:05:34.65ID:g7w6SBZq0
>>853
処理を関数化しておいて、コンストラクタから呼んだらいいんじゃね?
別にタイマーから呼ばなくてもいい
2019/09/30(月) 10:13:21.52ID:e45pyL0lM
>>851
最初100で、中で則5000書き換えじゃあかんかったっけ
2019/09/30(月) 10:40:02.13ID:fD1lXHN30
>>854
サンクスです
Timer1_Tickの中の処理をゴソっと別にうつすんですか、確かにうまくいきそうですね

>>855
さんくすです
Timer1.Interval = 100;からTimer1.Interval = 5000;に変更ですか
これもうまくいきそうですね、厳密な秒数は必要じゃないですし
857デフォルトの名無しさん (アウアウウー Sa8b-dvEi)
垢版 |
2019/09/30(月) 10:47:03.32ID:ZcJV4ZEKa
>>851
どんな方法使ってもいいけど後で読んだ時に何をやってるか
分かりやすいのが一番だね

public Form1()
{
  InitializeComponent();
  Form1.Load += (sender, e) => OnEvery5Seconds();
  Timer1.Tick += (sender, e) => OnEvery5Seconds();
}

void OnEvery5Seconds()
{
.....
}

こうやった場合、FormのLoadイベントより前にOnEvery5Secondsが呼ばれる可能性が
あることは注意する必要がある。(実際にはないと思うけど)
2019/09/30(月) 11:16:30.25ID:fD1lXHN30
>>857
れすさんくすです
なるほど、こんな書き方もできるのですね、うまくつかえばすっきりまとまりそうです
2019/09/30(月) 23:02:09.82ID:S0uOX3sP0
>>852
流れから推測するとたぶんWindows.Forms.Timerクラスだね
860デフォルトの名無しさん (ワッチョイ 7f2d-Jn7s)
垢版 |
2019/10/02(水) 01:49:10.77ID:4PgWnh+40
非同期メソッドでちょっとだけ同期処理するのにはどうすれはいいのですか?

async Task ABCasync(){
ABCasyncの呼び出し元には、終わるまで待っていてもらいたい処理();
//ここでtaskで呼び出し元に何かを返せたりするのかしら?
ABCasyncの呼び出し元には、待っていてもらう必要のない処理();
}
2019/10/02(水) 02:14:39.18ID:mDEdylW50
強引に実装することは可能だがメソッド分割すべき
2019/10/02(水) 07:28:12.15ID:YugGu4Uj0
クラスは知識
メソッドは機能
という認識は事のほか難しいんけ?
2019/10/02(水) 08:07:26.42ID:Vm3TcWW10
>>862
そういう一般的でもない訳のわからない解釈を出されても、普通の人には理解できないかおかしな理解のまま突き進むことになるだろう
2019/10/02(水) 08:15:53.12ID:gR9x9lAq0
クラスは学校とかのクラスって認識でいい
2019/10/02(水) 11:07:45.90ID:9X+f8gXkr
ゲームのクラスの方がわかりやすい気がする

戦士 魔法使い 僧侶 盗賊

それぞれできることが違う
2019/10/02(水) 11:18:19.95ID:VgxhRvTXp
あはは、まあ、学校のクラスだと対抗戦が出来るくらいに似たり寄ったりだから意味が分からないよな。
2019/10/02(水) 11:59:15.15ID:8UOZigmra
逆に、同一のクラスの異なるインスタンスなんてのもできないしね。
868デフォルトの名無しさん (ブーイモ MM0b-upKm)
垢版 |
2019/10/02(水) 12:12:09.33ID:VOEDuxVKM
>>865
じゃぁ男女別は?
どっちのクラスが上位なの?
それとも同格で、男戦士 女戦士ってなるの?

半魚人タイプとか4足系の戦士は?
2019/10/02(水) 12:26:49.61ID:9X+f8gXkr
出来ることが変わらないなら基本変えなくていいよ
設計次第だけど

質問の内容の男戦士と女戦士で何が違うのかはっきりしない
力などの属性値(プロパティ)だけが違うなら分ける必要はないわな
半漁人でも4足系の戦士でも数値しかかわらないなら同じ

コードが共通になるなら基本的に分けなくてもいい
2019/10/02(水) 19:59:53.93ID:dZRRj/1Z0
強引に何かに例えるよりコード書いてみた方がいいよ
2019/10/02(水) 20:20:25.32ID:IV023jBj0
C#はじめて最初の日に読み飛ばすところで議論しても不毛だよな
>>870に賛成
2019/10/03(木) 00:57:21.26ID:z1GHd6rla
質問です
工場とかインフラの制御ソフトモドキを成果物としてWindowsアプリケーションの形式でC#で作りたいんですが、この2冊終わった後にWindowsアプリケーション開発の本買うなら何が良いですか?
また、本が時間の無駄だとしたらどこのサイトを参照すれば良いですか?
上記の件よろしくお願いしますm(_ _)m

1冊目 なるほどなっとくC#入門
2冊目 C#プログラミングのイディオム/定石&パターン
2019/10/03(木) 01:02:05.17ID:t45ZyD0e0
そりゃ一番はMicrosoftのチュートリアルでしょ
https://docs.microsoft.com/ja-jp/visualstudio/ide/step-1-create-a-windows-forms-application-project?view=vs-2019
2019/10/03(木) 01:16:35.63ID:z1GHd6rla
>>873
ありがとうございますm(_ _)m
875デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/03(木) 01:19:35.07ID:pRlPv1jza
>>872
FormならGUIの作り方は必用なことをググって調べながら実際に作ってみるのが一番。
本は1冊以上は読むだけたぶん時間の無駄。

何かを制御するなら、それが大企業の製品で.NET用のライブラリが用意されているのでない限り
たぶんアンマネージドの知識が必要になる。
これは多分本はないので自分でググって調べる

あと多分非同期処理は必須。
最初.NET1.x時代の生のThreadとか使う記事に軽く目を通して、
その後は今時のTPLや非同期メソッドの記事を読めばいい。
本もあるけどたぶんweb上の記事で十分
2019/10/03(木) 01:26:24.07ID:wBmuAStK0
非同期メソッドの実行自体は慣れたけど
win10のアップデート強制再起動時に
非同期処理中のタスクをきちんと終了させる方法がわからん

突然書き込み中のファイルがぶっ壊れそうで怖いわ
2019/10/03(木) 01:35:18.06ID:z1GHd6rla
>>875
ありがとうございますm(_ _)m
2019/10/03(木) 01:39:57.58ID:dygVDi5Yd
>>875
工場の制御ってRS-232CとかPLCとかGPIBとかやろ
別にアンマネージド必要ないだろ
879デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/03(木) 01:45:45.89ID:pRlPv1jza
>>878
そうかもしれないけど拡張ボードの型式でライブラリはアンマネージドdllだけかもしれない。
USB接続でアンマネージドdllの可能性もある
何とも言えない
2019/10/03(木) 15:11:12.65ID:xDvwVpv4p
マネージドなドライバーが無いなら使わないって選択をだな。
2019/10/03(木) 18:33:07.86ID:65+5RZIm0
UI操作とawaitを使った非同期メソッドをまとめたasyncメソッドを別スレッドから呼び出すにはどうすればいいですか?
2019/10/03(木) 18:36:08.92ID:XDm3DYNpd
>>881
??何が聞きたいの?
2019/10/03(木) 18:42:35.24ID:65+5RZIm0
>>882
すみませんでした。
例えばこういう感じのメソッドを別スレッドから呼び出す方法を教えてください。

async Task DoSome()
{
label1.Text="処理中...";
await DoLong();
label1.Text="完了";
}
2019/10/03(木) 20:27:59.44ID:AKImZpfb0
正直設計を考え直した方がいいけど
メインスレッドで動作してる間に
TaskScheduler.FromCurrentSynchronizationContext()
でTaskScheduler確保しておいて、その"別スレッド"内で
new Task(() => DoSome()).RunSynchronously(taskScheduler)
する
2019/10/03(木) 20:48:28.97ID:Cd3mzBuJ0
こうじゃダメなの?
Invoke((MethodInvoker)(async () =>DoSome()));
2019/10/03(木) 22:23:35.99ID:Y5r0apvPr
呪文化しただけにも見える
2019/10/04(金) 00:31:32.74ID:hyuh0V300
メソッド側を修正する必要があるけど、
こういうことでは?

別スレッドからのUI操作
https://qiita.com/mounntainn/items/8a2b4f1cf47bd02657f3
888デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/04(金) 01:26:24.02ID:oVLixzTMa
>>883
やっぱりそういうのは非UIスレッドからも呼び出せるようにする、ではなく、
逆に普通にUIスレッド専用のメソッドとして提供して、
もし必要ならXMLコメントとかで「UIスレッド以外からの呼び出し禁止」って
明示するのが筋なような気がするw
2019/10/04(金) 09:42:07.42ID:7JHQ1IR60
>>884
>>888
filesystemwatcherのハンドラから呼び出すと別スレッドからの呼び出し扱いになってしまいます。
2019/10/04(金) 09:50:12.44ID:K3mQ1Iatp
まあその用途ならやっぱコントロールのInvokeの中で呼べばいいだけの話しだな
DoLongの中でさらに入り組んでるとデッドロックしそうだけど
891デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/04(金) 14:31:48.61ID:RxmXvWZXa
こんなの考えてみたが、あんまり便利でもないな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();  
}
2019/10/04(金) 15:21:51.76ID:5G6hsRzp0
FileSystemWatcherはSynchronizingObject持ってんじゃん
設定しとけば勝手にBeginInvokeでイベントハンドラ呼んでくれるよ
2019/10/05(土) 10:15:38.99ID:hjSAU91p0
質問なんですが
設定ってどこにどうやって保存してますか?
.configが今ならベストなんでしょうが、保存先が
C:\Documents and Settings\UserName\Local Settings\Application Data\
になり、.iniのように、アプリをコピーで2つの設定が使えるようになりません

.configはファイルの場所が遠くて変更しにくい、iniは古くてC#で扱いにくい
どうしてますか?
2019/10/05(土) 10:23:45.47ID:BObIlSOA0
>>893
インストールするアプリはユーザーデータフォルダのどっかに保存しないと駄目じゃん
どこでも置けるやつはexeと同じ階層に設定ファイルあったほうが使いやすいじゃん
ってだけしか気にしたことない
2019/10/05(土) 10:30:58.10ID:hjSAU91p0
>>894
れすさんくすです
確かにそのとおりだとおもいます

インストーラーではなく、ZIPとかで配布で、ちいさなアプリで、主にシングルユーザーで
ってなると.iniになるんでしょうか?
2019/10/05(土) 10:31:02.26ID:elsuYLim0
>>893
設定を保存するクラスを作って、xamlかjsonにシリアライズ
アプリのコピーで使い分けるなら、保存場所はアプリのexeと同じフォルダー
2019/10/05(土) 10:34:16.80ID:BObIlSOA0
>>896
xmlとjsonなんて編集できるツールあるの?
パンピーにインデント壊さないでねなんて無理よ
2019/10/05(土) 10:43:34.43ID:elsuYLim0
>>897
元の質問に設定ファイルを手動で編集したいなんて書いてないが
899デフォルトの名無しさん (ワッチョイ b67c-MsYi)
垢版 |
2019/10/05(土) 10:47:20.84ID:xk/GxZ7j0
jsonもxmlもインデント関係ないから自由にさせろ
強制したいならyaml使え
2019/10/05(土) 12:25:09.61ID:8Jk2Tveb0
>>897
インデントわろた
2019/10/05(土) 12:42:35.73ID:sqkLDT76d
>>897
インデントwwww
2019/10/05(土) 15:47:01.45ID:BObIlSOA0
インデントっていうかカッコの対応?
でもその一点でxmlとjsonっておよびじゃ無くない?
これらを使うなら設定ツールが必要になると思う
2019/10/05(土) 16:03:44.47ID:8Jk2Tveb0
よく出てこれたな
2019/10/05(土) 16:30:09.26ID:BObIlSOA0
>>903
何度でも言えるよ
xmlとjsonは設定ツールがないと使えないゴミ
2019/10/05(土) 16:44:26.62ID:LN1PiSPK0
設定画面ぐらい作れよ
2019/10/05(土) 17:02:10.69ID:8Jk2Tveb0
>>904
よおインデント
2019/10/05(土) 17:07:55.98ID:hjSAU91p0
>>896
れすさんくす
結構ハードなことやってるんだね、一度クラス作ったら一緒か
2019/10/05(土) 17:16:21.03ID:q6cvuv6U0
>>906
よおインシデント
2019/10/05(土) 17:17:03.15ID:JDr+zhso0
>>907
今どきならjson.netを使うだけ
ググればわかるけど呆れるほどかんたんだよ
2019/10/05(土) 18:01:24.61ID:vEDwovccd
インポテンツ
2019/10/05(土) 18:06:22.26ID:PVJcrjgV0
初心者スレやからね
2019/10/05(土) 19:34:08.92ID:hjSAU91p0
>>909
さんくす、ライブラリが公開されてるのか
みんなこれ使ってるの?
2019/10/05(土) 19:36:45.83ID:1kVSHcIG0
令和の時代の新規プロジェクトでiniファイルはありえんだろw
2019/10/05(土) 19:38:02.29ID:1kVSHcIG0
>>912
今のところデファクトスタンダードなライブラリだね
2019/10/05(土) 19:39:42.31ID:BObIlSOA0
>>913
設定ファイルをユーザにどうして欲しいの?
2019/10/05(土) 19:46:18.14ID:1kVSHcIG0
>>915
サンプルのjsonを添付してここを変更しろとドキュメント付けとけば問題ない
インデントが変わっても問題ないし
917デフォルトの名無しさん (エムゾネ FF0a-MsYi)
垢版 |
2019/10/05(土) 19:51:52.36ID:kB6gz2T/F
>>913
http://www6.uniovi.es/cscene/CS3/
values.c
2019/10/05(土) 19:56:00.01ID:8wZmV3QG0
>>912
俺はDataContractJsonSerializerだな
これなら標準ライブラリだからインストール不要
2019/10/05(土) 19:57:33.02ID:BObIlSOA0
>>916
jsonはカッコの対応で死ぬわ

っていうかxmlもjsonもiniファイル駆逐できるほど性能よくねーじゃん
っていうか用途が違うものを強引に適用しようとしてない?
設定ファイルに書いたコメントも消えちゃうしね
2019/10/05(土) 20:01:44.88ID:BObIlSOA0
iniファイルを時代遅れだと主張するなら
xmlやjsonで吐き出して設定ツールぐらい用意しろってことかな?
それなら理解できるけど
xmlとjsonのテキスト編集はキツイ
2019/10/05(土) 20:08:26.65ID:1O88xYRBd
ユーザーがやることはjsonの値をちょい変更するくらいなのになんでカッコ対応が問題になるんだよ
ユーザーがカッコを書く必要なんてないのに
2019/10/05(土) 20:11:42.09ID:BObIlSOA0
>>921
いや、だからそれどこよ?
ってのを見つけるのも結構骨が折れる作業よ

だから、コメントをjsonファイルに書いておくだろ?
ところが次のアプリの書き込みで消えてるんだなw
923デフォルトの名無しさん (ワッチョイ 3a2d-BBXA)
垢版 |
2019/10/05(土) 20:13:16.91ID:jRdA7zB80
話はよーわからんが、JSONに慣れれない人もそれがあんたの能力なんだから
しょうがないんじゃない
2019/10/05(土) 20:13:46.83ID:WowcC4IHr
>>922
ちゃんとしたエディターかIDE使えば?
VScode使えば対応簡単だけど
まさかメモ帳でやってんの?
2019/10/05(土) 20:16:05.57ID:BObIlSOA0
そもそもバグったときに凶悪であることは認めるだろ?
俺らだってxmlやjsonファイルでユーザーが編集したおかしな箇所を
プログラムでピンポイントで指摘できない
このファイルは完璧でないと読めない
そんなモノをユーザーに触らせるような運用は間違っている

客がいいって言うならいいけど
2019/10/05(土) 20:16:19.70ID:WowcC4IHr
vscodeとかtsとかnode.jsとか設定はjsonだけど
それで大問題にはなってない
みんな使いこなしてる
何故君だけ使えない?

iniファイルなんて実際死んでるよ?
2019/10/05(土) 20:16:43.74ID:BObIlSOA0
>>924
それを客に言うの?
趣味ならいいけど
2019/10/05(土) 20:17:55.69ID:WowcC4IHr
>>927
客がなんでjsonファイルいじって中にコメント書くのかが分からん
お前がいつまでボケ続けるのか興味があるが…
2019/10/05(土) 20:18:25.25ID:BObIlSOA0
>>928
え?開発者向けなん?
2019/10/05(土) 20:19:04.85ID:r/LR5Bg3d
iniファイルとかWin16の時代の化石だろ
2019/10/05(土) 20:19:40.75ID:WowcC4IHr
本当にいつまでボケ続けるのか
実務に携わってないんだろうなってのはわかる
空転を本人が気づいてない
932デフォルトの名無しさん (ワッチョイ 3a2d-BBXA)
垢版 |
2019/10/05(土) 20:20:51.17ID:jRdA7zB80
よく出てくくる、一本道コードのVisual Basicおじさんでしょ
2019/10/05(土) 20:21:03.98ID:BObIlSOA0
はっきりさせておくけど

・設定ファイルをテキスト編集でユーザに触らせたい
→xmlやjsonは向かないんじゃない?

・設定ファイルをユーザに触らせない
→なんでもいいんじゃない?

ってことな
2019/10/05(土) 20:22:45.53ID:BObIlSOA0
あともう一つ

・ユーザは開発者である
→なんでもいいんじゃない

って感じな
2019/10/05(土) 20:24:09.45ID:WowcC4IHr
・設定ファイルをテキスト編集でユーザに触らせたい

の時点で間違ってる
バックアップすら取るかどうかわからんやつらに編集させんな馬鹿
2019/10/05(土) 20:24:53.35ID:hjSAU91p0
>>914
なるほど、これはもうjson.netいれるしかないですね

>>918
MS謹製のJson、これはかなりとっつきやすそうさんくす
2019/10/05(土) 20:25:02.19ID:BObIlSOA0
>>935
じゃあ、俺と君の意見は一致してるね
2019/10/05(土) 20:25:51.75ID:WowcC4IHr
ボケた会社の〜ボケた開発者が〜ボケた客にボケたことをさせて〜

メンテナンス費用だけとるつもりですか〜

死ね糞ゴミ!
939デフォルトの名無しさん (ワッチョイ 3a2d-BBXA)
垢版 |
2019/10/05(土) 20:28:30.38ID:jRdA7zB80
でも、初心者なのに仕事を取ってくる勇気は大したもんだよね
2019/10/05(土) 20:38:04.30ID:8wZmV3QG0
>>933
俺なら
>・設定ファイルをテキスト編集でユーザに触らせたい
→そんな仕様にはしない
なぜならあらゆるフォーマットに対応する実装とテストなんてしたくないし
そもそも設定をテキスト編集するアプリとか使いにくい

>・設定ファイルをユーザに触らせない
→xmlにする
なぜなら実装が簡単だし、開発者(俺)ならテキスト編集できるから
2019/10/05(土) 20:51:43.64ID:RYV31rLj0
レガシーコードってなんかかっこいいから、どんどん増やすべき。
伝説の武器みたいなものでしょう。
942デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/05(土) 21:28:22.83ID:Apziqq2fa
>>936
2chだとやたらとJSON推しの人が多いけど、.NET標準のシリアライザは他にもいろいろあるよw
JSONに固執する必要がないなら他を検討した方がいいと思うけど
2019/10/05(土) 21:40:37.42ID:kmFdI7ZBM
MSがJSON推しだからね
2019/10/05(土) 21:42:52.25ID:mrk3SroR0
JSONは連想配列に順序の保証がない
デバッグで差分比較するとかができない
2019/10/05(土) 21:45:37.47ID:ZEfzfdRr0
連想配列に順序ってそんな重要なんか
2019/10/05(土) 21:50:21.48ID:SzWcISg6d
>>942
.NET標準でjson以外にほかにいろいろシリアイザがあるって、XML以外何かある?
2019/10/05(土) 21:54:42.26ID:hjSAU91p0
>>942
なるべくネット上に解説とかサンプル多いと楽かなっと
多数派に流されるお
2019/10/05(土) 22:05:26.81ID:VWTAP42j0
json schema用意すればvscodeで補完効くし、間違いも指摘してくれるし、普通json使うわ
949デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/05(土) 22:54:13.79ID:Apziqq2fa
DataContractJsonSerializer、使ったことなかったが調べた感じ
一通りの機能はあるし、バージョントーレラントみたいだし、別にこれでもいいねw

バージョントーレラントじゃないと思ってたが、勘違いだったみたいだ。
2019/10/05(土) 23:34:01.62ID:1i4Kj4Snd
トーレラントって何かググってみたけど中華鍋しか出てこない
2019/10/06(日) 01:39:32.41ID:z+z4mE1D0
確かにJsonはコメントが書けないか
コメント用の文字列メンバを予め確保すれば良いのかな
2019/10/06(日) 01:49:26.58ID:DPash9Py0
jsonのシリアライザ/デシリアライザは送受同じライブラリを使わないと、割とめんどい。
DateTimeの扱いとか。

あとライブラリによってはpublicクラスじゃないとダメとか変な制限があるものも・・

DataContractJsonSerializerは変換遅いし、いちいち[DataContract]や[DataMember]などのアノテーションがめんどい
2019/10/06(日) 02:10:45.36ID:uOvq13Pn0
以前REST APIを作ったときはVisual Studioがjson.netを利用するコードを自動生成してたけど、今はDataContractJsonSerializer化されてるのかな?
2019/10/06(日) 07:22:38.42ID:DbrcOQgy0
>>953
System.Text.Json
955デフォルトの名無しさん (ワッチョイ b67c-WcZE)
垢版 |
2019/10/06(日) 11:26:53.05ID:yc9LKsYB0
>>939
http://software.aufheben.info/kouza/kouza_socket.html

>936
cjson
2019/10/06(日) 12:18:55.28ID:jjEkd1/A0
windows formsアプリについての相談なんですけれど、ロジックと見た目を分けろって聞くじゃないですか。なのでそうしようと思ったんです

例えばユーザーコントロールを作って、そこに何かしらの処理を行うボタンを配置したとします
それで自分が考えたのは、計算をするクラスをユーザーコントロールクラスの内部クラスとして作る、ユーザーコントロールクラスのフィールドとしてその計算するクラスのインスタンスを持たせる
でボタンが押されるイベントで計算をするクラスのオブジェクト.calculate()みたいにする

設計としてはこんな感じでも大丈夫ですかね?アプリを作る時に内部のコードはこう実装するみたいなことを教えてくれる本が無くてどう設計していけばいいのかわからないんです
2019/10/06(日) 12:29:48.44ID:ofI4YMfJM
右も左もわからないうちから俺俺アーキテクチャとか考えないで

MVCやMVVMでも勉強したらいいと思うよ

それから最強のアーキテクチャを考えるのでも遅くない
2019/10/06(日) 12:31:03.82ID:U/2g+4lB0
>>956
>ロジックと見た目を分けろ
windows formsアプリじゃなくWPFやった方がいいんじゃない?
windows formsでそんな組み方するの逆にめんどくさい
2019/10/06(日) 13:48:38.81ID:wAV7A9/e0
>>955
cjsonはわかりやすいのかな、ちょっとしらべてみるさんくす
2019/10/06(日) 13:52:51.65ID:44yIwJmG0
>>956
そんなことしなくて良い
画面アプリなんて使い捨て上等

サーバーサイドと画面(クライアント)を分けろって話で
一つのアプリでそんなことやっても無意味
2019/10/06(日) 14:51:46.94ID:BLgAYnXt0
そんな訳は(規模にもよるけど)当然無い。
2019/10/06(日) 15:03:12.76ID:Ih3UpniZ0
「既存メソッドの処理なんですが?ちょっと時間かかっちゃうんですよねー
プログレスバーとかつかないですかね?
処理の進行状況も表示して」

こんな簡単な要望ですら
そいつはケツまくって逃げ出すよ
花京院の魂を10000個ぐらいかけてもいい絶対だ

処理と表示は一見関係ないように見えて実は密接に関係していて
絶対に切り離せない

不可能なことを可能だと言う技術者を信用してはならない

何年もやっていてこの程度の因果関係もわからんような雑魚から
教えを請いてはならない
963デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/06(日) 15:33:01.89ID:ZrFisUz2a
>>956
何でユーザーコントロールの話になるのかよく分からんけど、

>ユーザーコントロールクラスの内部クラスとして作る
この部分は変だけど(内部クラスにする必然性がない)、その後の部分はそういう認識でいいと思うよ。

FormでもUserControlでも、基本的に書いていいのは上に乗ってる
コントロールを操作するコードとイベントハンドラだけ。
2019/10/06(日) 18:11:15.25ID:SEX7i46w0
>>962
C#にはIProgress<T>というクラスもタスクも横断的に使える便利なIFがあるから
あんたが思っているようなことはない

つか、偉そうなのにこれ知らないのか?
2019/10/06(日) 18:45:20.34ID:pgF6GacOr
自分は頭が悪すぎてIProgress<T>のどこが便利なのかわからないので
違う仕組みでやってる
2019/10/06(日) 19:21:15.12ID:Ih3UpniZ0
>>964
はぁ?
既存の何も考えずに作ったメソッド(内部)のプログレスバー(表示)を分離したまま実装できないだろってのが俺のレスの主旨なんだけど
理解した上で反論しようとしてんの?
Mr.ドン・キホーテ?
2019/10/06(日) 19:26:16.12ID:SEX7i46w0
>>966
いや、簡単に実装できるよ
君が知らないだけで
2019/10/06(日) 19:36:10.31ID:Ih3UpniZ0
>>967
あっそ、絶対無理なのにバカだなお前
テメーはさっさと技術者やめて詐欺師に看板替えろ
2019/10/06(日) 19:38:07.20ID:fpn8B7qc0
昔はイベントハンドラで実装してたな
いまならObservablePropertyあたりでやるんかねRxとかどうも上手く使えてる気がしない
2019/10/06(日) 19:43:10.12ID:fpn8B7qc0
>>968
いやできるだろう
2019/10/06(日) 19:53:20.87ID:SEX7i46w0
>>969
確かにmvvmだとReactiveProperyを上位に伝搬するのが楽だし俺もそうやっている
でもFormsの話のようだからIProgress<T>を出しました
2019/10/06(日) 20:02:50.65ID:dGqjDCnwr
FormsだとしてもIProgressは不便だと思うよ
2019/10/06(日) 20:07:52.17ID:DbrcOQgy0
>>972
なぜ?
2019/10/06(日) 20:18:09.12ID:LuDxacSca
ID:Ih3UpniZ0って昨日iniファイル以外認めないって主張してた御仁か
15〜20年くらい前のスキルしかもちあわせてない人でしょ
技術的なキャッチアップも人間性の向上も怠って年齢だけ重ねてる人だからこういう物言いしかできないんだろう

こういう人のいうことは表向きだけはいはいって聞いたふりして全部無視して問題ないよ
2019/10/06(日) 20:27:29.93ID:dGqjDCnwr
ほっとくとイベントの参照が残ってるのでひとりでに消えなくなってしまう
2019/10/06(日) 20:39:48.56ID:fpn8B7qc0
>>975
backgroundworkerを自前で作らずにformに貼って、イベントもデザイナから作るといいよ
2019/10/06(日) 20:40:18.92ID:DbrcOQgy0
>>975
ソース
2019/10/06(日) 23:21:15.76ID:zXgX+PCrr
ソースもくそもみんなそう
2019/10/06(日) 23:28:20.92ID:zXgX+PCrr
c# メモリリーク イベントハンドラ
2019/10/07(月) 00:20:35.80ID:ilJKwzD30
だからIProgressでメモリーリークするソース出せってば
2019/10/07(月) 07:55:39.68ID:PXpMNqVGd
IProgressはインターフェースなんだからそれ自体がリークってのはおかしいでしょ。使い方が悪いだけでは…?
2019/10/07(月) 08:49:33.99ID:jeQW+1qp0
オッペケは自殺して転生して自分の頭のバグ直してこいやボケ
2019/10/07(月) 18:13:25.65ID:jsaaj6Lxr
インターフェイスでメモリリークするわけがないはその通り

ただ単純なイベントハンドラベースだとうっかりメモリリークさせやすい
コンポジションなどで保持したままで寿命が違うと特にそう

c++だとメモリリークしやすいが使い方が悪い!ちゃんとつかえ!
という話で済まないので進化し続けてる

そのProgressというけど偽りでProgressと言う動作と何の関係もない
実際はどこからも使われないく自分で使うコードを書くだけなのでProgressである必要もない
どこが便利で使ってるのかさっぱりわからない
2019/10/07(月) 18:17:14.49ID:jsaaj6Lxr
見返すとめちゃくちゃだけどIpregressは別にProgressに高度に特化されてないので
使う意味は薄いのではないか?
nさんがどう思うか知らないけど
2019/10/07(月) 19:14:35.69ID:ilJKwzD30
ここまで具体的なコードは無し
2019/10/07(月) 20:06:05.04ID:GbsEPSwo0
>処理と表示は一見関係ないように見えて実は密接に関係していて
>絶対に切り離せない

ちゃんと考えて設計してもそうなるなら、絶望的にセンスがないわ
おまえに不可能なことが技術的に不可能なこととは違うよ
2019/10/07(月) 20:18:37.37ID:9eyAES450
次スレ
ふらっと C#,C♯,C#(初心者用) Part145
https://mevius.5ch.net/test/read.cgi/tech/1570446977/
ワッチョイ無しは
ふらっと C#,C♯,C#(初心者用) Part141
https://mevius.5ch.net/test/read.cgi/tech/1544838367/
2019/10/07(月) 21:20:35.04ID:jsaaj6Lxr
>>985
理解できないなら無理にレスしなくてもよい
2019/10/07(月) 21:45:53.70ID:/mGKDAACa
>>987
2019/10/07(月) 22:15:03.54ID:QEMDFqtE0
>>987
2019/10/07(月) 22:16:20.26ID:ilJKwzD30
>>988
はよ
2019/10/07(月) 22:40:26.54ID:H1QHa3mL0
>>986
バカだろ
物理的に不可能だろ
既存処理にプログレスバー付けてみろよ
2019/10/07(月) 22:42:41.65ID:d+4AHn7d0
IProgressというか、その実体のProgres<T>クラスは、普通に使えばメモリーリークなんか起こらないんだよな
イベントじゃなくてActionデリゲート使ってメンバ変数など使わずにローカル変数で定義して
処理を実行するたびにインスタンス作ればいいだけ
ラムダ使えない人はご愁傷さまとしか言えません
2019/10/07(月) 22:50:14.57ID:jsaaj6Lxr
>>993
外から複数のハンドラ指定して実行したい場合どうすんの?
Actionにどうやって渡す?
2019/10/07(月) 22:52:08.75ID:jsaaj6Lxr
それと
> 普通に使えばメモリーリークなんか起こらないんだよな



> イベントじゃなくてActionデリゲート使ってメンバ変数など使わずにローカル変数で定義して
> 処理を実行するたびにインスタンス作ればいいだけ

は矛盾してるよね?
2019/10/07(月) 22:53:10.67ID:s9APxj2Ed
>>994
複数のアクションを実行するアクションを渡す
2019/10/07(月) 22:59:52.41ID:d+4AHn7d0
>>995
サンプルぐぐっても、イベント使ったりクラスのメンバ変数にして使い回すって方が邪道じゃないかな?
2019/10/07(月) 23:21:18.60ID:cpqLM3c60
>>986
多分切り離すとか分離するの意味を根本から間違えて捉えてるんだと思うので無駄だよ。関心の分離の基本がわかってない
2019/10/09(水) 02:47:43.58ID:mpcY/05P0
2019/10/09(水) 02:47:58.78ID:mpcY/05P0


次スレ

ふらっと C#,C♯,C#(初心者用) Part145
https://mevius.2ch.net/test/read.cgi/tech/1570446977/
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 84日 11時間 11分 35秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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