X



ふらっと C#,C♯,C#(初心者用) Part144
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん (ドコグロ MM2f-DHp5)
垢版 |
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
0002デフォルトの名無しさん (エムゾネ FFba-YtL5)
垢版 |
2019/07/16(火) 15:44:15.40ID:uLn4rkdXF
O2
0003デフォルトの名無しさん (ワッチョイ a75f-YtL5)
垢版 |
2019/07/17(水) 10:08:14.00ID:5/22vZUf0
もしわかったら助けてください

VS2017 c# Windowsフォームで、textboxのKeyDownイベントで別のTextBoxをアクティブにする関数を作ったのですが
なぜかフォームが非アクティブになってしまいます
KeyDownイベントでなく、テストボタンを作ってClickイベントで関数を呼び出すと正常に動作します
何か考えられる原因ってあるでしょうか…
0007デフォルトの名無しさん (ワッチョイ a75f-VBrH)
垢版 |
2019/07/17(水) 10:50:55.66ID:5/22vZUf0
keydownでなくkeyupイベントで処理したら理想通りになりました
どうして…?

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

>>6
そもそもフォームを1つしか作っていないんです
0009デフォルトの名無しさん (ワッチョイ 4e7b-MWwc)
垢版 |
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を外してもフォームが非アクティブになるのは無いから、それは書いてない別の原因があるはず
0010デフォルトの名無しさん (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/18(木) 02:37:55.39ID:JiMlnGX40
DateTimePickerの継承コントロールを作っているのですが、カレンダーや手入力で日付を変更しても、Valueの値が変わりません。
何が原因でしょうか?

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

だから本当に怖いのはdispose忘れじゃなくて、
イベントの購読の解除を忘れるとかして参照を間接的に握られ続けること
001810 (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/18(木) 13:26:02.08ID:JiMlnGX40
すみません。
予想通りに動いたと思ってたんですが、"Value = 値" という方法で値を設定すると反映されません。
どうすればよいでしょうか・・・
http://ideone.com/UcN1cB
0021デフォルトの名無しさん (ワッチョイ 3f01-9oxg)
垢版 |
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);
}
0026デフォルトの名無しさん (ワッチョイ 4f5f-6VcT)
垢版 |
2019/07/18(木) 20:46:46.74ID:c4BAkJVY0
>>17
てっきりbitmapは明示的にdisposeしないとメモリリークするのかと思ってたんだけど
都度GC.Collect()してみたらdisposeしなくても大丈夫だったわ
ありがと
0031デフォルトの名無しさん (ドコグロ MMbf-bkmc)
垢版 |
2019/07/19(金) 21:36:05.87ID:IuwL/lPHM
Bitmapはファイナライザを実装してるから2回GCが走らないと解放されない
あと頻繁に動いてるのは最も浅い世代のGen0GCで、GCを生き残って昇格してしまったオブジェクトを回収させるにはGC.Collectは有効
0034デフォルトの名無しさん (ワッチョイ ff4a-7vAl)
垢版 |
2019/07/20(土) 20:49:53.26ID:hrLeGUFN0
時間はかかっても、MSゴシックなら正常に動作するんですが
游ゴシックを指定すると、なぜか文字が重なり合ったりして正常に表示されません

g.DrawString(new String('@', 5000000), drawFont, Brushes.Black, 0, 0);
0038デフォルトの名無しさん (ワッチョイ 3f34-k+pP)
垢版 |
2019/07/21(日) 12:10:16.19ID:AXqQTYqQ0
Webbrowser で表示されているある部分をクリックしてAjaxで動的にHTMLが変化する場合 
documentcompleted は発生しませんが
HTMLの変化を検知するにはどうするのがいいのでしょうか?

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

勿論UWPで作るってのもアリだが
0041デフォルトの名無しさん (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/22(月) 01:46:10.70ID:fKk8m16B0
どんな処理に対してどんな例外処理をすればよいのか理解出来ないのですが、
「〇〇メソッドが投げる可能性がある例外」という感じの一覧みたいなものってないでしょうか?
0043デフォルトの名無しさん (アウアウウー Sad3-EsdE)
垢版 |
2019/07/22(月) 15:09:04.83ID:9U8T6M8Za
>>41
他にも、VisualStudio上でメソッドにカーソルを合わせると出てくるツールチップで「例外」箇所に型が載っていたり
F12で定義に移動した後のコメント中で「例外」箇所に型と理由が載っていたりする
0052デフォルトの名無しさん (ワッチョイ 6bda-tP4r)
垢版 |
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 += //クリックイベント

  }
}
0059デフォルトの名無しさん (ワッチョイ 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];}
}
みたいな事がしたいです
0062デフォルトの名無しさん (ブーイモ MMc7-X7My)
垢版 |
2019/07/27(土) 23:49:00.45ID:F72yN9ZSM
できない
インデックスの渡し方しか考えてないようだけど
それだとLengthやforeachで回せる機構など
配列に必要な関数群も仕組みもないだろ?

素直にListから継承させるか
インデックスを引数で渡せばいいじゃない
0066デフォルトの名無しさん (ブーイモ MMc7-X7My)
垢版 |
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#で実現しようとすると、わざわざプロパティごとにクラス化なきゃいけないし
クラスの生成や配列を振る舞うクラスに元データを渡すのとか非常に面倒になる

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

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

単純に関数の引数は()でも[]でも囲めるようにしてくれたら簡単なんだけどね
0069デフォルトの名無しさん (ワッチョイ 9312-J0Tb)
垢版 |
2019/07/30(火) 09:51:52.35ID:MQBecH/v0
できないので、諦めてオーバーライド可能なメンバでやって

そういう機能が欲しいなら、githubで提案してくるとよい
ここで喋っても入らないのでそのつもりで高説は垂れるように
0070デフォルトの名無しさん (アウアウウー Sacf-z8jC)
垢版 |
2019/07/30(火) 09:53:45.93ID:aYg/q9jya
>>68
隠蔽(new)は出来るでしょ

継承というかoverrideはインスタンスメンバーを上書きするものであり、
constは本質的にstaticメンバーなんで、継承でconstを変更という発想はそもそも矛盾してるんじゃないの?
0072デフォルトの名無しさん (ブーイモ MMc7-X7My)
垢版 |
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 “楕円“; }
0079デフォルトの名無しさん (スッップ Sdaa-qbpu)
垢版 |
2019/07/31(水) 15:31:35.93ID:tEceTxskd
MacでC#勉強してみたいんですがVisual Studio入れないと厳しいですか?
VS Codeだけでは難しいですか?
0083デフォルトの名無しさん (アウアウウー Sacf-z8jC)
垢版 |
2019/07/31(水) 18:38:19.42ID:quxH8qSha
>>79
変な意地をはらずに一番イージーな道を選択した方がいいよ
つまらないことに時間を浪費したいの?w
0084デフォルトの名無しさん (ドコグロ MMaa-LsNC)
垢版 |
2019/07/31(水) 18:43:57.13ID:lLYOef6LM
>>83
その理屈だとBootcampでWindowsをインストールするのが最善ということになってしまう
VS for Macなんかほとんど誰も使ってないんだから、時間の浪費という意味ではVSCodeといい勝負だわ
0085デフォルトの名無しさん (ワッチョイ 1eda-X7My)
垢版 |
2019/07/31(水) 19:10:03.53ID:9TaORHsg0
Listでindex aのアイテムをindex bにインサートするスマートな方法はないだろうか

aをremoveしてbにインサートすると、a>=bならいいけど、a<bの時 removeでインデックスがズレるので狙いより1つ下に行ってしまう
一番下だと範囲外の例外が起きてしまう
できればこれを実行するメソッドを作って既にあるList<T>を拡張したいんだけど
ヘルパークラス的なものって作れないかな?
0086デフォルトの名無しさん (アウアウウー Sacf-6/1b)
垢版 |
2019/07/31(水) 20:05:23.41ID:i+V4gIP9a
>>85
「拡張」という言葉の意図がわからないけど
ヘルパークラス作って静的メソッドや拡張メソッドとして定義すれば良いんじゃない?
List<T>を継承したオレオレListでメソッド定義、という方法は止めとけ
0087デフォルトの名無しさん (アウアウウー Sacf-z8jC)
垢版 |
2019/07/31(水) 20:12:36.58ID:quxH8qSha
>>85
やってみたが例外なんか出ないけど
https://ideone.com/CazHs2
0091デフォルトの名無しさん (ワッチョイ 1eda-X7My)
垢版 |
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の記述がよくわからず質問しました
おかげでうまく実装できました、ありがとうございます!
0095デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/02(金) 00:52:16.45ID:80wMhccea
最低限IDEで自動ビルドなら慣れれば貧弱な環境も楽しいよ

インテリセンスなんかないから長い識別子をダブルクリック & Ctrl + C ⇒ Ctrl + V
ばっかりしてたら左手が腱鞘炎になっちゃったけどw
0098デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/02(金) 14:01:07.04ID:ktX3qXN3a
大昔試用したことあるけどまだ存在するんだw
いい加減タブ化とかしたのかな

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

vscodeも良いけど軽さはやっぱ秀丸のほうが良いから今でもちょいちょい起動するよ
0100デフォルトの名無しさん (アウウィフ FF09-ONUK)
垢版 |
2019/08/02(金) 15:14:57.86ID:e58H0HHKF
Nif●y の決済システムってまだ稼働してるんか
最近使ってないから知らんけど
0102デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/02(金) 15:47:38.91ID:ktX3qXN3a
xyzzyなら一時期使ってたなあ
道具にこだわるたちじゃないんで、金払ってまで禿丸さんを使う気にはなれなかった
0106デフォルトの名無しさん (アウアウカー Sa91-LmKu)
垢版 |
2019/08/02(金) 22:46:17.18ID:UiHNxeJXa
ここにいる人は趣味プログラマーが多いんかな
本業なんだけど経験ないC#開発もやらないといけなくなったって人も結構いたりする?
0110デフォルトの名無しさん (ワッチョイ 85d2-X2my)
垢版 |
2019/08/03(土) 00:28:08.22ID:3YKHpYYf0
同じく本業。
事前に経験ってほどのものがあったことなんかほとんどないような気がするけどなあ。
最近なら python をやってみたり。これ ruby っぽくてそんなに好きになれそうにないや。C# は大好き。
0113デフォルトの名無しさん (ワッチョイ 1be9-PeK1)
垢版 |
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};
}
のように、代入したいんですけど、うまくいきません。
どうすれば参照できるんでしょうか。
そもそも概念的に間違ってるのかもしれませんが、、、
0114デフォルトの名無しさん (アウウィフ FF09-ONUK)
垢版 |
2019/08/03(土) 10:27:40.91ID:3ia1GLNcF
書き込むスレが間違ってる
0122デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/04(日) 03:23:55.03ID:jcz7NslOa
そういう話はさすがにスレ違いでプログラマ板でやった方がいいと思うが、
C#に限らずサラリーマンプログラマで1000万越えは少ないだろうね。

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

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

プログラマに限らんけど、優秀な人はアメリカにでも行った方がいいね。
日本はいろいろ終わってると思うw
0125デフォルトの名無しさん (ワッチョイ cd02-ONUK)
垢版 |
2019/08/06(火) 17:15:33.24ID:8h96sAQZ0
C言語スレとマルチですが質問がスルーされてるので質問させてください。
コマンドライン引数というのは具体的に何が出来る引数なのでしょうか?
WisdomSoftって入門サイトと苦しんで覚えるC言語って本を読んでるのですがイマイチ何が伝えたいか分かりません。
0128デフォルトの名無しさん (ワッチョイ cd02-ONUK)
垢版 |
2019/08/06(火) 17:37:01.47ID:8h96sAQZ0
>>126
ありがとうございます。
しかしファイルをダブルクリックしても何も起こりません;
読んでるサイトにはD&Dすると白紙のメモ帳にプログラムが書き写されるみたいなこと書いてあるので
試しましたが何もおこらず・・・
使ってる環境VS2019なのですがそれが駄目なんでしょうか?
0132デフォルトの名無しさん (ワッチョイ cd02-ONUK)
垢版 |
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等なんの説明もなく使ってるので更に分からないです
0133デフォルトの名無しさん (ワッチョイ cd02-ONUK)
垢版 |
2019/08/06(火) 17:55:25.38ID:8h96sAQZ0
>>130-131
メモ帳とかを使ってそれを実行できたりしないのでしょうか?
わかり易く解説してサイトとかあったら教えて頂けると助かります;
0135デフォルトの名無しさん (ワッチョイ 6588-n/pF)
垢版 |
2019/08/06(火) 18:11:09.99ID:D2KPblxl0
>>133
関数に引数を渡すのは知ってる?
渡す引数の内容でその関数の動作は変わるよね?
コマンドライン引数はmain関数への引数になる
その引数はファイル名だったりexeを起動する人が入力する文字列だったりする

まずはコマンドライン引数を出力してみて何が入っているか確認しよう
出力先はテキストファイルでもコンソール(stdout)でもいい
0136デフォルトの名無しさん (ワッチョイ 05da-ONUK)
垢版 |
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
0138デフォルトの名無しさん (アウアウウー Sa09-ONUK)
垢版 |
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
0140デフォルトの名無しさん (オッペケ Sra1-nN+A)
垢版 |
2019/08/06(火) 19:53:18.36ID:fRCzQnxrr
>>139
あまり深く考えたことないけど、それでドロップしたファイル名がとれるのってどこで仕様化されてるのだろ
0142デフォルトの名無しさん (ワッチョイ cbda-hOp9)
垢版 |
2019/08/06(火) 20:16:01.22ID:hi1INabv0
OSの仕様だね
実行ファイルにファイルをドロップすると
ファイルのフルパスが引数になって起動する
複数ファイルドロップするとファイルが全部引数で入る

送る(sendto)フォルダにexeのショートカットを置いて
右クリックして送るとやっても同じ動作をする
0148デフォルトの名無しさん (ワッチョイ 8d2c-v9kR)
垢版 |
2019/08/07(水) 06:57:51.84ID:HD57Pps60
まあコマンドライン引数という言葉は出てるんだからコマンドラインとはこれのことって説明にはコマンドプロンプトを用いる方がわかりやすいかもしれないけどどっちもどっちかなあ
0150デフォルトの名無しさん (エムゾネ FF43-ONUK)
垢版 |
2019/08/07(水) 13:17:43.31ID:+fGjf0jSF
>>140
Win32API なら WinMain の LPSTR lpCmdLine
0152デフォルトの名無しさん (ワッチョイ daad-WJKE)
垢版 |
2019/08/08(木) 01:37:38.81ID:ihcgMCFx0
OSの仕様とAPIの仕様とC言語の仕様がごっちゃになるから
昔より初心者は大変よな。

ただ質問の仕方はジャンル関係ないから
もうちょっと伝わるように書いた方がいいと思うぞw
0153デフォルトの名無しさん (ワッチョイ 5524-iNuD)
垢版 |
2019/08/08(木) 14:29:31.16ID:zX15bpOA0
最も低コストな2点間時間差の測定って何なのでしょうか?
元々DateTime型を利用していましたが、超高精度である必要もなくマシンの長時間稼働で符号が反転することがあるのを承知でEnvironment.TickCountを利用しています。
Environment.TickCountよりも低コストなものはあるのでしょうか?
0157デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/08(木) 17:25:58.20ID:EGuA/4uga
>>155
兆円単位の資産持ってる人がスーパーの食材の値段を比較するような話で、
意味ないよそんなのw

コストなんかどっちにしろゼロと同じだ
0158デフォルトの名無しさん (アウアウウー Sa39-QI54)
垢版 |
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プロパティがあって、初期値では無制限になってる
0159デフォルトの名無しさん (ワッチョイ 5524-iNuD)
垢版 |
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) {}
0161デフォルトの名無しさん (アウアウウー Sa39-QI54)
垢版 |
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」を使えるから精度出るんじゃない?
0162デフォルトの名無しさん (ワッチョイ 2588-cVv4)
垢版 |
2019/08/08(木) 23:24:35.70ID:1oNCOrAR0
指定秒数経過の判定で実行パフォーマンスを気にするのが間違ってる
そういうのは秒間1万回処理する必要があるとかいう処理で考えるべき

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

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

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

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

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

なにかいい知恵はないものだろうか…
0180デフォルトの名無しさん (アウアウウー Sa39-QI54)
垢版 |
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
> 単一のファイルをディレクトリのように扱えて
> 可変長・不特定多数のデータをファイル名をつけて格納できる
についてもう少し詳しく
もっともクラウドで同期の問題があるのなら、どんなライブラリを使おうとも大して変わらない気もするけれど
0181デフォルトの名無しさん (ワッチョイ aee9-uprU)
垢版 |
2019/08/09(金) 15:42:32.52ID:l8EdBHZf0
パフォーマンス系の質問に対して無意味系の答えが返ってくるのって質問者も大体織り込み済みな上で質問してるだろうしそれなら返さなくて良いんじゃないかね
ガチの初心者ならまだしも質問者のレス内容的にその辺は分かった上で聞いてるだろう
まぁ初心者スレでパフォーマンスに関する質問する方が悪いとも言えるが
0185デフォルトの名無しさん (ワッチョイ 615f-FKxW)
垢版 |
2019/08/09(金) 17:56:29.89ID:vlGdUztx0
>>183
例えばonedriveだとフォルダ下のファイル数が一定数を超えると
フォルダに警告表示が出て同期できなくなったりする
あと変更箇所のチェックで異様に時間がかかるようになるんだよね
0190デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/10(土) 14:54:00.10ID:ddvhW9sGa
なんか昨日一日まったく5chにアクセス不能だったけど、
俺の環境固有の問題だったのか普通に書き込んでる人いるなw

>>168
UserRegistrationFormとか?

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

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

しかし、それから

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

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

options.AddArgument("disable-infobars");

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

どうすれば消えますか?
0207デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/13(火) 20:54:18.53ID:yZEhfFzKa
>>205
すごい字余りの川柳かと思った
0211デフォルトの名無しさん (ワッチョイ 8963-cVv4)
垢版 |
2019/08/13(火) 22:29:42.70ID:4ID4APxI0
>>209
君が解説ブログかけばいいんでは?
てか解説ブログあること前提なの?

リリースノート見るなりソース読むなりすればいいのでは?
できないならなんでバージョンあげたの?
問題出たならバージョン戻せば?
なんのためにnuget使ってるの?
0214デフォルトの名無しさん (ワッチョイ 9a7d-X5Lh)
垢版 |
2019/08/13(火) 23:01:57.10ID:PAgqa6Je0
>>211
常に最新を使った方がいいのかな〜と思いまして。
戻した事がなかったので調べてみます。

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

>>212 >>213
エヌユーゲット
0215デフォルトの名無しさん (ワッチョイ da2c-8lAC)
垢版 |
2019/08/13(火) 23:10:42.03ID:kJJDzO2R0
漏れは、Ruby で、Selenium WebDriver を使っているけど、

「Chrome は自動テスト ソフトウェアによって制御されています」というメッセージは閉じれるけど、
その部分を閉じても、その幅が消えないから、使える画面が少なくなる
0218デフォルトの名無しさん (ワッチョイ 7d9f-PMB1)
垢版 |
2019/08/13(火) 23:29:34.04ID:mICjniMU0
selenium君はRuby君を反面教師にするといいよ。
スレ違いを繰り返すのがどれだけ他人から見て迷惑でみっともない行為なのかをこれ程上手く伝えられる教材はとても稀だから。
0220デフォルトの名無しさん (ワッチョイ 8963-cVv4)
垢版 |
2019/08/14(水) 01:38:02.43ID:GCJub4Dp0
誘導を無視することは正しいことですか?
ライブラリの問題であって言語の問題ではないから誘導しているのです
使用しているのがC#であっても言語の質問でなければ正しくはありません
問題が言語なのかライブラリなのかわからない人もいるので初めてレスするなら何の問題も無いし、誘導してくれるでしょう

今まで何度誘導を無視しましたか?
長期間、言語ではなくライブラリを起因とする質問を繰り返すのは正しいのですか?
0222デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/14(水) 03:08:22.27ID:YX6BCcxFa
芸人の押すなよは押せって意味だからどんどんやっていいよ
どうせ過疎スレで人口なんか恐らく数十人しかいないw
0226デフォルトの名無しさん (ワッチョイ b138-lqkE)
垢版 |
2019/08/14(水) 08:59:28.69ID:gdRXPT/U0
ライブラリが即NGじゃなく
サードパーティ制のライブラリがメインの質問&原因だからスレ違いでしょ

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

誘導には、スレが汚れるから他所へ行けって側面と
ここだとまともな回答が得られないからこっちを当たれって案内の面があるんよ
0231デフォルトの名無しさん (アウアウウー Sa39-fALZ)
垢版 |
2019/08/14(水) 12:38:54.90ID:Ct2lHzgAa
誘導してる人の動機が利他的なものなら素晴らしいことだけど、
実際は人を批判しないと気が済まないだけだからねw

そこを見透かされてからかわれているのに、それがわからないところが何とも滑稽だね
だいたいこんな過疎スレで周辺分野の質問があって誰が困るのかねw
誰も困らないと思うけど。
0242デフォルトの名無しさん (ワッチョイ 8963-cVv4)
垢版 |
2019/08/14(水) 17:00:39.76ID:GCJub4Dp0
そもそもかなり長期間seleniumの質問が投げられてるのにseleniumに詳しい奴からの回答なんてruby君以外からほぼ無い状態
だからこそ誘導してるんじゃないか
スレ趣旨から多少ずれてようがわかる範囲なら回答してる
回答した上で誘導までしてるのに誘導だけは無視して延々と質問を投げるなら嵐とかわらんじゃないか
0244デフォルトの名無しさん (ワッチョイ 9161-R2sJ)
垢版 |
2019/08/14(水) 18:33:13.55ID:rSDdWO1t0
聞きたくなければ黙ってseleniumをNGワードに入れれば良い

匿名掲示板なので日記書くやつもいるだろうし
他人の服装まで直す行為は無駄
ごちゃごちゃ発言するな
0248デフォルトの名無しさん (アウアウカー Sa4d-ahKc)
垢版 |
2019/08/14(水) 21:11:16.53ID:eGLvTmmqa
業務アプリって比較的新しい技術ってあんま使わなくね?
使えるように勉強するのは多いに結構なことだとは思うけど
0249デフォルトの名無しさん (ワッチョイ 4602-2Yos)
垢版 |
2019/08/14(水) 21:34:40.40ID:oxhAJDr00
RPAスレはSeleniumの話題OKだからそっちいきなよ
0251デフォルトの名無しさん (ワッチョイ 132c-BF++)
垢版 |
2019/08/15(木) 00:01:22.09ID:5MxOdPEK0
options.add_argument( '--disable-infobars' ) # 通知バーを消す
Ruby で、こう書いても、通知バーを消せない!

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

各ブラウザの機能なんて、相手にしないほうが良い
0252デフォルトの名無しさん (ワッチョイ 3302-QMAU)
垢版 |
2019/08/15(木) 00:17:18.78ID:4RLQ3HFd0
>>246
WPFやFormアプリケーションで描画しきれないケースのみ採用するパターンが多いかと。
習得する分には、もしもの時に出せる手札が増える(知見が広がる)ので良いとは思います。
0254デフォルトの名無しさん (ワッチョイ 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カラムは存在しているが、この方法では取得出来ない。
});
0257デフォルトの名無しさん (ワッチョイ 132c-gphu)
垢版 |
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}");
}
}
問題なかったけど?
コンパイルエラーになってるんだったらその内容書いて
0270251 (ワッチョイ 132c-BF++)
垢版 |
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
0275デフォルトの名無しさん (ワッチョイ 299f-+XXD)
垢版 |
2019/08/16(金) 00:57:25.58ID:Capr2asl0
>>273
いくらやめろと言われてもところ構わず唐突にRubyの話を始める頭のおかしい奴が、この板にいついているから。スレタイにRuby禁止と書かれているスレがいくつかあるが、コイツが原因。
0276デフォルトの名無しさん (ワッチョイ 596e-DuLZ)
垢版 |
2019/08/16(金) 00:58:13.28ID:2i9/2j960
C#っつーかプログラミング言語一般の話になっちゃうかもしれないんですけど
勉強してて例外のところに差し掛かったんですけどめっちゃ色々種類あるじゃないですか
んでもって例えば関数一つ作るにしても考えようによってはほんと沢山の種類の例外が発生する可能性がありますよね
そういうのをとにかく可能性が少しでもあれば例外をスローするようにしてたらコードが例外ばっかになっちゃう気がします
書く例外と書かない例外の境界線はどこにあるのでしょうか
0278デフォルトの名無しさん (アウアウウー Sa5d-h434)
垢版 |
2019/08/16(金) 01:08:02.04ID:G0Kx7mvIa
>>276
よくわからん理屈だな
仮にその例外を「書かない」と判断したとして、その「例外的な状態」を例外の代わりにどう処理するつもり?
放置しても問題なく動き続けられるorその場で適切な対処をして回復できるなら、そりゃ例外投げるよりその方がいいに決まってる
0279デフォルトの名無しさん (ワッチョイ 299f-+XXD)
垢版 |
2019/08/16(金) 01:13:52.65ID:Capr2asl0
>>276
ライブラリ関数に渡す引数が正しくないとかのように、自分が書いているコードが正しくない場合に発生する例外、逆に言えば正しいコードを書けば発生しない例外は基本的にその場ではいちいちcatchしない。
ただし完全にバグがないということを保証するのは困難なので、プログラムの上流でまとめてcatchして何らかのメッセージを出すなどした方が良い。どう対処すべきかはそのシステムに求められる要件次第だけど。
ファイルにアクセスできないとか、ユーザからの入力データが正しくないことにより発生するような例外とか、自分のコードの外部の要因で発生する可能性のある例外は、その都度catchして適切に対処する必要がある。
0281デフォルトの名無しさん (ワッチョイ 132f-BF++)
垢版 |
2019/08/16(金) 02:16:34.36ID:3ldAil1N0
>>276
その処理内で対処できるなら投げない
できないなら例外なげる

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

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

処理できない問題は(基本的には)例外を投げて呼び出し側に通知するしかない。
処理できない例外は投げるしかない。
処理できないのにcatchして握りつぶしてよい例外なんかない。
何が難しいの?
0283デフォルトの名無しさん (ワッチョイ 51ba-/tGK)
垢版 |
2019/08/16(金) 05:58:38.34ID:RrHjcCxL0
初心者マークの人へのアドバイスとしては

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

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

他人のソースをたくさん読んで、たくさん考えて書くしかないよね
0290デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/16(金) 12:43:54.88ID:vQM55/5Pa
いやとにかく

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

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

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

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

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

呼び出し側でいちいちtryブロックを書く必要があるのは鬱陶しい、
って需要もあるから
0292デフォルトの名無しさん (アウアウエー Sae3-SXVW)
垢版 |
2019/08/16(金) 12:59:06.06ID:mZqFzvyqa
キモいRuby厨はスレ追い出されてC#スレに引っ越した
0298デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/16(金) 16:34:34.90ID:vQM55/5Pa
>>294
TryParse的な物を想定して書いたけど>>291じゃ端折り過ぎて意味不明だね申し訳ない
戻り値nullは(メソッドじゃないけど)as的な物を想定

例外オブジェクトをout変数で返すのはたぶんやってる人はほどんどいないけど、
tryブロックが嫌いなら場合によっては便利かも
0301デフォルトの名無しさん (スフッ Sd33-oOLq)
垢版 |
2019/08/16(金) 17:53:53.26ID:9StEh2pLd
例外はログ拾う時に絶望したくないから適切に投げるなぁ。
どうでも良いという論調は作るだけで保守しない人の発想みたいで少し嫌かもしれん。
アプリケーションのロジックをバッチでも使いたい、みたいな時に、毎度戻り値を検証するんじゃなくてバッチの一連のトランザクション自体落としちゃいたい時に二度手間な気がするんだが、その辺どう作ってるんだろう?
0305デフォルトの名無しさん (ワッチョイ 2b2d-QMAU)
垢版 |
2019/08/16(金) 23:41:19.50ID:AADFbgN80
プログラム板住人は煽られるとすぐムキになるから、転載アフィブロガーの種まきに最適な場所になっちまってんだろう
0308251 (ワッチョイ 132c-BF++)
垢版 |
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 コアで、並列実行する機能が実装された!
0315デフォルトの名無しさん (ワッチョイ 3990-osyD)
垢版 |
2019/08/17(土) 19:21:30.41ID:lWdyvSQl0
エスパーすると、ASP.NETがあるがデスクトップアプリがメインだったC#よりまだJavaスレの方がまだselenium詳しそうなやつ多そうだから、せめてjavaスレ行けって事だろ。
ほんとこれぐらいもエスパーできなきゃアホやろ
0316デフォルトの名無しさん (ワッチョイ 1342-NA/o)
垢版 |
2019/08/17(土) 21:04:14.52ID:qUgpJGd70
それなら「Rubyスレに行け」が流れ的に当然であるのに何故か「Java」
彼にとってサーバーサイドの言語は全部Java
ほぼ「ゲーム機を全部ファミコンと呼ぶおかん」状態と考えるのが妥当と思われる
0319デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/17(土) 22:34:51.12ID:8QP5rwWB0
KeyValuePair c=func1();
cをnull判定できないんですがどうしたらいいですか?
Myclass c=func2();
の場合、null判定できます。

クラスは出来て、KeyValuePairは出来ないのは何故ですか?
0328251 (ワッチョイ 132c-BF++)
垢版 |
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 じゃないのか?
0332デフォルトの名無しさん (ワッチョイ b32d-bnMF)
垢版 |
2019/08/18(日) 13:41:29.71ID:+4zzAGlV0
WinForms で質問です。
標準の Form から継承した MyForm を abstract で作りました。
この MyForm は abstract なのでデザインで開けません。
(ここまでOK)

MyForm をもとに SubForm なるものを継承して作りました。
これには abstract は付けていないのですが、これもまたデザイナで開けません。
あまりに残念すぎる挙動だと思うのですが、これは仕様でしょうか。
0334デフォルトの名無しさん (ドコグロ MM63-h434)
垢版 |
2019/08/18(日) 13:45:24.63ID:jp7+H4+aM
.NETではフォームの継承は推奨されていません
共通化したい場合はユーザーコントロールを使用してください
なお、WinFormsは既に開発が終了しており、今後改善される可能性はありません
0335デフォルトの名無しさん (ワッチョイ b32d-bnMF)
垢版 |
2019/08/18(日) 13:51:36.77ID:+4zzAGlV0
やっぱりですか。

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

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

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

フォームの継承なんて10年以上やってなかったが
今実際試して確認したから間違いない
0343デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/18(日) 17:55:07.39ID:/RKifLkIa
>>340
なるほど。

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

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

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

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

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

こういうリストで、ピーマンって探すと
Keyがnullになってくれたので、良かったです。
KeyValuepairがnullじゃないのが不思議ですが
null判定できてよかった
0350デフォルトの名無しさん (ワッチョイ a922-x+FD)
垢版 |
2019/08/18(日) 21:46:55.40ID:DxNAHPOT0
構造体はnullにできないと何度も言われてるのになんで不思議に思うんだろう
ピーマンを探すときのList.FirstOrDefault()の戻り値は
KeyValuePairをデフォルトコンストラクタで初期化したものだよ
0351デフォルトの名無しさん (ワッチョイ 8163-Lgl9)
垢版 |
2019/08/18(日) 21:48:35.09ID:FVnfIX0p0
>>349
keyvaluepairは構造体
構造体にはnullが存在しない
構造体にnullが存在しないことと構造体の中身がどうなっているか関係ないので、中身がクラスであるならnullにもなりうる
君がやったことは構造体ではなくその中身がnullかどうかのチェックしただけ
構造体とクラスの違いが理解できないなら今後も躓くのでkeyvaluepair含め他の構造体の使用も封印したほうがマシ
まぁintだって構造体だから全部避けるなんてことは無理だけど
0358デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 10:35:33.11ID:VzpEDBAc0
Form1以外のクラスでlistboxに入力したいのですが
他クラスで入力する方法って望ましくないのですか?
他に方法はあるのでしょうか?
0362デフォルトの名無しさん (スフッ Sd33-oOLq)
垢版 |
2019/08/19(月) 11:52:38.83ID:2nNI8r3od
バスケットが空なのと、バスケットにnullが入ってるのは違うんじゃねえかな?
参照型は瓶と水みたいな感じで、瓶だけ持って帰ってこれても、
値型みたいな、それ単体が実体のものは言うとおり松茸みたいなもんで、取りにいってなかったら何も持って帰って来れないと思うが。

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

FirstOrDefaultは無かったときにnullを返すためにあるんじゃないんだから。
ちゃんとチェックしてから取ったほうがいいと思うよ。
0366デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 13:23:05.09ID:VzpEDBAc0
>>358なんですが誰かお願いします
別クラスでテキストボックスとかいじるのって普通のやり方ではないんでしょうか?
0368デフォルトの名無しさん (ワッチョイ 2b7c-gphu)
垢版 |
2019/08/19(月) 13:34:49.71ID:eHF4rC4A0
別クラスでいじるって、
class Hoge {
public void SetText(TextBox textBox, string text) { textBox.Text = text; }
}
みたいな?
コントロールを外部に渡すというのはまあ一般的ではないな
0369デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 13:36:41.01ID:VzpEDBAc0
>>359
返してくださったのはありがたいんですが
その3つの単語全て知らなくて、ググってみても高度すぎてわかりません
コンソールアプリケーションをフォームアプリケーションに移植しようとしているのですが
Console.Write()で出力していたものをlistBoxやtextBoxに出力したいのですが出来なくて困っております
どうかアドバイスお願いします
0371デフォルトの名無しさん (アウアウウー 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の参照を握らせるのは悪い手
0372デフォルトの名無しさん (ワッチョイ 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);
}
}
0373デフォルトの名無しさん (ワッチョイ 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
ありがとうございます。さっそく試してみます
0374デフォルトの名無しさん (ワッチョイ f12c-RZ8Y)
垢版 |
2019/08/19(月) 15:32:03.08ID:ERfcd1se0
なんでいきなりバックグラウンドワーカーが出てきてるか知らんけど、ドゥーワークは別スレッドで実行する内容を記載するところで、UIスレッドにアクセスしたらダメ→コントロールを触ったらダメ
リストボックスにアクセスしたかったらリポートプログレスもしくはコンプリートでUIスレッドにマーシャリングしてから
0375デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 16:32:24.93ID:VzpEDBAc0
簡略化して書いていますが凄い長い計算なので計算中でもプログラムが反応する様にbackgroundWorkerにしています
backgroundWorkerかでなくとも、他クラスからフォームをいじるということが出来なくて困っています
0377デフォルトの名無しさん (ワッチョイ 8b7b-Xlup)
垢版 |
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」をループさせてもいいんじゃないの
0380デフォルトの名無しさん (ワッチョイ 7b05-K1Ve)
垢版 |
2019/08/19(月) 20:31:39.57ID:VzpEDBAc0
Invoke調べてみました。いけそうな気がしますが書き方が難しいです
上記のコードの場合どのように記述すれば良いのでしょうか?
0382デフォルトの名無しさん (アウアウカー Sa15-cJb6)
垢版 |
2019/08/19(月) 20:46:44.95ID:cJsYlnhia
パッと見で適当だけど、formにコントロールの変更記述して、コールバック登録してtaskはしらせればいいの違うのか?invokeは当然
0384デフォルトの名無しさん (ワッチョイ d968-2U8j)
垢版 |
2019/08/19(月) 22:54:50.46ID:aQCsW5pK0
doubleって整数のほうに偏りがあったら
小数部分は短い精度になるんですが、これ何とかなりませんか?
doubleは精度高いから小数点第5位とか精度余裕だろwwwwwwwwwww

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

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

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

一般論として、演算誤差を累積させずに
演算可能かどうかはどういう演算をしてるかによるので、
具体的な処理が分からないと何とも言えん
0390デフォルトの名無しさん (スププ Sd33-/7bP)
垢版 |
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間で通知する方法がよくわかりません。
0391デフォルトの名無しさん (ワッチョイ 0bda-dCD9)
垢版 |
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間で通知する方法がよくわかりません。
の意味が分からないんでもう少し詳しく
0392デフォルトの名無しさん (ワッチョイ 13ad-gVUp)
垢版 |
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; } //変数を経由して外側でスローする
0393デフォルトの名無しさん (アウアウウー Sa5d-woyF)
垢版 |
2019/08/20(火) 01:15:05.72ID:zheL5RcIa
>>390
Formだろうが何だろうが、操作したい側が操作対象の参照を握れば良いだけだけど、
親子関係が成立しているとか特殊な前提がなければ、Formが別のFormの参照を
握るのはあんまり良くない。

原則論を言えばそもそもFormにUIと無関係の処理を書く時点で間違っている。
0394デフォルトの名無しさん (ワッチョイ 13ad-gVUp)
垢版 |
2019/08/20(火) 07:52:56.91ID:yjnOK/Bv0
UIと関係あるからフォームなんだろうけど…

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

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

前のいじり方を残すために、閉じても隠すだけで、同じインスタンスを再表示したい場合とか
0396デフォルトの名無しさん (ワッチョイ b32d-bnMF)
垢版 |
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 が使われるのか、って意味です。
0398デフォルトの名無しさん (ワッチョイ b32d-bnMF)
垢版 |
2019/08/20(火) 12:17:12.47ID:NghMzgaN0
自作DLL 側の System.Windows.Forms を見たら
特定バージョン:false
になっていたので、呼ばれる側のバージョンの System.Windows.Forms.dll が使われるってことですね。

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

カウントダウンにマルチスレッドが必要とは限らんが
むしろモーダルだったり
でも「オブジェクトがあれば必ず「通知」できる」という方法は確立しといた方が、オブジェクト指向っぽい
クラスオブジェクト指向の前にメッセージオブジェクト指向があったので(Win32API)
メッセージ、つまり「通知」
0400デフォルトの名無しさん (スププ Sd33-/7bP)
垢版 |
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();

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

}
0403デフォルトの名無しさん (ワッチョイ da47-9WLl)
垢版 |
2019/08/22(木) 16:50:43.33ID:xQsiKIbM0
出来るけど利用規約読め
API経由だとセーフで
API経由しないと逮捕とか書いてあるから
0409デフォルトの名無しさん (スププ Sd9a-kbW9)
垢版 |
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 更新
}
0410デフォルトの名無しさん (スププ Sd9a-kbW9)
垢版 |
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; }
}
0411デフォルトの名無しさん (ワッチョイ 6568-CMhc)
垢版 |
2019/08/24(土) 00:16:35.07ID:EZ15JXYo0
アホな質問ばっかですいません
光速の計算をしたいんですが、doubleでは無理ですか?
decimalは使いません
お願いします。小数点以下が信用できません。
0414デフォルトの名無しさん (ワッチョイ 4501-AdB2)
垢版 |
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のインスタンスがないから実行できません
みなさんはクラスのログなどをテキストボックスに送るとき、どう書かれてますか?
0415デフォルトの名無しさん (ワッチョイ d67b-F52R)
垢版 |
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から呼び出す
0418デフォルトの名無しさん (ワッチョイ d67b-F52R)
垢版 |
2019/08/24(土) 15:45:48.43ID:BNVmeU2m0
>>416
インスタンスをどう指定していいかわからないんじゃなかったのか
親子関係にあるウィンドウでの操作はいろんなアプリで普通にあるし
C#だけにしても「C# 別のフォームのコントロール」でググればやっているところはいっぱい出てくる
0419デフォルトの名無しさん (アウアウウー Sa09-Aknt)
垢版 |
2019/08/24(土) 15:56:01.09ID:dsz+mirUa
>>416
非推奨というか、普通はやりたいと思わないね。
何かの参照を握るってことはそれに依存してしまうってことだから。

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

他で使う予定ないからそれで問題ないと思うかもしれないが(以下略
0420デフォルトの名無しさん (ワッチョイ 4501-AdB2)
垢版 |
2019/08/24(土) 19:37:50.96ID:VP6gB9DD0
>>417
確かにコントロールというぐらいだし

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

>>419
さんくす、なるほどパーツとして完成してないですね
汎用性の低いコードは改善しないと、でも今回はこれでいきます
logの取り方考えないと
0421デフォルトの名無しさん (ワッチョイ 7a79-BXNL)
垢版 |
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;
 }
 :
}
0425デフォルトの名無しさん (アウアウウー Sa09-Aknt)
垢版 |
2019/08/24(土) 23:15:15.44ID:dsz+mirUa
>>423
理解しなくていいよw
デリゲートを直で受け渡しなんかせず、素直にイベントの方を使いましょう。
0431デフォルトの名無しさん (ワッチョイ cdb0-lNpu)
垢版 |
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));
こんな風に書けたらいいのにって感じです
0432デフォルトの名無しさん (ワッチョイ 4501-AdB2)
垢版 |
2019/08/25(日) 09:33:25.01ID:NieUwdLz0
>>424
さんくす、スマートに書けそうですね、他の人もさんくす、ただ考え中
>>425
今回はイベントで、ただデリゲート勉強するいいちゃんす
>>429
さんくす、ググったら実現したいことをピンポイントっぽい
>>430
さんくす、binding、さらにむずい、今までと違うアプローチっぽい
0433デフォルトの名無しさん (アウアウウー 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));
と書けたところでたいして嬉しいと思えんけど
0435デフォルトの名無しさん (ワッチョイ baf9-RyRR)
垢版 |
2019/08/25(日) 22:03:25.03ID:4LqybIGY0
Formのプログラムで普通に動作してたOpenFormDialogを使ってる箇所が突然フリーズしてしまいます。
一旦そうなるとWindows自体が不安定になり、他のプログラムで恐らくOpenFormDialogを使ってる所が全てフリーズしOSの再起動が必要になります。
どんな要因が考えられるでしょうか。

プログラムはかんたんなグラフィックエディタで矩形やテキストを移動したり変形する程度です
0439デフォルトの名無しさん (ワッチョイ 3a89-lNpu)
垢版 |
2019/08/26(月) 01:40:22.77ID:YZSrPKBs0
List<Employee> のIDとList<int> の一致するEmployeeを取得したいです。

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

これのforeachを撲滅して簡潔に書きたいのですがいい方法はありますか?
0446デフォルトの名無しさん (アウアウウー Sa09-Aknt)
垢版 |
2019/08/26(月) 12:01:50.23ID:EHOEsFfWa
地下鉄漫才かよw
0453デフォルトの名無しさん (ワッチョイ 99b0-P0k6)
垢版 |
2019/08/27(火) 19:15:36.40ID:4aKZbpn00
次のようなことをしたいのですが、どうすればいいでしょうか。
async、awaitを使えばいいようにも思えたのですが、クラス内のループが止まらず・・・

1.ボタン押下でとある処理をするクラスのインスタンスを生成し、クラス内で処理を無限ループ
2.ボタン押下でクラス内のループを停止
0454デフォルトの名無しさん (ワッチョイ d67b-F52R)
垢版 |
2019/08/27(火) 19:21:08.99ID:a3Zgv65M0
>>453
ループさせているクラス内に止めるメソッド付けてボタン押したときにそれ呼び出せばいいだけでは
イベントメソッドは別のクラスでもできるから直にボタンのイベントに追加してもいいし
0458デフォルトの名無しさん (ワッチョイ 99b0-P0k6)
垢版 |
2019/08/27(火) 21:12:50.98ID:4aKZbpn00
皆さん、ご回答ありがとうございます。

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

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

>>456
すみません。フラグでの終了処理しか思いつきませんでした・・・
もう少しマシな実装になるとどうなるのでしょうか。
教えてもらえると助かります。
0461デフォルトの名無しさん (ワッチョイ 99b0-P0k6)
垢版 |
2019/08/27(火) 22:40:07.64ID:4aKZbpn00
すみません・・・
あるフォルダにファイルが保管されたときに
そのファイルを処理したくて監視に無限ループを使ってしまいました。
他に良い方法があれば、お教え願えないでしょうか。
0473デフォルトの名無しさん (スププ Sd9a-kbW9)
垢版 |
2019/08/28(水) 20:18:04.95ID:h4zgSqGZd
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

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

上のメソッド使えば行けそうなんだけど、行き詰まってます。
0475デフォルトの名無しさん (ワッチョイ d67b-F52R)
垢版 |
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で指定したらそこに戻ってくる
0477デフォルトの名無しさん (ワッチョイ 9a07-kbW9)
垢版 |
2019/08/28(水) 23:50:51.61ID:RWMmexzc0
>>475
ほぼそのまんまのサンプルを見つけて問題はとりあえず解決しました。

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

アクティブウィンドウのクライアント領域の取得は、
c# + netframework ではできないのですか?
0480デフォルトの名無しさん (ワッチョイ d1da-ca7b)
垢版 |
2019/08/29(木) 01:53:51.70ID:KY//KYCr0
TreeViewの表示を標準の
項目1
┗項目2
  ┣項目3
  ┗項目4

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

にするにはどうすればよいでしょうか?
0485デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 21:10:43.61ID:euEksp6k0
ドラッグアンドドロップで拡張子を.txt→.jsonに変更するプログラムのコードをください
0487デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 21:18:37.15ID:euEksp6k0
renameするだけですね
どうしてもC♯でやりたいんです
0489デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 21:39:06.95ID:euEksp6k0
一日ググってもわからなかったので聞きに来ました
0493デフォルトの名無しさん (ワッチョイ 9963-n2vT)
垢版 |
2019/08/30(金) 22:17:38.29ID:a95S+czO0
どこがわからなかったのかくらい書いてくれないと説明できんよ
ドラッグアンドドロップの受け取り方?
拡張子の変え方?
コンソールアプリなの?デスクトップアプリなの?
0497デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 22:47:12.10ID:euEksp6k0
http://ideone.com/4eJIcv
これで貼れてますか?フォームアプリケーションです。
ここの57行目のファイルのパスをドラッグアンドドロップして得たパスに変更したいんですけどうまくいかないんですよね
0498デフォルトの名無しさん (ワッチョイ eb7b-OHvC)
垢版 |
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"));
 }
}
これでいいでしょ
ボタンクリックでやりたいのならフィールドでファイルパス持たないと
0499デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/30(金) 23:12:12.27ID:euEksp6k0
>>498
できました、ありがとうございます
こんな簡単だったんですね・・・・・・
0508デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/31(土) 15:26:10.82ID:pxkHJ9ge0
クロームにURL開かせるプログラムって作れるのかな
0509デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/08/31(土) 15:34:24.66ID:pxkHJ9ge0
標準ブラウザで開くのがありました
0515デフォルトの名無しさん (ワッチョイ 5124-kL5O)
垢版 |
2019/09/02(月) 13:12:29.24ID:x5YZ9uix0
Span<T>をコレクションに貯める事って出来ないんでしょうか?
受け取ったbyte[]から一部のみを必要としていますが、startIndexとlengthを一々記録するのも面倒であるため、現状は新たにnew byte[length]を作りコピーをして貯めています
別にこれでも全く困っていませんが、あんまりスマートではない気がしているので元のbyte[]を.AsSpan(startIndex, length)したものをコレクションに貯められればスッキリするのですが
0518デフォルトの名無しさん (ワッチョイ 132c-cmxz)
垢版 |
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
0525デフォルトの名無しさん (ワッチョイ d101-drPI)
垢版 |
2019/09/03(火) 15:02:01.60ID:qa0OGce90
zipファイルのパスワード総当たりのコードってどこかに落ちてたりしません?
0526デフォルトの名無しさん (アウウィフ FF55-ca7b)
垢版 |
2019/09/03(火) 15:23:56.69ID:gWEsYspAF
ム板なんだし自分で書いても大した手間じゃないだろ
0532デフォルトの名無しさん (スププ Sd62-5A7B)
垢版 |
2019/09/05(木) 12:52:58.36ID:IuZ8kmLDd
メインフォームと5つボタンがあるサブフォームあります。

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

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

これ循環参照にならないのですか?
owner プロパティならフレームワークでうまくやってくれそうですが、そうしないなら典型的な循環参照でメモリにいつまでも残るように見えます。
0538デフォルトの名無しさん (ササクッテロ Spf1-SwPx)
垢版 |
2019/09/06(金) 12:21:39.70ID:5uKlWCRxp
バカ、逆に非同期の仕組みが分かりにくい事になってて最悪だわ。
若い奴らはある種のおまじないとしか思って無いぞ。
だからサンプル通りに書いたら動いたで思考停止してるわ。
0542デフォルトの名無しさん (ワッチョイ 4224-stHu)
垢版 |
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);
}
}
0546デフォルトの名無しさん (スップ Sd62-aA0m)
垢版 |
2019/09/06(金) 20:41:34.27ID:QErA9RfTd
return HttpResponseMessage {
StatusCode=HttpStatusCode.InternalServerError


これでクライアントにレスポンス返しても、クライアントで受け取ったレスポンスコードが200になるんだが、どうすりゃ良い?
0549デフォルトの名無しさん (アウアウウー Saa5-DVh7)
垢版 |
2019/09/07(土) 00:35:07.80ID:lng4b11Wa
ぶっ飛んでるねw
0553デフォルトの名無しさん (アウアウウー Saa5-4tq8)
垢版 |
2019/09/07(土) 01:30:36.24ID:spGdC07na
型変換か?
0559デフォルトの名無しさん (ワッチョイ 8990-uegj)
垢版 |
2019/09/07(土) 11:14:11.92ID:LlCffhcK0
https://www.youtube.com/watch?v=O8ucIQA829w
Introduction into StockSharp training course

どうこれVisual Studioってこんなに速く作れるの?
自分で自動売買ソフト組めるってすごくね?
0560デフォルトの名無しさん (ワッチョイ c294-OrRa)
垢版 |
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 で実行しました。
よろしくお願いいたします。
0561デフォルトの名無しさん (スププ Sd62-5A7B)
垢版 |
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 を受け取り、これで処理を分岐。
これだと呼び出し側が少し膨らむと思って探していたサンプルが上のやつです。
0562デフォルトの名無しさん (ワッチョイ ed7c-p7Vf)
垢版 |
2019/09/09(月) 14:01:51.48ID:FLVXg6p/0
>>560
type of
0563デフォルトの名無しさん (ワッチョイ be7c-gJmI)
垢版 |
2019/09/09(月) 14:25:45.50ID:wj5pBZXU0
>>561
それだけじゃ何とも言えないけど
ダイアログがキャンセルされたかどうかもresultObjsに含んでる
またはキャンセルされたかどうかは重要ではない
のどっちかでDialogResultは不要と考えたんじゃね
あとはただのチェック忘れか
0564デフォルトの名無しさん (ワッチョイ 2eda-ysR5)
垢版 |
2019/09/09(月) 14:33:19.47ID:+8Zg4WGY0
showdialogはあくまでサブフォーム表示中に
処理を進めないためだけに使っていて
表示したサブフォームがOKもキャンセルもない作りなら
返り値を使う必要がないんだろう

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

知らないけど。
0566デフォルトの名無しさん (ワッチョイ c294-OrRa)
垢版 |
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;
}

のようなコードもコンパイルエラーにならないので、
継承関係があることは間違いないと思います。
また何かお分かりのことがあれば教えていただけると嬉しく思います。
よろしくお願いいたします。
0567デフォルトの名無しさん (ワッチョイ be7c-gJmI)
垢版 |
2019/09/09(月) 15:06:55.45ID:wj5pBZXU0
COMにおける継承はメンバを引き継ぐという意味であってキャスト可能かどうかは別の話だから
.NETのコード上で明示的または暗黙的にCOMオブジェクト(のラッパ)をキャストした場合
QueryInterfaceが呼び出されてそのインターフェイスに変換できるかどうかオブジェクト自身に問い合わせる
だから共通型システム的には問題ない暗黙的キャストでもその下のQueryInterfaceで拒否される可能性がある
0568デフォルトの名無しさん (ワントンキン MM92-eDvP)
垢版 |
2019/09/09(月) 19:12:21.94ID:ko6k1+RqM
正規表現を教えてください。
先頭一文字は大文字アルファベット、
次の一文字は大文字アルファベットかスペース、
残り五文字が数字、です。
文字数は多すぎても少なすぎてもダメてす。
0576デフォルトの名無しさん (スプッッ Sd62-A/9M)
垢版 |
2019/09/10(火) 22:30:01.75ID:/j9k/Fivd
>>573
最終型は建築のキープランってものがあって、そこに無数の符号という記号が丸の中に書いてあるんだけどそこを色塗りをしたい。

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

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


C#スレはあったかいな。ありがとうございます!
0578デフォルトの名無しさん (ワッチョイ 8990-uegj)
垢版 |
2019/09/11(水) 18:58:32.68ID:YXyi8nZ+0
フォームってなに?泡?
0580デフォルトの名無しさん (ワッチョイ 9f01-smom)
垢版 |
2019/09/12(木) 11:25:52.65ID:QIiZhm2T0
コントロールのタイマーの質問なんですが
private void Timer1_Tick(object sender, EventArgs e)
{
  MyClass myClass = new MyClass(this);

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

}
こう書くと毎回クラスが初期化されてしまいます
タイマー内で同じクラスのインスタンスを使い続けたい場合どのように書けばいいのでしょか?
0586デフォルトの名無しさん (アウアウウー 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
0588デフォルトの名無しさん (スップ Sd9f-lwUv)
垢版 |
2019/09/13(金) 14:33:13.49ID:FohQxIv6d
>>587
コンストラクタかTickイベント(初回のみ)でTimerのTagプロパティにMyClassインスタンスを設定
senderからTagに設定されているインスタンスを取得して利用するってやり方もある

1タイマー1MyClassって感じの設計ならこっちの方がいいかもね
0592デフォルトの名無しさん (ワッチョイ 9f90-bRiQ)
垢版 |
2019/09/13(金) 17:23:20.15ID:65eTAicb0
マイコラスの嫁がかわいい
0593デフォルトの名無しさん (スップ Sd9f-lwUv)
垢版 |
2019/09/13(金) 17:47:41.70ID:FohQxIv6d
>>590
コンストラクタで、
Timer1.Tag = new MyClass(this);

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

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

でもこんなアホなことやったらあかんw
0595デフォルトの名無しさん (スップ Sd9f-lwUv)
垢版 |
2019/09/13(金) 17:59:46.24ID:FohQxIv6d
捕捉でsenderの扱いに馴染みがなくて分かりずらいなら
var myClass = Timer1.Tag as MyClass;
って直接コントロールを見てもいいかな

10個のタイマーでそれぞれクラス作るとかだと、メンバに持つのが嫌になるからそういう時に便利
0596デフォルトの名無しさん (ワッチョイ 9f01-smom)
垢版 |
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
サンクスです、うまく動きました
でも正直あまり理解できてません

注:理解するのに時間がかかります
0597デフォルトの名無しさん (ワッチョイ 7f07-h/DA)
垢版 |
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);

// 終了条件チェック、
// 終了処理
}
0601デフォルトの名無しさん (アウアウウー 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);
  }
0602デフォルトの名無しさん (アウアウウー 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);
  }
}
0603デフォルトの名無しさん (ワッチョイ ff02-lwUv)
垢版 |
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.//クラスの処理いろいろ
}
0605デフォルトの名無しさん (ワッチョイ 9f24-B34Y)
垢版 |
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は変化なし
0606デフォルトの名無しさん (アウアウウー Sa63-4C4c)
垢版 |
2019/09/14(土) 12:17:37.64ID:iAxlaW7xa
デリゲートは参照型
action += method は文字通り action = action + method であり、結合後の新しいインスタンスが action に代入される
デリゲート同士の + は String と同様に言語仕様によって特別扱いされており、Delegate.Combine メソッドの呼び出しに変換される
ちなみにイベントに対する += は x.ev = x.ev + method ではなくプロパティと同様にxに対する特殊なメソッド呼び出しになる
作法的な話をすると、デリゲートのマルチキャストは歴史的経緯による遺物であり、イベントハンドラ以外には基本的に使わない方がいいよ
0608デフォルトの名無しさん (ワッチョイ 7f07-h/DA)
垢版 |
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 のクラスメソッドに色、透明度、位置、回転、大きさとかを変化させるアニメーション系のメソッド追加してほしいね。
0610デフォルトの名無しさん (アウアウウー Sa63-3FT0)
垢版 |
2019/09/15(日) 11:17:21.32ID:ZbgEJrYza
今でも業務系のASPって、MVCよりWeb formsのほうが多い?
0613デフォルトの名無しさん (エムゾネ FF9f-+dKN)
垢版 |
2019/09/15(日) 14:39:22.86ID:CYqvBFjrF
ASP: Application Service Provider
0615デフォルトの名無しさん (ワッチョイ 9f90-bRiQ)
垢版 |
2019/09/15(日) 17:46:02.32ID:tc+PQ4bB0
アスペルガー
0618デフォルトの名無しさん (スププ Sd9f-QgVy)
垢版 |
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
0619デフォルトの名無しさん (アウアウウー Sa63-3FT0)
垢版 |
2019/09/15(日) 22:04:55.99ID:ZbgEJrYza
>>610です
>>612
ごめんなさい。自分が端折ってしまったのがいけませんでした。ASP.NETです
>>611
やはりそんな感じなんですかね。意外とASP.NET関連の求人が多いので保守メインなのか開発メインなのか気になったもので
0621デフォルトの名無しさん (ワッチョイ 7f89-6eqr)
垢版 |
2019/09/16(月) 01:27:46.19ID:2BSu07WM0
Bitmapを返すdllがあります(C#で作成)
それをWinFormsで参照し、Bitmapを受け取りたいのですが、空の?Bitmapが返ってきます。
デバッガでdll側がきちんとBitmapをreturnしているところまでは確認できました。
ほかにどごを見直せばいいでしょうか
0626デフォルトの名無しさん (ワッチョイ 7fe0-bRiQ)
垢版 |
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();

コンソールアプリはすぐに終了せずに待機してくれるタイプです
0627デフォルトの名無しさん (ワッチョイ 1f5f-+fUR)
垢版 |
2019/09/16(月) 12:42:54.00ID:yFJZVYWt0
>>626
自分でプロセスを起動してるなら入出力をリダイレクトするだけ
psInfo.RedirectStandardOutput = true
psInfo.RedirectStandardInput = true;

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

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

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

// IPrety InterFace で拡張した型ならなんでもループで回せる。
if myUnit.isPrety == true {
myUnit.doSomething();
}
0636デフォルトの名無しさん (ワッチョイ 9f6e-e0wG)
垢版 |
2019/09/17(火) 20:15:43.47ID:4wOD4j6P0
色々勉強になりました
こう共通のメソッドとフィールドがあるからくくりだして親にしようくらいの気持ちだったんですけどぐぐったらそういうのそもそもダメらしいですね
素直に各クラスで同じフィールド定義して継承関係全部なくそうと思います。
0642デフォルトの名無しさん (アウアウウー Sa63-4C4c)
垢版 |
2019/09/17(火) 21:42:46.98ID:hXcOzvgxa
機能を追加するための継承は現代的なOOPではあまり積極的には行われないんだよ
現代的なOOPにおいては実装継承は本質的に悪であるとされ、明確なメリットがある場合を除いて基本的に避けるんだよ
端的に言えば、抽象クラスを定義して、明確に拡張ポイントとして用意されたメソッドのみをオーバーライドする、
という使い方が今時の唯一の実装継承の使い方であると理解しておけばマサカリを食らうことはない
機能を追加したいだけなら継承する必要は全くなくて、ただそれぞれのクラスを別個に使うか、包含すりゃいいだけだ
0643デフォルトの名無しさん (アウアウウー Sa63-3FT0)
垢版 |
2019/09/17(火) 21:44:46.02ID:02KenGFka
それほんとにその親いる?って感じの実装だったらabstractにするんじゃなくて?
0644デフォルトの名無しさん (アウアウウー Sa63-3FT0)
垢版 |
2019/09/17(火) 21:45:27.86ID:02KenGFka
あっ被った?
0646デフォルトの名無しさん (ワッチョイ 9f8f-cC2p)
垢版 |
2019/09/17(火) 23:46:29.64ID:e7oun/vJ0
すみません、初歩的な質問なのですが、クラスやらメソッドやらメンバーやらにアクセシビリティを設定するのは、他の誰かが使用するライブラリーを作成することを想定しているからなのでしょうか?
できるならpublicだらけで作りたいのですがそれがどんな問題に繋がるのかわからずモヤモヤしてます。
0651デフォルトの名無しさん (ワッチョイ 7f52-ErpI)
垢版 |
2019/09/18(水) 00:46:19.09ID:XJgNYgHy0
>>648
わざわざ言語仕様にダウンキャストがあるのはそれが有用だからで、使っていけないわけではないよ。下手な設計で濫用されるのが非難されるだけで、適切な使い方をする分には問題ない。
理由も説明せずに杓子定規に◯◯は使うななんて書いているサイトがあれば、おそらくその書き手もちゃんと分かってないと疑ってかかった方がいいくらい。
0652デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/18(水) 01:18:05.53ID:cuUyZOV2a
>>650
普通に考えて問題だから真に受けたらあかんw

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

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

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

本質的に重要なのは見えるメンバーの数を減らして複雑性を下げ、生産性を上げること。
時間が一番貴重なんだから
0659デフォルトの名無しさん (ファミワイ FFc3-XoCL)
垢版 |
2019/09/18(水) 14:09:46.88ID:uVuJujwEF
Process.Startにディレクトリを渡すとエクスプローラで開いてくれるけど、同じことをスマホなどMTP接続されたデバイスのフォルダでやりたいのですが
エクスプローラでスマホのフォルダを開いた時のウインドウタイトル(PC�fバイス名�`)を渡してもエラーになります。
ProcessでMTPのフォルダを開くことは出来るでしょうか?
0660デフォルトの名無しさん (アウアウウー Sa63-THJG)
垢版 |
2019/09/18(水) 14:50:14.61ID:9K+6bCRKa
>>659
MTPってことはPCからはストレージに見えてるってこどだよね?
普通にそのパスを渡すだけじゃないの?

ドライブレターが不変じゃないのが困るってこと?
0662デフォルトの名無しさん (ワッチョイ 9fda-x87D)
垢版 |
2019/09/18(水) 15:11:26.73ID:n4vg2Vie0
ああごめん、スマホをデバイスとしてPCに刺してる場合ね

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

エクスプローラのexeにパスを引数で渡して起動するよりないんじゃね
0669デフォルトの名無しさん (ワッチョイ 46de-YXlV)
垢版 |
2019/09/19(木) 07:20:07.81ID:2k5+XP3O0
文字列を検索して文字数と行数を同時に取得する方法はないでしょうか?

VisualStudioのフォルダ検索みたいにヒットした行の行数と内容を表示して
ダブルクリックで該当ファイルを表示→選択箇所へジャンプとかやりたいです
0675デフォルトの名無しさん (ワッチョイ 4dde-YXlV)
垢版 |
2019/09/19(木) 13:00:06.50ID:cKzRnh020
>>674
なるほど
地道にやってんすね

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

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

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

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

ってことかw

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

あとtextboxなら折り返し込みで
文字インデックスから行に変換する
メソッドがあった気がする
0678デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/19(木) 14:58:17.90ID:R2S0qhpOa
検索される文字列が巨大だった場合Splitはさすがに富豪的過ぎるでしょ。
RegexかString.IndexOfでベタにやった方が
0680デフォルトの名無しさん (ワッチョイ 11da-7ma+)
垢版 |
2019/09/19(木) 15:41:06.68ID:6IKimtYb0
ググったらreplaceを使ってlengthの差で求める方法があったけど
これも一時的にメモリ上で二重化されるから
巨大なログファイルとかだとあまりいい方法ではないな

IndexOfの検索結果を次の検索開始インデックスにしながら
カウントするのが一番楽で無駄がなさそうだ
0681659 (ワッチョイ 6ed8-U1xq)
垢版 |
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")というようにディレクトリを追加すれば、そのフォルダを開いてくれます。
0682デフォルトの名無しさん (ワッチョイ c95f-ACnl)
垢版 |
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が重複している情報を取得と排除したいんですがループでチェックするのは時間がかかりすぎるので
簡単で早く処理できる方法はないでしょうか?
0684デフォルトの名無しさん (ワッチョイ 217b-qZEh)
垢版 |
2019/09/20(金) 00:15:52.99ID:MWgaILTA0
>>682
個々の要素参照するんだからループするしか無いんじゃないの
あらかじめどこか他にデータ持っているのならともかく
簡単にというのなら参照したデータをList<T>に入れていけばList<T>.Containsでチェックできる
0686デフォルトの名無しさん (アウアウウー Sa85-9Tgq)
垢版 |
2019/09/20(金) 00:20:11.39ID:H/0RNa6Fa
>>682
普通のListで「全要素について、別の要素と重複があるか」をチェックしようとしたらO(N^2)になるから
効率よくしたいならHashSetを使うといい
ただEquals()とGetHashCode()を適切に(今回の場合、setTime, Name, Ageだけで決まるように)実装する必要がある
0690デフォルトの名無しさん (アウアウウー Sa85-9Tgq)
垢版 |
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()の実装は必要なはず
0691デフォルトの名無しさん (アウアウウー Sa85-TrZH)
垢版 |
2019/09/20(金) 00:41:13.96ID:WJxc7oYHa
>>689
質問の感じから今現在自分で実装したものがあるんでしょ?それを載せたほうが微妙な解釈の違いに対しても最適解が出してもらえそうな気がするけど
0693デフォルトの名無しさん (ワッチョイ c95f-ACnl)
垢版 |
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;
}
}
0694デフォルトの名無しさん (ワッチョイ c95f-ACnl)
垢版 |
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は使っていなかったので駄目なのかな
0698デフォルトの名無しさん (ワッチョイ 0279-Ms+D)
垢版 |
2019/09/20(金) 01:35:53.41ID:JBznBYO/0
ライブラリ作ってるわけでもないのにunsafeとか論外なんだが

その上unsafe付けてやることが2重ループでの完全一致検索とかじゃ
どうせHashSetのパフォーマンスに大敗する
0700デフォルトの名無しさん (ワッチョイ aeda-Ms+D)
垢版 |
2019/09/20(金) 11:53:09.00ID:URFVhEsV0
git使わずに、自宅のデスクトップ環境とノートPCのプロジェクトファイル類を同期させたいです。

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

VSTSで上記を実現または他の方法あったりしますか?
ちなみに現在はVS pro サブスクリプションに入ってます
0703デフォルトの名無しさん (スッップ Sd22-wC8D)
垢版 |
2019/09/20(金) 12:02:42.34ID:bfuJBtmYd
svnを使う
onedrive以外の場所で開発してonedriveフォルダに必要なファイルを同期ツールとかでローカルコピーするようにする

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

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

作業フォルダをOneDrive内に置いて自動的に同期もやったけど、objとかが共有される問題よりも、同時に開いて悲惨なことになる事があったので、今はしてない。
(競合したら「もとのファイル名-端末名」ってファイルが大量にできる)
0709デフォルトの名無しさん (ワッチョイ 6990-jgJV)
垢版 |
2019/09/20(金) 17:01:09.25ID:9F0x+J+E0
メモリ消費は税のようなもの
しょとくだけに
消費だけに
0711デフォルトの名無しさん (ワッチョイ 6e7b-25Vu)
垢版 |
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の表が同じに見えるのならそうかもね
0712デフォルトの名無しさん (ワッチョイ c245-Iqd1)
垢版 |
2019/09/21(土) 10:00:25.29ID:DmWWMvK20
コンソールアプリが作れればいいやと思ってpaizaでシコシコ勉強してますが他にどんなことすればいいですか?
目標は外部のファイルを読み込んでコンバートするアプリを作ることです。
0714デフォルトの名無しさん (アウアウエー Sa0a-o9zd)
垢版 |
2019/09/21(土) 11:05:31.91ID:wLZyePcca
プログラミング未経験者です
すいません、ちょっと趣旨から外れるかもしれませんが質問です

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

C#の求人や書籍を検索すると、電気回路の制御ソフトとか計測器制御とかがヒットするので気になって質問させていただきました
0716デフォルトの名無しさん (アウアウウー Sa85-TrZH)
垢版 |
2019/09/21(土) 11:42:35.85ID:uzyGV4kra
>>714
FAの制御系だったら測定器やPLCとの通信がメインになるからそれなりに知識あったほうがいいとは思うよ
0721デフォルトの名無しさん (ワッチョイ ae2d-Z796)
垢版 |
2019/09/21(土) 14:57:58.99ID:8edEcM0R0
すまんが、スレッドを指定して実行ってできないもんなの?
指定できればロックが必要な箇所が減っていい気がするんだけど・・・・どうなんだろう
0726デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 17:41:38.79ID:dMKiDHPTa
>>724
どんな使い方を想定してるの?
っていうかそれ、呼び出されたアンマネージド関数側はどうしたらいいの?www
0728デフォルトの名無しさん (ワッチョイ 4d0c-Ms+D)
垢版 |
2019/09/21(土) 17:57:47.91ID:rw4WtgZd0
まあどのみち今のところできないから、いんぽ関数自体はIntPtrで受け取って
Marshal.PtrToStructureとかでごにょごにょするジェネリック関数でラップする感じでやるしかないね
SystemParametersInfoとかでそういう欲求があること自体はわかる
0731デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 18:32:15.65ID:dMKiDHPTa
十分突飛だと思いますけどね。

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

だから、呼ばれた側は何すりゃいいんだよw
0733デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/21(土) 18:44:55.69ID:dMKiDHPTa
>>732
そういうのは共用体とかオーバーロードで解決できるでしょ。
ジェネリックを使うって発想は意味不明だよ
0734デフォルトの名無しさん (ワッチョイ 1124-JE5y)
垢版 |
2019/09/21(土) 18:46:58.39ID:3kDOCDXv0
>>726
具体的にはLPVOID引数で自己責任ながら参照型からref、outやintなどの値渡しまで色々な型のオーバーロードを作って実際にちゃんと機能しています
なので一々オーバーロードとそのラップだけで30行ほど使ってしまってる現状が無駄に思えてどうにか方法ないかなと
0735デフォルトの名無しさん (ワッチョイ 4d0c-Ms+D)
垢版 |
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
0746デフォルトの名無しさん (ワッチョイ 829f-cF+R)
垢版 |
2019/09/22(日) 09:28:54.26ID:p/RNYxc40
>>726
dllってことは既にasm化されてるんだから型なんて関係なく受け取ったもんを問答無用でバイナリとして処理するだけだろ
C#はそういうのをコーディング段階で防いでるだけであって
0747デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/22(日) 12:11:14.62ID:PittLpUUa
>>746
〜だろ
馬鹿ほどぞんざいで偉そうな口調なのは法則なのかねwww
0748デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/22(日) 12:16:38.76ID:PittLpUUa
少なくともC#のジェネリックはstringとbyte[]を透過的に扱ったり、
longをint2つと透過的に扱ったりするための仕組みじゃありませんwww

だからそういうのは共用体やオーバーロードを使うんだってw
0750デフォルトの名無しさん (ワッチョイ 02e0-jgJV)
垢版 |
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);
0752デフォルトの名無しさん (ワッチョイ 02e0-jgJV)
垢版 |
2019/09/22(日) 22:53:39.23ID:584djEVu0
>>751
baseBMPからrectで切り抜いてますが、trimBMPにとってはrectは全面だと思うのですがダメなのですかね?

でも
Bitmap bmp = new Bitmap(100,100)
みたいな素画像でもやっぱりLockBitsできないです
0753デフォルトの名無しさん (ワッチョイ 6e7b-25Vu)
垢版 |
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できないです
できる。そっちもちゃんと引数の指定してみて
0754デフォルトの名無しさん (ワッチョイ a207-vIUH)
垢版 |
2019/09/23(月) 01:34:07.15ID:CAyWI0VB0
private Point CalcPopupLoction(Form launcher, Form popupForm) {}

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

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

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

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

void ShowModalPopup(Form popup)
みたいなメソッドを持たせればいい
0758デフォルトの名無しさん (アウアウウー 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
0759デフォルトの名無しさん (ワッチョイ 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");
}
0761デフォルトの名無しさん (アウウィフ FF85-9GzD)
垢版 |
2019/09/23(月) 12:17:14.67ID:3qdqqJ07F
bitmapinfo とか
dibsection とか
bitmapinfoheader とか
勉強してみたら
0764デフォルトの名無しさん (ワッチョイ c135-2BIS)
垢版 |
2019/09/23(月) 15:46:49.67ID:s6/Kehza0
>>763
ありがとうございます!
0767デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/23(月) 22:40:56.88ID:6ZQTgZjHa
>>766
交通整理バカw
設計が間違ってるのに名前付けて何の意味がある
0770デフォルトの名無しさん (ワッチョイ 0279-McVF)
垢版 |
2019/09/24(火) 00:01:07.45ID:OEzHH54a0
>>754
・Loctionて何
・ボタンの置いてあるオーナーウィンドウと対象のボタンを引数に取った方がいいと思う
・計算だけなら全部Rectangleでいいんじゃないの
Rectangle CalcPopupLocation(Rectangle Owner, Rectangle TargetButton, Rectangle Popup)
0771デフォルトの名無しさん (アウアウウー Sa85-dxf9)
垢版 |
2019/09/24(火) 00:03:53.21ID:ftn8dtDua
>>769
だからさ、そのメソッドをどこに書くおつもり?

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

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

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

だけだね
0773デフォルトの名無しさん (ワッチョイ a207-vIUH)
垢版 |
2019/09/24(火) 11:39:03.69ID:vbZsX/Wo0
書き込みは、人を憎んでコードを憎まずのこころで行いましょう。

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

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

https://www.google.co.jp/amp/s/anond.hatelabo.jp/touch/20180319181104%3fmode=amp
0775デフォルトの名無しさん (エムゾネ FF22-9GzD)
垢版 |
2019/09/24(火) 14:58:01.43ID:oiN+60axF
性格はコードに滲み出るよ
0776デフォルトの名無しさん (ワッチョイ 216e-iM7L)
垢版 |
2019/09/24(火) 23:29:02.86ID:OoYPx0Tk0
性格は分からないけど姿勢みたいなものは見えると思ってる
こんなコピペばかりして少しはおかしいと思わないのかな?とかこんな古い書き方して言語の文法ざっとでもいいから一通り見たのかな?とか
いいコードを書こうとしてる人とそうでない人の差ってすごくよく分かる。本当に能力無くて頑張って頑張ってるのにひどいって場合もきっとあるんだろうけど
0777デフォルトの名無しさん (ワッチョイ 4690-jgJV)
垢版 |
2019/09/24(火) 23:44:57.44ID:3clb0+hp0
ようわからんけど動いてるからヨシ!
0783デフォルトの名無しさん (ワッチョイ 0279-Ms+D)
垢版 |
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行
0786デフォルトの名無しさん (ワッチョイ c76e-upKm)
垢版 |
2019/09/26(木) 00:08:48.21ID:QoSQSwcY0
>>783
>>switchを使わず延々とif-else if分岐
>>マジックナンバーだらけ
>>クラス内のあらゆる場所から明示されず書き換えられるフィールド
>>メソッド1個300行以上
>>リソースでもFormsでもない普通のクラスが4000行
今直面してるのにまさに当てはまっててもう

>>コレクションはほとんどList
こっちはListどころか配列しか使わないんだぜ。もう書き方が完全にC
0788デフォルトの名無しさん (ワッチョイ 7f63-aXvP)
垢版 |
2019/09/26(木) 00:10:34.86ID:NU/jFtK40
初心者が一見してくそ呼ばわりするコードはたぶんくそじゃない
わかるから細かい粗が目に付く

普遍的恐怖を知るべきだ



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

う そ っ ぱ ち の 名 前
0800デフォルトの名無しさん (ワッチョイ c76e-upKm)
垢版 |
2019/09/26(木) 22:03:13.49ID:QoSQSwcY0
windows formsの書き方についてなんですけど
メイン画面にタブがいっぱいあってそれを切り替えて……みたいなアプリなんです
んで中身見たらFormクラスが1万行オーバーで。画面一つだからって何もかも突っ込んでる感じなんです
画面というかフォーム一つで1クラスみたいなのが通常の書き方なんでしょうか
0803デフォルトの名無しさん (ワッチョイ 7f7b-v5cH)
垢版 |
2019/09/26(木) 22:23:35.32ID:lGqB6oAG0
>>800
「通常」はどうか知らないけど例えば
MDIアプリケーションを作成する
https://dobon.net/vb/dotnet/form/mdiapplication.html
こういう作り方もある
あと一つのフォームに普通のコードはともかくコントロール(InitializeComponentのなか)を多く詰め込みすぎると起動に時間がかかるようになる
現状で問題ないのならそこは気にすることは無いが
0805デフォルトの名無しさん (ワッチョイ c76e-upKm)
垢版 |
2019/09/26(木) 23:38:48.19ID:QoSQSwcY0
なるほど参考になりました。
今思えば既にタブごとに部分クラスわけしてファイル別になってたような気がしないでもない……となると実質一クラス10万行か。笑えない
0815デフォルトの名無しさん (アウアウウー Sa8b-dvEi)
垢版 |
2019/09/28(土) 14:09:54.66ID:51nJyp6ja
そんなざっくりした話じゃ、どうせお前自身のコードのバグだろって
反応しか返ってこないと思うw
0821デフォルトの名無しさん (アウアウウー Sa8b-dvEi)
垢版 |
2019/09/29(日) 03:20:49.12ID:m1n6jIU5a
>>816
使い分けで悩む必要はないと思うよ。
インターフェイスで目的が達成できるならあえて抽象クラスを使う理由はないのだから。

たぶん使い分けが分からないのではなく、インターフェイスの使いどころが分からないだけじゃないのか。
よくわからなくてもとにかく実際コードを書いて使ってみることが重要。
別に難しい話じゃないので使ってるうちに自ずと分かる。たぶん
0823デフォルトの名無しさん (ワッチョイ ff0d-hLG/)
垢版 |
2019/09/29(日) 07:08:46.93ID:5VaVy3IA0
私もよくわからないんですが、インターフェースって実装内容は問わないけどこの名称のメソッドは用意しなさいよってコトですかね?
インターフェースでメソッドを定義しても、継承したクラスがそのメソッド名に合ってない実装をしてしまったらと考えるとインターフェースのメリットがイマイチピンときません
0827デフォルトの名無しさん (ワッチョイ 672c-hHW8)
垢版 |
2019/09/29(日) 11:47:55.74ID:YvnTsZym0
多態で使うんだよ
用意しなさいってのは発想が逆で、インターフェースに定義されているプロパティなりメソッドなりが実装されていることが保障されていると考える
実際の実装は気にせずに呼ぶ側はインターフェースのメソッドを呼べばいい
0828デフォルトの名無しさん (ササクッテロラ Spbb-dakf)
垢版 |
2019/09/29(日) 11:59:54.10ID:J9ITXYeqp
抽象クラスは重複の排除で使う、インターフェイスはテストする時の視点で必要

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

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

良く例示される「動物」クラスで考えると。
・「動物」は動くのだから「移動」メソッドに必然性がある
・だけど「移動」するのは動物だけではない
・いま「移動」と言うメソッドに着目して操作を行いたいとする
・「移動」は動物でも自動車でもロボットでも行う
・でも自動車もロボットも動物ではないのでいからそのメソッドの由来を「動物」クラスに求めるわけにはいかない
・加えて、動物や自動車やロボットに直系する(基底)クラスもない
・故に「移動」メソッドの由来を「動物」クラスにではなく「移動」インターフェイスに求めてみる
・・・的な。
0833デフォルトの名無しさん (オッペケ Srbb-kLFp)
垢版 |
2019/09/29(日) 12:13:32.63ID:INBbqatbr
コンパイル時にエラー吐くならそこでデバッグできる

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

どちらが便利かわかるだろ
0835デフォルトの名無しさん (ワッチョイ 07c5-Mf0M)
垢版 |
2019/09/29(日) 20:03:13.25ID:sVRG+wNI0
先日、マンガ村の運営者が著作権法違反の容疑で逮捕された。

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

c# プログラマはマンガ村管理者と同一人物といえるので、著作権法違反の共同正犯として刑務所にぶち込むべき。
0837デフォルトの名無しさん (アウアウウー Sa8b-EV7r)
垢版 |
2019/09/29(日) 23:37:43.33ID:uMWzDoEma
だって>>831のような解釈は時代遅れだし特にC#(というかMS系)では一般的ではないからな
今時は「動物」という一般的実在だろうが「移動できる」という抽象的性質だろうが区別せず、
実装を限定したくない場合は原則常にインターフェイスを使うのが一般的だ
特にMSの場合は顕著で、ほぼ全クラスの全メソッドをインターフェイスに定義するというスタイルを取ることが多いし、またそれを推奨してもいる
0838デフォルトの名無しさん (アウアウウー Sa8b-dvEi)
垢版 |
2019/09/29(日) 23:56:27.42ID:8QPFQcOxa
ほんとかよそれwwwww
0840デフォルトの名無しさん (ワッチョイ 677d-S/NQ)
垢版 |
2019/09/30(月) 00:22:33.73ID:LVz3OUV70
今年始めた初心者だが
クラスが大カテゴリ
メソッドが小カテゴリ
インターフェースが小カテゴリらの存在を保証する中カテゴリ
このくらいの認識しかなかったわ
0842デフォルトの名無しさん (ワッチョイ c7ad-c9EJ)
垢版 |
2019/09/30(月) 00:57:12.69ID:PJtB8DfJ0
831 だけど。

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

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

Form1_Loadに書けばいいような気がしますが引数がわからない
0853デフォルトの名無しさん (ワッチョイ c701-2qxP)
垢版 |
2019/09/30(月) 09:58:04.89ID:fD1lXHN30
>>852
レスサンクスです
Delayでぐぐってみましたが、プログラムを遅延させるほうのDelayばかりヒットして
なかなか見つかりません、Timerのプロパティにそういうなのがあればいいんですが
0856デフォルトの名無しさん (ワッチョイ c701-2qxP)
垢版 |
2019/09/30(月) 10:40:02.13ID:fD1lXHN30
>>854
サンクスです
Timer1_Tickの中の処理をゴソっと別にうつすんですか、確かにうまくいきそうですね

>>855
さんくすです
Timer1.Interval = 100;からTimer1.Interval = 5000;に変更ですか
これもうまくいきそうですね、厳密な秒数は必要じゃないですし
0857デフォルトの名無しさん (アウアウウー 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が呼ばれる可能性が
あることは注意する必要がある。(実際にはないと思うけど)
0860デフォルトの名無しさん (ワッチョイ 7f2d-Jn7s)
垢版 |
2019/10/02(水) 01:49:10.77ID:4PgWnh+40
非同期メソッドでちょっとだけ同期処理するのにはどうすれはいいのですか?

async Task ABCasync(){
ABCasyncの呼び出し元には、終わるまで待っていてもらいたい処理();
//ここでtaskで呼び出し元に何かを返せたりするのかしら?
ABCasyncの呼び出し元には、待っていてもらう必要のない処理();
}
0868デフォルトの名無しさん (ブーイモ MM0b-upKm)
垢版 |
2019/10/02(水) 12:12:09.33ID:VOEDuxVKM
>>865
じゃぁ男女別は?
どっちのクラスが上位なの?
それとも同格で、男戦士 女戦士ってなるの?

半魚人タイプとか4足系の戦士は?
0869デフォルトの名無しさん (オッペケ Srbb-kLFp)
垢版 |
2019/10/02(水) 12:26:49.61ID:9X+f8gXkr
出来ることが変わらないなら基本変えなくていいよ
設計次第だけど

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

コードが共通になるなら基本的に分けなくてもいい
0872デフォルトの名無しさん (アウアウエー Sa52-8ogf)
垢版 |
2019/10/03(木) 00:57:21.26ID:z1GHd6rla
質問です
工場とかインフラの制御ソフトモドキを成果物としてWindowsアプリケーションの形式でC#で作りたいんですが、この2冊終わった後にWindowsアプリケーション開発の本買うなら何が良いですか?
また、本が時間の無駄だとしたらどこのサイトを参照すれば良いですか?
上記の件よろしくお願いしますm(_ _)m

1冊目 なるほどなっとくC#入門
2冊目 C#プログラミングのイディオム/定石&パターン
0875デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/03(木) 01:19:35.07ID:pRlPv1jza
>>872
FormならGUIの作り方は必用なことをググって調べながら実際に作ってみるのが一番。
本は1冊以上は読むだけたぶん時間の無駄。

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

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

突然書き込み中のファイルがぶっ壊れそうで怖いわ
0879デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/03(木) 01:45:45.89ID:pRlPv1jza
>>878
そうかもしれないけど拡張ボードの型式でライブラリはアンマネージドdllだけかもしれない。
USB接続でアンマネージドdllの可能性もある
何とも言えない
0884デフォルトの名無しさん (ワッチョイ 6a2c-qxT7)
垢版 |
2019/10/03(木) 20:27:59.44ID:AKImZpfb0
正直設計を考え直した方がいいけど
メインスレッドで動作してる間に
TaskScheduler.FromCurrentSynchronizationContext()
でTaskScheduler確保しておいて、その"別スレッド"内で
new Task(() => DoSome()).RunSynchronously(taskScheduler)
する
0888デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/04(金) 01:26:24.02ID:oVLixzTMa
>>883
やっぱりそういうのは非UIスレッドからも呼び出せるようにする、ではなく、
逆に普通にUIスレッド専用のメソッドとして提供して、
もし必要ならXMLコメントとかで「UIスレッド以外からの呼び出し禁止」って
明示するのが筋なような気がするw
0891デフォルトの名無しさん (アウアウウー 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();  
}
0893デフォルトの名無しさん (ワッチョイ 5d01-iyyE)
垢版 |
2019/10/05(土) 10:15:38.99ID:hjSAU91p0
質問なんですが
設定ってどこにどうやって保存してますか?
.configが今ならベストなんでしょうが、保存先が
C:\Documents and Settings\UserName\Local Settings\Application Data\
になり、.iniのように、アプリをコピーで2つの設定が使えるようになりません

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

インストーラーではなく、ZIPとかで配布で、ちいさなアプリで、主にシングルユーザーで
ってなると.iniになるんでしょうか?
0899デフォルトの名無しさん (ワッチョイ b67c-MsYi)
垢版 |
2019/10/05(土) 10:47:20.84ID:xk/GxZ7j0
jsonもxmlもインデント関係ないから自由にさせろ
強制したいならyaml使え
0919デフォルトの名無しさん (ワッチョイ 5961-ogEr)
垢版 |
2019/10/05(土) 19:57:33.02ID:BObIlSOA0
>>916
jsonはカッコの対応で死ぬわ

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

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

客がいいって言うならいいけど
0932デフォルトの名無しさん (ワッチョイ 3a2d-BBXA)
垢版 |
2019/10/05(土) 20:20:51.17ID:jRdA7zB80
よく出てくくる、一本道コードのVisual Basicおじさんでしょ
0933デフォルトの名無しさん (ワッチョイ 5961-ogEr)
垢版 |
2019/10/05(土) 20:21:03.98ID:BObIlSOA0
はっきりさせておくけど

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

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

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

>・設定ファイルをユーザに触らせない
→xmlにする
なぜなら実装が簡単だし、開発者(俺)ならテキスト編集できるから
0942デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/05(土) 21:28:22.83ID:Apziqq2fa
>>936
2chだとやたらとJSON推しの人が多いけど、.NET標準のシリアライザは他にもいろいろあるよw
JSONに固執する必要がないなら他を検討した方がいいと思うけど
0949デフォルトの名無しさん (アウアウウー Sa21-5zAY)
垢版 |
2019/10/05(土) 22:54:13.79ID:Apziqq2fa
DataContractJsonSerializer、使ったことなかったが調べた感じ
一通りの機能はあるし、バージョントーレラントみたいだし、別にこれでもいいねw

バージョントーレラントじゃないと思ってたが、勘違いだったみたいだ。
0952デフォルトの名無しさん (ワッチョイ 7dda-G1PU)
垢版 |
2019/10/06(日) 01:49:26.58ID:DPash9Py0
jsonのシリアライザ/デシリアライザは送受同じライブラリを使わないと、割とめんどい。
DateTimeの扱いとか。

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

DataContractJsonSerializerは変換遅いし、いちいち[DataContract]や[DataMember]などのアノテーションがめんどい
0956デフォルトの名無しさん (ワッチョイ 3d6e-Qh1z)
垢版 |
2019/10/06(日) 12:18:55.28ID:jjEkd1/A0
windows formsアプリについての相談なんですけれど、ロジックと見た目を分けろって聞くじゃないですか。なのでそうしようと思ったんです

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

設計としてはこんな感じでも大丈夫ですかね?アプリを作る時に内部のコードはこう実装するみたいなことを教えてくれる本が無くてどう設計していけばいいのかわからないんです
0962デフォルトの名無しさん (ワッチョイ 5961-ogEr)
垢版 |
2019/10/06(日) 15:03:12.76ID:Ih3UpniZ0
「既存メソッドの処理なんですが?ちょっと時間かかっちゃうんですよねー
プログレスバーとかつかないですかね?
処理の進行状況も表示して」

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

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

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

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

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

FormでもUserControlでも、基本的に書いていいのは上に乗ってる
コントロールを操作するコードとイベントハンドラだけ。
0966デフォルトの名無しさん (ワッチョイ 5961-ogEr)
垢版 |
2019/10/06(日) 19:21:15.12ID:Ih3UpniZ0
>>964
はぁ?
既存の何も考えずに作ったメソッド(内部)のプログレスバー(表示)を分離したまま実装できないだろってのが俺のレスの主旨なんだけど
理解した上で反論しようとしてんの?
Mr.ドン・キホーテ?
0974デフォルトの名無しさん (アウアウイー Sa7d-Y1tm)
垢版 |
2019/10/06(日) 20:18:09.12ID:LuDxacSca
ID:Ih3UpniZ0って昨日iniファイル以外認めないって主張してた御仁か
15〜20年くらい前のスキルしかもちあわせてない人でしょ
技術的なキャッチアップも人間性の向上も怠って年齢だけ重ねてる人だからこういう物言いしかできないんだろう

こういう人のいうことは表向きだけはいはいって聞いたふりして全部無視して問題ないよ
0983デフォルトの名無しさん (オッペケ Srbd-jw9j)
垢版 |
2019/10/07(月) 18:13:25.65ID:jsaaj6Lxr
インターフェイスでメモリリークするわけがないはその通り

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

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

そのProgressというけど偽りでProgressと言う動作と何の関係もない
実際はどこからも使われないく自分で使うコードを書くだけなのでProgressである必要もない
どこが便利で使ってるのかさっぱりわからない
0986デフォルトの名無しさん (ワッチョイ 6a2f-2rUB)
垢版 |
2019/10/07(月) 20:06:05.04ID:GbsEPSwo0
>処理と表示は一見関係ないように見えて実は密接に関係していて
>絶対に切り離せない

ちゃんと考えて設計してもそうなるなら、絶望的にセンスがないわ
おまえに不可能なことが技術的に不可能なこととは違うよ
0993デフォルトの名無しさん (ワッチョイ 6a42-G1PU)
垢版 |
2019/10/07(月) 22:42:41.65ID:d+4AHn7d0
IProgressというか、その実体のProgres<T>クラスは、普通に使えばメモリーリークなんか起こらないんだよな
イベントじゃなくてActionデリゲート使ってメンバ変数など使わずにローカル変数で定義して
処理を実行するたびにインスタンス作ればいいだけ
ラムダ使えない人はご愁傷さまとしか言えません
0995デフォルトの名無しさん (オッペケ Srbd-G1PU)
垢版 |
2019/10/07(月) 22:52:08.75ID:jsaaj6Lxr
それと
> 普通に使えばメモリーリークなんか起こらないんだよな



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

は矛盾してるよね?
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を超えています。これ以上書き込みはできません。

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