19/08/18 13:41:29.71 +4zzAGlV0.net
WinForms で質問です。
標準の Form から継承した MyForm を abstract で作りました。
この MyForm は abstract なのでデザインで開けません。
(ここまでOK)
MyForm をもとに SubForm なるものを継承して作りました。
これには abstract は付けていないのですが、これもまたデザイナで開けません。
あまりに残念すぎる挙動だと思うのですが、これは仕様でしょうか。
338:デフォルトの名無しさん
19/08/18 13:43:21.22 +3q0UZxZ0.net
Visual Studio .NET (2002) から続く仕様だよ
339:デフォルトの名無しさん
19/08/18 13:45:24.63 jp7+H4+aM.net
.NETではフォームの継承は推奨されていません
共通化したい場合はユーザーコントロールを使用してください
なお、WinFormsは既に開発が終了しており、今後改善される可能性はありません
340:デフォルトの名無しさん
19/08/18 13:51:36
341:.77 ID:+4zzAGlV0.net
342:デフォルトの名無しさん
19/08/18 13:57:02.56 ET6qk6jL0.net
うちは自社開発企業だがFormsはとっくの昔に淘汰された
Formsで作ってたアプリは全部WPFで作り直した
343:デフォルトの名無しさん
19/08/18 14:04:52.38 APnDI8yA0.net
visualstudioを利用しているのですが最近デバッグ時にフォームアプリを動かすと
System.InvalidOperationException: '有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール 'hoge' がアクセスされました。'
の様なエラーが出て止まる様になりました
しかし出来たプログラムをふつうに動かす分には異常ありません
今まで作ってきた問題のなかったすべてのバージョンでこの様な現象が起こっています
これは何が原因でしょうか?
344:デフォルトの名無しさん
19/08/18 14:21:30.88 /RKifLkIa.net
>>335
騙されたらあかんw
継承後のフォームもちゃんとデザイナで開けるし
コントロールを追加したりいろいろ出来るよw
フォームの継承なんて10年以上やってなかったが
今実際試して確認したから間違いない
345:デフォルトの名無しさん
19/08/18 14:29:19.80 MLAzMixE0.net
>>337
先日MSがWindowsUpdateでやらかしたのが原因で、結構話題になっているから検索すると見つかる
「windowsupdate vb」 で
346:デフォルトの名無しさん
19/08/18 15:44:26.69 +4zzAGlV0.net
>>338
「abstract な継承元から継承すると、継承先フォームがデザイナで開けない」
という意味でしたけど、こちらだと VS2019 でも叱られてしまいます。。
347:デフォルトの名無しさん
19/08/18 15:45:05.69 +4zzAGlV0.net
継承元が abstract じゃない単純なファームの継承だったら、まったく問題ありません。
348:デフォルトの名無しさん
19/08/18 17:17:03.03 zvOpWkeBd.net
>>334
終了なんかしてないよ
349:デフォルトの名無しさん
19/08/18 17:55:07.39 /RKifLkIa.net
>>340
なるほど。
abstractにこだわる必要が本当にあるのかなとも思うけど、
何ならコンストラクタをprotectedにすりゃ機能的にはほぼ同じだね。
(abstractメンバーはもちろん書けないけど)
これならそういう不具合は起こらないっぽい
350:デフォルトの名無しさん
19/08/18 18:33:20.50 5+yaTAKE0.net
蕎麦とラーメン間違えるとかもう簡単ケータイにしたほうがいいんじゃね。
たぶんVPNとか使わわんだろうし。
俺もIntelだからもう日産もゴーヤチャンプルーも同じ味付けで食える。
351:デフォルトの名無しさん
19/08/18 21:26:51.68 37ku1J740.net
Keyvaluepairの.Keyをnull判定したら
nullできました。
構造体だけどnull判定できましたが??
keyvalueopair本体はできないけど
KeyまたはValueはnull判定できました。
何故???まぁ良かったんですけど
352:デフォルトの名無しさん
19/08/18 21:29:43.77 jp7+H4+aM.net
それはKeyプロパティが返した値をnull判定しているのであり、KeyValuePairが構造体であることは全く関係ない
直行する問題の分離ができない人はプログラミング向いてないよ
353:デフォルトの名無しさん
19/08/18 21:32:13.83 DxNAHPOT0.net
構造体はnullにできないからKeyValuePair?使えって言ってんのに
354:デフォルトの名無しさん
19/08/18 21:33:54.95 DxNAHPOT0.net
言っとくけど「?」は文字化けじゃないぞw
355:デフォルトの名無しさん
19/08/18 21:37:51.98 37ku1J740.net
>>346
ようはList<KeyValuePair<string,double>>
"レタス" 100
"キャベツ"120
"トマト" 120
こういうリストで、ピーマンって探すと
Keyがnullになってくれたので、良かったです。
KeyValuepairがnullじゃないのが不思議ですが
null判定できてよかった
356:デフォルトの名無しさん
19/08/18 21:46:55.40 DxNAHPOT0.net
構造体はnullにできないと何度も言われてるのになんで不思議に思うんだろう
ピーマンを探すときのList.FirstOrDefault()の戻り値は
KeyValuePairをデフォルトコンストラクタで初期化したものだよ
357:デフォルトの名無しさん
19/08/18 21:48:35.09 FVnfIX0p0.net
>>349
keyvaluepairは構造体
構造体にはnullが存在しない
構造体にnullが存在しないことと構造体の中身がどうなっているか関係ないので、中身がクラスであるならnullにもなりうる
君がやったことは構造体ではなくその中身がnullかどうかのチェックしただけ
構造体とクラスの違いが理解できないなら今後も躓くのでkeyvaluepair含め他の構造体の使用も封印したほうがマシ
まぁintだって構造体だから全部避けるなんてことは無理だけど
358:デフォルトの名無しさん
19/08/18 22:03:37.75 0nN/LwEb0.net
くどくて性格が悪そうな文章だ
359:デフォルトの名無しさん
19/08/18 23:28:35.24 r1LRT6EBa.net
listに入れるならdictionaryでいいんじゃないか…?とか話を一切聞いてなかったりとかkeyvalue君のレス見てるといらつくし
説明してあげる>>351は優しいだろ
360:デフォルトの名無しさん
19/08/19 00:48:43.25 ODFt4ofXM.net
>>349
null返ってきたのはkeyの型(string型)の初期値がnullだからなんでねか?
361:デフォルトの名無しさん
19/08/19 02:37:59.55 s7+bDgX20.net
>>327
きも
362:デフォルトの名無しさん
19/08/19 07:49:38.46 2nNI8r3od.net
>>349
ピーマン探してnullが帰ってくるのはおかしいだろ。
ピーマン探したら見つからないのが正しくないか?
363:デフォルトの名無しさん
19/08/19 08:07:23.07 D7o3OMEzM.net
ループ作ったやつ次第のような?
364:デフォルトの名無しさん
19/08/19 10:35:33.11 VzpEDBAc0.net
Form1以外のクラスでlistboxに入力したいのですが
他クラスで入力する方法って望ましくないのですか?
他に方法はあるのでしょうか?
365:デフォルトの名無しさん
19/08/19 10:48:05.33 Le9xiHCt0.net
MVVMなら他クラスで用意するのが普通。
INotifyPropertyChangedとObservableCollectionでばっちりよ
366:デフォルトの名無しさん
19/08/19 10:55:08.87 QArCM+jpp.net
>>356
松茸採りに行っても見つからなかったらバスケットは空で帰って来るしか無いだろ?
367:デフォルトの名無しさん
19/08/19 10:55:52.73 QArCM+jpp.net
でもバスケットはあるから、バスケットの中の松茸の数がゼロになるんだよね?
368:デフォルトの名無しさん
19/08/19 11:52:38.83 2nNI8r3od.net
バスケットが空なのと、バスケットにnullが入ってるのは違うんじゃねえかな?
参照型は瓶と水みたいな感じで、瓶だけ持って帰ってこれても、
値型みたいな、それ単体が実体のものは言うとおり松茸みたいなもんで、取りにいってなかったら何も持って帰って来れないと思うが。
無理矢理何か持たせるのがFirstOrDefaultで、坊主だった親父がとりあえず当たり障りのないものを魚屋で買って帰るようなもんでは?
FirstOrDefaultは無かったときにnullを返すためにあるんじゃないんだから。
ちゃんとチェックしてから取ったほうがいいと思うよ。
369:デフォルトの名無しさん
19/08/19 12:00:12.26 ODFt4ofXM.net
ちゃんとチェックしてからとるならFirst()でよくね?
370:デフォルトの名無しさん
19/08/19 12:01:25.55 9Ob07fGvd.net
どうでもいい自分なりの思想を長々と書く人だね
371:デフォルトの名無しさん
19/08/19 12:07:05.62 ZYeDXrpNM.net
ILで説明してくれ
372:デフォルトの名無しさん
19/08/19 13:23:05.09 VzpEDBAc0.net
>>358なんですが誰かお願いします
別クラスでテキストボックスとかいじるのって普通のやり方ではないん
373:でしょうか?
374:デフォルトの名無しさん
19/08/19 13:27:26.75 ERfcd1se0.net
>>359が返してくれてるだろ
375:デフォルトの名無しさん
19/08/19 13:34:49.71 eHF4rC4A0.net
別クラスでいじるって、
class Hoge {
public void SetText(TextBox textBox, string text) { textBox.Text = text; }
}
みたいな?
コントロールを外部に渡すというのはまあ一般的ではないな
376:デフォルトの名無しさん
19/08/19 13:36:41.01 VzpEDBAc0.net
>>359
返してくださったのはありがたいんですが
その3つの単語全て知らなくて、ググってみても高度すぎてわかりません
コンソールアプリケーションをフォームアプリケーションに移植しようとしているのですが
Console.Write()で出力していたものをlistBoxやtextBoxに出力したいのですが出来なくて困っております
どうかアドバイスお願いします
377:デフォルトの名無しさん
19/08/19 13:44:13.47 9Ob07fGvd.net
外部でstringの配列なりListなり作った上でそれを
ListBox.DataSourceプロパティにセットすればいいんじゃないの
378:デフォルトの名無しさん
19/08/19 13:56:34.58 eDOlyF+5a.net
>>369
■ 選択肢1
FormにAddToLogみたいなメソッドを作ってConsole.WriteLineを
LogForm.AddToLog
■ 選択肢2
Console.WriteLineを、記録する文字列を通知するイベントに置き換える。
Formはそのイベントを拾ってListBoxに表示
後者を推奨
基本的にUIの参照を握らせるのは悪い手
379:デフォルトの名無しさん
19/08/19 14:04:49.07 VzpEDBAc0.net
移植したいコンソールアプリ
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);
}
}
380:デフォルトの名無しさん
19/08/19 14:06:13.39 VzpEDBAc0.net
作ってみたフォームアプリ
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
ありがとうございます。さっそく試してみます
381:デフォルトの名無しさん
19/08/19 15:32:03.08 ERfcd1se0.net
なんでいきなりバックグラウンドワーカーが出てきてるか知らんけど、ドゥーワークは別スレッドで実行する内容を記載するところで、UIスレッドにアクセスしたらダメ→コントロールを触ったらダメ
リストボックスにアクセスしたかったらリポートプログレスもしくはコンプリートでUIスレッドにマーシャリングしてから
382:デフォルトの名無しさん
19/08/19 16:32:24.93 VzpEDBAc0.net
簡略化して書いていますが凄い長い計算なので計算中でもプログラムが反応する様にbackgroundWorkerにしています
backgroundWorkerかでなくとも、他クラスからフォームをいじるということが出来なくて困っています
383:デフォルトの名無しさん
19/08/19 17:09:34.09 2nNI8r3od.net
普通にinvokeしなよ。
384:デフォルトの名無しさん
19/08/19 17:49:40.07 VD+/iXFd0.net
>>375
1.他のフォームからコントロールを操作する
URLリンク(dobon.net)
2.BackgroundWorkerからコントロール(UIスレッド)を沿操作する
URLリンク(dobon.net) またはInvoke
今の段階では1+2をやりたいんだよね
設計的なものに口だすのは良くないけど参考までに
>凄い長い計算なので計算中でもプログラムが反応する様に
ListBoxの一つのアイテムごとに時間がかかるのならMainProcessでループで一気にAddせずに
BackgroundWorkerの中で「計算実行→ReportProgressで別フォームListBoxにAdd」をループさ
385:せてもいいんじゃないの
386:デフォルトの名無しさん
19/08/19 17:55:50.15 V7QYb24CM.net
>>366
ログ出したいん?
なんかプロパティのフラグ立てる必要なかったっけ?
387:デフォルトの名無しさん
19/08/19 18:04:30.50 V7QYb24CM.net
関係なかった
自分が昔出なかったのは
AppendTextしてなかったからだったw
すまんかった
388:デフォルトの名無しさん
19/08/19 20:31:39.57 VzpEDBAc0.net
Invoke調べてみました。いけそうな気がしますが書き方が難しいです
上記のコードの場合どのように記述すれば良いのでしょうか?
389:デフォルトの名無しさん
19/08/19 20:43:11.70 y72D5AUNp.net
>>380
ここおススメやぞ
URLリンク(blogs.msdn.microsoft.com)
390:デフォルトの名無しさん
19/08/19 20:46:44.95 cJsYlnhia.net
パッと見で適当だけど、formにコントロールの変更記述して、コールバック登録してtaskはしらせればいいの違うのか?invokeは当然
391:デフォルトの名無しさん
19/08/19 21:00:04.04 Vps+pUHe0.net
>>380
delegate用のメソッド作ってdelegateにセットしてinvoke
URLリンク(www.atmarkit.co.jp)
392:デフォルトの名無しさん
19/08/19 22:54:50.46 aQCsW5pK0.net
doubleって整数のほうに偏りがあったら
小数部分は短い精度になるんですが、これ何とかなりませんか?
doubleは精度高いから小数点第5位とか精度余裕だろwwwwwwwwwww
989~~~132.1235212596 算出結果
989~~~132.1235312314 正解
え???????????
ちょwwwwww
助けてください
393:デフォルトの名無しさん
19/08/19 23:06:59.10 eDOlyF+5a.net
>>384
何を言ってるか人に分かるように書かないと誰も答えようがないよw
一般論として、演算誤差を累積させずに
演算可能かどうかはどういう演算をしてるかによるので、
具体的な処理が分からないと何とも言えん
394:デフォルトの名無しさん
19/08/19 23:27:14.16 9Ob07fGvd.net
decimal型使えば
395:デフォルトの名無しさん
19/08/19 23:36:21.05 0KlGy2IO0.net
>>384
浮動小数点とはそういうもの
小数点以下何桁かではなく全体で何桁か
396:デフォルトの名無しさん
19/08/19 23:57:36.54 0eZQgVij0.net
分数型クラスを自分で作ってとっとけ
397:デフォルトの名無しさん
19/08/19 23:59:07.58 HKOIeNMl0.net
Seleniumを極めよう
398:デフォルトの名無しさん
19/08/20 00:07:25.79 VMXKYR4od.net
Form1, Form2, CounterForm があります。
CounterForm にカウントを表示して、0 になったら、Form1 か Form2 のメソッドを実行するにはどうしたら良いでしょうか?
やりたいこと
5. 4. 3. 2. 1. 0 と表示 → form1.DoSomething();
CounterForm と Form1 の部分はできているのですが、
複数class間で通知する方法がよくわかりません。
399:デフォルトの名無しさん
19/08/20 00:22:58.41 sL7gwS880.net
>>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間で通知する方法がよくわかりません。
の意味が分からないんでもう少し詳しく
400:デフォルトの名無しさん
19/08/20 01:06:30.58 yjnOK/Bv0.net
「通知」…もし表示済みのフォームをあとからいじりたい場合、
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; } //変数を経由して外側でスローする
401:デフォルトの名無しさん
19/08/20 01:15:05.72 zheL5RcIa.net
>>390
Formだろうが何だろうが、操作したい側が操作対象の参照を握れば良いだけだけど、
親子関係が成立しているとか特殊な前提がなければ、Formが別のFormの参照を
握るのはあんまり良くない。
原則論を言えばそもそもFormにUIと無関係の処理を書く時点で間違っている。
402:デフォルトの名無しさん
19/08/20 07:52:56.91 yjnOK/Bv0.net
UIと関係あるからフォームなんだろうけど…
非同期処理中にポップアップが出て、その間もメインは触れるが、終わるとメインが変更される
なんてことはよくある
書式設定的なのも別フォームから別フォームをいじるわけだし
前のいじり方を残すために、閉じても隠すだけで、同じインスタンスを再表示したい場合とか
403:デフォルトの名無しさん
19/08/20 09:26:58.30 +NAZ1HN+M.net
フォームと無関係な~って書いてあるぞ
そんなことより全角半角がきもい
404:デフォルトの名無しさん
19/08/20 12:03:48.15 NghMzgaN0.net
対象のフレームワーク:Framework 4.0 でコンパイルした自作 DLL があります。
この DLL を 対象のフレームワーク:Framework 4.8 なプロジェクトから参照して使用したとき、
DLL の中はどっちで動くのでしょうか?
たとえば自作DLL内で、DataGridView から継承した DataGridViewEx を作ってあったとして
これを 4.8 なプロジェクトで利用したとき、DataGridViewEx 内で
4.0 の DataGridView が使われるのか、4.8 の DataGridView が使われるのか、って意味です。
405:デフォルトの名無しさん
19/08/20 12:10:21.33 mC8iPjWhd.net
自作DLL内でDataGridViewの参照を特定バージョンにしておけば4.0になるしそうじゃなければ4.8
406:デフォルトの名無しさん
19/08/20 12:17:12.47 NghMzgaN0.net
自作DLL 側の System.Windows.Forms を見たら
特定バージョン:false
になっていたので、呼ばれる側のバージョンの System.Windows.Forms.dll が使われるってことですね。
Framework 4.8 用に新たに作らないといけないかと思ったのですが、その心配ないみたいで安心しました。
407:デフォルトの名無しさん
19/08/21 00:27:12.96 7whQ/iRu0.net
あ、間違えた
× this.Invoke( (MethodInvoker)delegate {
〇 static1.form1.Invoke( (MethodInvoker)delegate {
(thisは自フォーム内のマルチスレッド部分のソースだった)
カウントダウンにマルチスレッドが必要とは限らんが
むしろモーダルだったり
でも「オブジェクトがあれば必ず「通知」できる」という方法は確立しといた方が、オブジェクト指向っぽい
クラスオブジェクト指向の前にメッセージオブジェクト指向があったので(Win32API)
メッセージ、つまり「通知」
408:デフォルトの名無しさん
19/08/21 00:57:19.98 CGK7jfA0d.net
>>392
解答どうもありがとうございます。
event かデリゲートで解決できそうです。
// Form1
private void CountDownBtn_Click(object sender, EventArgs e) {
var countdownForm = new MYCountDownForm();
// 4 3 2 1 0と表示してから、下に行きたいが、
// これだとカウント 0 を待たずにすぐ下に行く。
countdownForm.Show();
// このクラスのいろいろな処理
}
409:デフォルトの名無しさん
19/08/21 01:36:11.80 7whQ/iRu0.net
>>400
そっちかw
そっちは「モーダルフォーム」でググると出てくると思う
その方が普通に基本
410:デフォルトの名無しさん
19/08/22 16:28:36.46 tih7LC2d0.net
APIが公開されていなくてもスクレイピングして非公開websoketに接続したいのですが、
解析からトークンなど必要なheader情報取得すればできるものですか?
411:デフォルトの名無しさん
19/08/22 16:50:43.33 xQsiKIbM0.net
出来るけど利用規約読め
API経由だとセーフで
API経由しないと逮捕とか書いてあるから
412:デフォルトの名無しさん
19/08/22 16:57:22.84 erkZnaOI0.net
>>402
URLリンク(elaws.e-gov.go.jp)
413:デフォルトの名無しさん
19/08/22 17:10:49.32 NpAwFZ6qM.net
>>404
条文ぐらい示してやれよ
414:デフォルトの名無しさん
19/08/22 17:59:59.30 90PkXrDL0.net
色んなところで迷惑なヤローだな
415:デフォルトの名無しさん
19/08/22 21:54:01.43 rNXeNA230.net
>>402
非公開だろうがクライアント側で処理してるのには変わりないんだから
お前が本当にブラウザになり切れればやれるよ
単純に能力と手間の問題だ
416:デフォルトの名無しさん
19/08/22 22:05:00.16 yaxmcT7W0.net
この質問結構前からいたるところで見る気がするんだけどただのマルチ?
417:デフォルトの名無しさん
19/08/22 23:55:52.03 W1llczT4d.net
>>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 更新
}
418:デフォルトの名無しさん
19/08/23 00:00:27.51 RwBPjFxxd.net
ソース抜粋 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; }
}
419:デフォルトの名無しさん
19/08/24 00:16:35.07 EZ15JXYo0.net
アホな質問ばっかですいません
光速の計算をしたいんですが、doubleでは無理ですか?
decimalは使いません
お願いします。小数点以下が信用できません。
420:デフォルトの名無しさん
19/08/24 00:22:03.18 ka7Yl/470.net
>>411
お前さんが使おうとしている計算方法や欲しい精度とか示さんと答えられんだろうよ
421:デフォルトの名無しさん
19/08/24 01:21:02.23 g8XGZa5Z0.net
>>411
422:デフォルトの名無しさん
19/08/24 08:41:25.65 VP6gB9DD0.net
質問いいですか、クラスの処理の途中経過をTextboxのコントロールに送りたいのです
public partial class Form1 : Form
{
Class1 class1 = new Class1();
}
class Class1
{
public Class1()
{
Form1.Textbox1.AppendText("Class1を実行しています");
}
}
このようにしてもForm1のインスタンスがないから実行できません
みなさんはクラスのログなどをテキストボックスに送るとき、どう書かれてますか?
423:デフォルトの名無しさん
19/08/24 09:03:40.17 BNVmeU2m0.net
>>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から呼び出す
424:デフォルトの名無しさん
19/08/24 15:23:44.45 VP6gB9DD0.net
>>415
レスさんくすです
上の方法でうまくいきました
クラスからコントロールを操作ってあまり使わない、というか推奨されてないのかな?
425:デフォルトの名無しさん
19/08/24 15:40:00.64 glPHIee0p.net
コントロールは何かを操作する為の機能なんだから、
普通はその操作する何かを直接操作するだろ?
426:デフォルトの名無しさん
19/08/24 15:45:48.43 BNVmeU2m0.net
>>416
インスタンスをどう指定していいかわからないんじゃなかったのか
親子関係にあるウィンドウでの操作はいろんなアプリで普通にあるし
C#だけにしても「C# 別のフォームのコントロール」でググればやっているところはいっぱい出てくる
427:デフォルトの名無しさん
19/08/24 15:56:01.09 dsz+mirUa.net
>>416
非推奨というか、普通はやりたいと思わないね。
何かの参照を握るってことはそれに依存してしまうってことだから。
Class1は本来はForm1の参照を持つ設計にしたことで、
事実上そのプログラム専用の他で流用できないコードになってる
他で使う予定ないからそれで問題ないと思うかもしれないが(以下略
428:デフォルトの名無しさん
19/08/24 19:37:50.96 VP6gB9DD0.net
>>417
確かにコントロールというぐらいだし
>>418
さんくす、実際にやる方法もわからなかったし、教えてもらったのはわかりやすかった
考え方を標準っぽいやり方に寄せたいのです
>>419
さんくす、なるほどパーツとして完成してないですね
汎用性の低いコードは改善しないと、でも今回はこれでいきます
logの取り方考えないと
429:デフォルトの名無しさん
19/08/24 21:52:23.83 PMKXSgkW0.net
処理側に出力するだけの意味しかないデリゲートでも渡してやれば?
受け側はコントロールを操作とか意識しなくて済むけど
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;
}
:
}
430:デフォルトの名無しさん
19/08/24 22:59:49.50 sQirZTQZ0.net
よく答えられるな
なにをしようとしてるのかすらわからんわ
431:デフォルトの名無しさん
19/08/24 23:07:54.21 VP6gB9DD0.net
>>421
レスさんくすです
でもしかし、半分ぐらいしか理解できませんでした、スイマセン
~解読中~
432:デフォルトの名無しさん
19/08/24 23:11:33.91 XZUr8QhOa.net
refやout, in引数のないdelegateなら
自分で定義せずにSystem.ActionやSystem.Funcを使う手もあるよ
433:デフォルトの名無しさん
19/08/24 23:15:15.44 dsz+mirUa.net
>>423
理解しなくていいよw
デリゲートを直で受け渡しなんかせず、素直にイベントの方を使いましょう。
434:デフォルトの名無しさん
19/08/24 23:54:17.30 GocaxRhS0.net
>>422
さすがにそれはお前がアホやで
435:デフォルトの名無しさん
19/08/24 23:56:09.98 4OMYNXZ10.net
使う手もあるというか余程じゃなければActionかFuncでは
436:デフォルトの名無しさん
19/08/25 00:04:50.89 dkxX1jtZ0.net
俺もActionを推す
437:デフォルトの名無しさん
19/08/25 00:26:08.77 DAHO6xPV0.net
MethodInvoker(´・ω・`)ボクも忘れないでね
438:デフォルトの名無しさん
19/08/25 06:55:23.52 Jlb1UCj1M.net
>>414
こういうのってbindingでどうにかするものじゃないの?
439:デフォルトの名無しさん
19/08/25 07:21:22.29 UfI3Un4o0.net
可変長の戻り値って実現できませんか?もしくは可変長のタプル
これを
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));
こんな風に書けたらいいのにって感じです
440:デフォルトの名無しさん
19/08/25 09:33:25.01 NieUwdLz0.net
>>424
さんくす、スマートに書けそうですね、他の人もさんくす、ただ考え中
>>425
今回はイベントで、ただデリゲート勉強するいいちゃんす
>>429
さんくす、ググったら実現したいことをピンポイントっぽい
>>430
さんくす、binding、さらにむずい、今までと違うアプローチっぽい
441:デフォルトの名無しさん
19/08/25 13:39:47.35 aNsJH+ura.net
>>431
何言ってるのか理解するのに5分かかったw
ラムダ式の右辺(?)の評価方法をジェネリックの型パラメータを確定する場面で指定するとか
普通に無理筋でしょう
hoge(list, listItem => new[] { listItem.A, listItem.B });
が
hoge(list, listItem => (listItem.A, listItem.B));
と書けたところでたいして嬉しいと思えんけど
442:デフォルトの名無しさん
19/08/25 14:04:21.51 UfI3Un4o0.net
>>433
おお、new[]で推論してくれるの忘れてました
new[]で十分スマートですねこれで問題ないです、ありがとうございました
443:デフォルトの名無しさん
19/08/25 22:03:25.03 4LqybIGY0.net
Formのプログラムで普通に動作してたOpenFormDialogを使ってる箇所が突然フリーズしてしまいます。
一旦そうなるとWindows自体が不安定になり、他のプログラムで恐らくOpenFormDialogを使ってる所が全てフリーズしOSの再起動が必要になります。
どんな要因が考えられるでしょうか。
プログラムはかんたんなグラフィックエディタで矩形やテキストを移動したり変形する程度です
444:デフォルトの名無しさん
19/08/25 22:12:11.72 hYfvTIib0.net
OpenFormDialog? OpenFileDialogじゃなくて?
OpenFileDialogならフリーズの話はあるから検索して
騒がれたのもう結構前だからまだ残ってるともあんまり思えないけど
445:デフォルトの名無しさん
19/08/25 22:13:53.33 hYfvTIib0.net
あ、残ってるってのはフリーズするバグを残してる環境の話ね
446:デフォルトの名無しさん
19/08/26 00:35:03.80 D54D8pf80.net
>>436
OpenFileDialogでした
cymon.sysの件は見つけましたけど家のPCにはありませんでした
地道にバグを見つけます
447:デフォルトの名無しさん
19/08/26 01:40:22.77 YZSrPKBs0.net
List<Employee> のIDとList<int> の一致するEmployeeを取得したいです。
List<int>をforeach、その中でList<Employee>をFirstOrDefaultで探して
新たなList<Employee>にAddする方法はできました。
これのforeachを撲滅して簡潔に書きたいのですがいい方法はありますか?
448:デフォルトの名無しさん
19/08/26 01:54:35.76 XYz1A7/c0.net
var employees = new List<Employee>();
var ids = new List<int>();
・・・・
var hitEmployees = employees.Where(employee => ids.Where(id => id == employee.id).Any()).ToList();
449:デフォルトの名無しさん
19/08/26 05:09:56.54 d+oJYvyp0.net
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
450:デフォルトの名無しさん
19/08/26 06:09:07.86 LiZWIy1C0.net
Find
451:デフォルトの名無しさん
19/08/26 07:20:31.54 H4cvWJOz0.net
employees.FindAll(emp => ids.Contains(emp.ID))
452:デフォルトの名無しさん
19/08/26 08:56:15.22 WqA3OufOM.net
EnumSetってEnumの値を2のベキにすればいいから存在しないの?
453:デフォルトの名無しさん
19/08/26 11:40:26.35 Rhz6dR8od.net
イベントハンドラのいなづまアイコンってどういう意味なの?
気になって開発が手につきません。
454:デフォルトの名無しさん
19/08/26 12:01:50.23 EHOEsFfWa.net
地下鉄漫才かよw
455:デフォルトの名無しさん
19/08/26 16:00:24.81 7fzFkpCMr.net
execute
神がいかずちをもって手を下す
的な
456:デフォルトの名無しさん
19/08/26 22:32:00.17 YZSrPKBs0.net
>>440-443
どれもなるほど!と勉強になりました
ありがとうございます
今回はシンプルな>>443さんのでいきます!
457:デフォルトの名無しさん
19/08/27 07:54:15.38 wbq0Lfqra.net
おお、なるほど。LINQのクイズ集があれば面白そうだな。
458:デフォルトの名無しさん
19/08/27 08:59:40.07 S6vHFDx3d.net
443はlinqじゃないぞ
2.0の頃からあるListクラスのメソッドだけだ
459:デフォルトの名無しさん
19/08/27 10:18:31.48 AUeyxvTx0.net
>>450
ラムダ式が使えるようになったのはC#3.0から
460:デフォルトの名無しさん
19/08/27 11:47:29.33 S6vHFDx3d.net
>>451
そうそう。なのでデリゲート使って書く必要はあるけど
461:デフォルトの名無しさん
19/08/27 19:15:36.40 4aKZbpn00.net
次のようなことをしたいのですが、どうすればいいでしょうか。
async、awaitを使えばいいようにも思えたのですが、クラス内のループが止まらず・・・
1.ボタン押下でとある処理をするクラスのインスタンスを生成し、クラス内で処理を無限ループ
2.ボタン押下でクラス内のループを停止
462:デフォルトの名無しさん
19/08/27 19:21:08.99 a3Zgv65M0.net
>>453
ループさせているクラス内に止めるメソッド付けてボタン押したときにそれ呼び出せばいいだけでは
イベントメソッドは別のクラスでもできるから直にボタンのイベントに追加してもいいし
463:デフォルトの名無しさん
19/08/27 20:10:30.11 2XS9VBdia.net
CancellationTokenSourceを使うのが比較的妥当なやり方かな
2でボタンを押したらcancellationTokenSource.Cancel()
無限ループ側の処理では適宜cancellationToken.ThrowIfCancellationRequested()
464:デフォルトの名無しさん
19/08/27 20:56:45.60 LqXN8ItS0.net
低レベルな実装だと終了フラグの参照を渡しておくとか
465:デフォルトの名無しさん
19/08/27 21:11:30.63 fYPVnhP50.net
>>455
単純なループ処理でキャンセル例外が必要なければ
CancellationToken.IsCancellationRequestedをチェックするのでも良いね
466:デフォルトの名無しさん
19/08/27 21:12:50.98 4aKZbpn00.net
皆さん、ご回答ありがとうございます。
>>454
停止メソッドにより、ループ条件から外れるフラグを立てて
処理停止させるイメージでしょうか。
>>455
CancellationTokenSource初めて聞きました。
便利ですね!
>>456
すみません。フラグでの終了処理しか思いつきませんでした・・・
もう少しマシな実装になるとどうなるのでしょうか。
教えてもらえると助かります。
467:デフォルトの名無しさん
19/08/27 21:26:09.47 4aKZbpn00.net
>>457
そういった方法もあるのですね。ありがとうございます。
468:デフォルトの名無しさん
19/08/27 22:06:20.98 GZd8Fc/Qp.net
無限ループなんか組むな。
469:デフォルトの名無しさん
19/08/27 22:40:07.64 4aKZbpn00.net
すみません・・・
あるフォルダにファイルが保管されたときに
そのファイルを処理したくて監視に無限ループを使ってしまいました。
他に良い方法があれば、お教え願えないでしょうか。
470:デフォルトの名無しさん
19/08/27 22:43:30.90 4WMOl80S0.net
>>461
System.IO.FileSystemWatcher
471:デフォルトの名無しさん
19/08/27 22:46:14.03 4WMOl80S0.net
もしくは、win32ApiのFindFirstChangeNotification()か
472:デフォルトの名無しさん
19/08/27 22:46:46.91 4aKZbpn00.net
>>462
そんな便利なものまであるんですね!びっくりしました!
全然C#のこと知らなくて恥ずかしいです・・・
教えてくださってありがとうございました。
473:デフォルトの名無しさん
19/08/28 09:31:28.37 jmHHdju80.net
自分はC#といえば当たり前のようにWindowsFormでやってたけど
みんなは何使ってるの?
474:デフォルトの名無しさん
19/08/28 11:09:54.59 xlt6w80MM.net
>>465
特に必要なければwinform
というか、初期のブレンドが使い物にならなかったので、WPFやUWP?は必要になるまで覚えないことにした
475:デフォルトの名無しさん
19/08/28 11:18:52.44 kf58t1t/0.net
WinformからUWP APIを呼び出すことも出来るしな
476:デフォルトの名無しさん
19/08/28 12:01:00.80 nq/8XfUOM.net
WPFでやってるけど誰かにお勧めしたことはないしとてもお勧めできない
477:デフォルトの名無しさん
19/08/28 12:10:35.61 biFO59Yua.net
>>465
Winformなプロジェクトだが、XAMLでのレイアウトが好きだから自分の担当画面はWPF使ってる
478:デフォルトの名無しさん
19/08/28 12:29:45.46 XsRrDAKXd.net
>>465
ASP.NET Core
479:デフォルトの名無しさん
19/08/28 12:34:32.95 in2U0t2Ud.net
>>465
WinFormsやらWPFやらXamarin
480:デフォルトの名無しさん
19/08/28 14:05:53.46 xlt6w80MM.net
>>465
アンカーやドック追加してくれたのが嬉しすぎて、他に浮気してまで新たに覚える気にならないってのもあるかな
481:デフォルトの名無しさん
19/08/28 20:18:04.95 h4zgSqGZd.net
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
アクティブウィンドウのクライアント領域を取得するにはどうすればいいでしょうか?
上のメソッド使えば行けそうなんだけど、行き詰まってます。
482:デフォルトの名無しさん
19/08/28 20:23:25.50 7/MPDbwD0.net
C#関係ない
483:デフォルトの名無しさん
19/08/28 20:39:43.87 j6ZvHlbE0.net
>>473
それはアクティブになっているウインドウのハンドルを返すだけのもの
URLリンク(docs.microsoft.com)
RECTの構造体は自分で用意して上のURLではポインタが引数になっているけどC#なら
[DllImport("user32.dll")]
private static extern int GetClientRect(IntPtr hwnd, ref RECT Rect);
みたいに構造体をrefかoutで指定したらそこに戻ってくる
484:デフォルトの名無しさん
19/08/28 23:28:13.40 1vTqziPj0.net
c#楽しいね
直感ですぐGUIアプリ作れるからプログラミング覚えたいけど特に目標がないって人にはc#一択だと思う
485:デフォルトの名無しさん
19/08/28 23:50:51.61 RWMmexzc0.net
>>475
ほぼそのまんまのサンプルを見つけて問題はとりあえず解決しました。
URLリンク(ja.stackoverflow.com)で指定した別プロセスのウインドウを-クライアント領域のみキャプチャしたい
アクティブウィンドウのクライアント領域の取得は、
c# + netframework ではできないのですか?
486:デフォルトの名無しさん
19/08/29 00:27:03.61 yP1vALXb0.net
できるよ
お前には一週間早い
487:デフォルトの名無しさん
19/08/29 01:19:09.27 wYLP5dcN0.net
次はListViewの要素の長方形を得たいとかかな
結局.netからは離れていきそう
488:デフォルトの名無しさん
19/08/29 01:53:51.70 KY//KYCr0.net
TreeViewの表示を標準の
項目1
┗項目2
┣項目3
┗項目4
から、
項目1━項目2┳項目3
┗項目4
にするにはどうすればよいでしょうか?
489:デフォルトの名無しさん
19/08/29 01:59:31.63 AZY1Uw460.net
owner draw
490:デフォルトの名無しさん
19/08/29 02:11:15.91 HoxlVuhE0.n
491:et
492:デフォルトの名無しさん
19/08/29 07:51:27.50 JXiDsy0oa.net
>>473
GetActiveWindow()って無かったっけ?
493:デフォルトの名無しさん
19/08/29 07:52:24.70 JXiDsy0oa.net
↑ああ、早とちり
494:デフォルトの名無しさん
19/08/30 21:10:43.61 euEksp6k0.net
ドラッグアンドドロップで拡張子を.txt→.jsonに変更するプログラムのコードをください
495:デフォルトの名無しさん
19/08/30 21:15:43.51 a95S+czO0.net
batでやったほうが早そうなレベルだけど
fileをrenameするだけでしょ?
496:デフォルトの名無しさん
19/08/30 21:18:37.15 euEksp6k0.net
renameするだけですね
どうしてもC♯でやりたいんです
497:デフォルトの名無しさん
19/08/30 21:30:48.63 m5yHWiCc0.net
>>487
拡張子の書き換えは
System.IO.Path.ChangeExtension(filepath, extension)
ここはコードを代わりに書くスレじゃないのでキーワードはあるのだから後はググってください
498:デフォルトの名無しさん
19/08/30 21:39:06.95 euEksp6k0.net
一日ググってもわからなかったので聞きに来ました
499:デフォルトの名無しさん
19/08/30 22:13:39.42 LYP1s7Gj0.net
誰が一日ググれば聞いていいって言ったんだよ
ひと月はググれ
500:デフォルトの名無しさん
19/08/30 22:15:07.21 gOJh05ROp.net
>>488
それだけじゃ変数領域にあるファイル名しかリネームされてない予感
501:デフォルトの名無しさん
19/08/30 22:16:45.05 5knN0MFU0.net
むしろググる以外のことをしろ
一日やったらわかったこととわからんとこぐらいあるだろ
502:デフォルトの名無しさん
19/08/30 22:17:38.29 a95S+czO0.net
どこがわからなかったのかくらい書いてくれないと説明できんよ
ドラッグアンドドロップの受け取り方?
拡張子の変え方?
コンソールアプリなの?デスクトップアプリなの?
503:デフォルトの名無しさん
19/08/30 22:22:42.01 euEksp6k0.net
URLリンク(www.ipentec.com)
URLリンク(dobon.net)
ここの二つのサイトを参考にして組み合わせれないかと色々やってみたんですけどうまくいかないんですよね
それぞれ片方ずつならうまく動きます
504:デフォルトの名無しさん
19/08/30 22:27:14.34 a95S+czO0.net
上手く行かないとは何かを説明して
コンパイルできない?エラーが出る?例外が出る?
実はmoveできてるけど別のフォルダに作ってるとかないよね?
505:デフォルトの名無しさん
19/08/30 22:27:46.98 Eq4lHDlT0.net
答えが出てるから色々試そうぜ
あと1日試してやり方がわからないのなら
>>1にある
>■コードを貼る場合は↓を使いましょう。
>URLリンク(ideone.com)
>URLリンク(dotnetfiddle.net)
にコードを張ってここからどうやれば良いかを聞いてくれ
506:デフォルトの名無しさん
19/08/30 22:47:12.10 euEksp6k0.net
URLリンク(ideone.com)
これで貼れてますか?フォームアプリケーションです。
ここの57行目のファイルのパスをドラッグアンドドロップして得たパスに変更したいんですけどうまくいかないんですよね
507:デフォルトの名無しさん
19/08/30 22:58:41.75 m5yHWiCc0.net
>>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"));
}
}
これでいいでしょ
ボタンクリックでやりたいのならフィールドでファイルパス持たないと
508:デフォルトの名無しさん
19/08/30 23:12:12.27 euEksp6k0.net
>>498
できました、ありがとうございます
こんな簡単だったんですね・・・・・・
509:デフォルトの名無しさん
19/08/30 23:59:42.45 Nv4TyFgP0.net
>>498
重箱の隅で本質とは関係ないけど、
"\r\n"はEnvironment.NewLineの方が良いな
510:デフォルトの名無しさん
19/08/31 00:15:27.52 yACTwzu40.net
テキストボックスのテキストも環境の影響受けるんか?
おれは環境によらず出力一定のほうが安心する
511:デフォルトの名無しさん
19/08/31 00:24:05.20 8S6g8PTE0.net
どちらかと言うと定義済みの定数としてだな
512:デフォルトの名無しさん
19/08/31 02:02:25.00 XD/oUD8U0.net
コンソールとGUIの改行が同じという保証なんて無いんだが
513:デフォルトの名無しさん
19/08/31 04:03:11.60 5bIs7pBL0.net
>>503
同意
514:デフォルトの名無しさん
19/08/31 08:13:13.94 auI6O9iK0.net
JSONを扱いたいのですが.NET標準機能では
JSON.NETにあるJsonPropertyのような変数名とは別の名前で
出力できるような機能は無いでしょうか?
515:デフォルトの名無しさん
19/08/31 08:26:54.85 /xXRK3gd0.net
>>505
DataContractJsonSerializer使って
[DataMember(Name="別の名前")]
とか?
516:デフォルトの名無しさん
19/08/31 08:38:53.92 auI6O9iK0.net
>>506
うぉぉぉ
できました。ありがとうございます!
517:デフォルトの名無しさん
19/08/31 15:26:10.82 pxkHJ9ge0.net
クロームにURL開かせるプログラムって作れるのかな
518:デフォルトの名無しさん
19/08/31 15:34:24.66 pxkHJ9ge0.net
標準ブラウザで開くのがありました
519:デフォルトの名無しさん
19/08/31 17:12:50.00 3HNIz5om0.net
引数にURLを入れて起動すればいいんじゃない?
やったことないけど
520:デフォルトの名無しさん
19/08/31 18:30:37.90 OVCgKeDNa.net
headlessでできるよー
521:デフォルトの名無しさん
19/08/31 18:34:41.41 lSinYyRY0.net
>>510
どんなブラウザでも、標準でそうなってる(べき)と思ってる。meも
522:デフォルトの名無しさん
19/08/31 20:59:16.96 DOQSWUJb0.net
start url
って叩きゃ標準ブラウザが立ち上がるでしょ
引数ってブラウザのexeパス調べてそこに渡すの?
OSが知ってんだからOSにぶん投げればいいだけじゃん
523:デフォルトの名無しさん
19/08/31 22:02:09.86 3KJgwSNk0.net
>>508
Seleniumだな、それこそ。
524:デフォルトの名無しさん
19/09/02 13:12:29.24 x5YZ9uix0.net
Span<T>をコレクションに貯める事って出来ないんでしょうか?
受け取ったbyte[]から一部のみを必要としていますが、startIndexとlengthを一々記録するのも面倒であるため、現状は新たにnew byte[length]を作りコピーをして貯めています
別にこれでも全く困っていませんが、あんまりスマートではない気がしているので元のbyte[]を.AsSpan(startIndex, length)したものをコレクションに貯められればスッキリするのですが
525:デフォルトの名無しさん
19/09/02 13:30:51.46 DTXhuRLF0.net
できないよ
array[3..7]とかでSliceするとか元の配列を使うならArraySegment<T>使うとか
526:デフォルトの名無しさん
19/09/02 14:07:32.18 /BuOMso5a.net
へーSpanってそんな制約があるのか知らんかった
URLリンク(stackoverflow.com)
527:デフォルトの名無しさん
19/09/02 14:41:25.59 ZSYwkq3t0.net
>>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
528:デフォルトの名無しさん
19/09/02 17:47:47.05 btOIY8sya.net
>>515
MemoryExtensions.AsMemory()を経由してSystem.Memory<T>を管理するのはどう?
529:デフォルトの名無しさん
19/09/02 22:24:59.33 yMcQzedZ0.net
>>518
C#で書かないならスレチ
530:デフォルトの名無しさん
19/09/03 00:14:45.15 nBDYMOwL0.net
なんで突然ruby?
531:デフォルトの名無しさん
19/09/03 00:20:55.08 UWVASv0T0.net
>>521
ソイツはいくつかのスレタイにRuby禁止といれることになった元凶だから、考えるだけ無駄よ
532:デフォルトの名無しさん
19/09/03 04:53:21.49 uBbuO65f0.net
これもう半分まつもとゆきひろだろ
533:デフォルトの名無しさん
19/09/03 07:44:05.39 ZfMnDhcZ0.net
Matzから分離した闇の半身か何か(ダークファンタジー感)
534:デフォルトの名無しさん
19/09/03 15:02:01.60 qa0OGce90.net
zipファイルのパスワード総当たりのコードってどこかに落ちてたりしません?
535:デフォルトの名無しさん
19/09/03 15:23:56.69 gWEsYspAF.net
ム板なんだし自分で書いても大した手間じゃないだろ
536:デフォルトの名無しさん
19/09/04 23:01:10.22 YAGCYgl00.net
ラプラス使ったほうが早い
537:デフォルトの名無しさん
19/09/04 23:19:14.03 +3gE1skmF.net
ラプラス変換関係ないだろ
538:デフォルトの名無しさん
19/09/04 23:23:33.02 YAGCYgl00.net
フリーソフトなんだけど(´・ω・`)
539:デフォルトの名無しさん
19/09/05 08:24:49.80 cdpeKhxuM.net
ラブプラスに見えたし
540:デフォルトの名無しさん
19/09/05 12:39:28.85 mWzCSlDu0.net
頭がc
胴体がDelphi
尻尾がJava
これはなんという生き物か?
541:デフォルトの名無しさん
19/09/05 12:52:58.36 IuZ8kmLDd.net
メインフォームと5つボタンがあるサブフォームあります。
サブフォームで押されたボタンをメインフォームに渡す方法として、下記のようなことが書いてあります。
「サブフォームの呼び出し時にメインフォームのインスタンスをサブフォームの変数に渡すか、もしくは Ownerプロパティを設定し、サブフォームにメインフォームのインスタンスを伝える必要があります。」
これ循環参照にならないのですか?
owner プロパティならフレームワークでうまくやってくれそうですが、そうしないなら典型的な循環参照でメモリにいつまでも残るように見えます。
542:デフォルトの名無しさん
19/09/05 12:57:57.83 IuZ8kmLDd.net
>532のコードで気になった部分
public FormMain() {
InitializeComponent();
fs = new FormSub();
fs.formMain = this;
}
private void button1_Click(object sender, EventArgs e) {
fs.Show();
}
543:デフォルトの名無しさん
19/09/05 13:07:57.99 /TG+lkXnd.net
昔のVBとかじゃないから
参照カウント方式とかじゃないから
大丈夫だよ
544:デフォルトの名無しさん
19/09/05 15:05:44.19 olW2Z8c3M.net
>>533
循環になってないやん
相互参照になってるだけ
545:デフォルトの名無しさん
19/09/05 15:11:39.37 MYIgyYNAM.net
>>535
相互参照⊂循環参照
546:デフォルトの名無しさん
19/09/06 07:39:44.27 ON7V4Cum0.net
awaitの仕組みって面白いな
プログラムは逐次実行と思い込んでいたから最初戸惑ったけど
プログラムの可読性を上げつつ非同期が書ける仕組み
547:デフォルトの名無しさん
19/09/06 12:21:39.70 5uKlWCRxp.net
バカ、逆に非同期の仕組みが分かりにくい事になってて最悪だわ。
若い奴らはある種のおまじないとしか思って無いぞ。
だからサンプル通りに書いたら動いたで思考停止してるわ。
548:デフォルトの名無しさん
19/09/06 12:23:25.42 5uKlWCRxp.net
だったら最初から完全に隠蔽しちまえばいいのにそれも出来ない半端な言語だよな。
549:デフォルトの名無しさん
19/09/06 12:27:55.87 RjtqJRZu0.net
>>537
async/awaitはとてもいいよな
550:デフォルトの名無しさん
19/09/06 12:36:51.77 dfZG2SkRd.net
>>539
へー半端な言語が大増殖してるねよかったね
551:デフォルトの名無しさん
19/09/06 13:29:27.52 TB1/9ae/0.net
ものすごく細かく気にする価値のないであろう上で質問させてください。
下記のようなコードでは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);
}
}
552:デフォルトの名無しさん
19/09/06 13:30:16.71 I5nGSvp60.net
Occam 呼んだ~
553:デフォルトの名無しさん
19/09/06 13:38:31.81 qBxw88Xh0.net
Convert呼び出した側がOpacityとか勝手に変えたりすることがないことが明らかなら
SolidColorBrushで持っててもいいよ
554:デフォルトの名無しさん
19/09/06 13:43:03.96 TB1/9ae/0.net
>>544
上記のコードは色以外は初期化したいっていう意図だったんですね
理解出来ました、どうもありがとうございます。
555:デフォルトの名無しさん
19/09/06 20:41:34.27 QErA9RfTd.net
return HttpResponseMessage {
StatusCode=HttpStatusCode.InternalServerError
}
これでクライアントにレスポンス返しても、クライアントで受け取ったレスポンスコードが200になるんだが、どうすりゃ良い?
556:デフォルトの名無しさん
19/09/06 23:59:27.95 2XeZAy8C0.net
short lo = 500;
short hi = -1;
int value = hi << 16 & lo;
上記のプログラムでvalueに期待する結果が格納されません。
valueの右辺へおかしいところありますか?
557:デフォルトの名無しさん
19/09/07 00:04:12.02 1iyY1sdc0.net
まず期待結果を教えろよ
脳内に格納したままで喋るな
558:デフォルトの名無しさん
19/09/07 00:35:07.80 lng4b11Wa.net
ぶっ飛んでるねw
559:デフォルトの名無しさん
19/09/07 00:47:49.03 lKqYze8d0.net
>>547
なんとなく&(and)と|(or)を間違えてる気がするけど、期待値書いてくれなきゃ分からんねw
560:デフォルトの名無しさん
19/09/07 01:10:23.93 ClfuNVBY0.net
>>547
ビット演算?をしてる割には
unsignedじゃないのが気になった
561:デフォルトの名無しさん
19/09/07 01:21:40.06 SOW3zbb30.net
C派生のシフト演算子ってビット演算子よりも優先順位低いんじゃなかったか?
C#で入れ替わったのかもしれんが
562:デフォルトの名無しさん
19/09/07 01:30:36.24 spGdC07na.net
型変換か?
563:デフォルトの名無しさん
19/09/07 01:31:47.20 l9Sxm6Vo0.net
>>552
docsに演算子の一覧と優先順位がある
URLリンク(docs.microsoft.com)
564:デフォルトの名無しさん
19/09/07 01:52:37.97 lKqYze8d0.net
>>552
逆だぞ
Cの時から
565:デフォルトの名無しさん
19/09/07 01:57:56.73 7Z6eBjmW0.net
?はもっと上げてほしい
566:デフォルトの名無しさん
19/09/07 01:58:53.26 7Z6eBjmW0.net
じゃなくて??
567:デフォルトの名無しさん
19/09/07 11:12:31.90 53qID/ifa.net
async/await、読みやすいし書きやすいけどな。
568:デフォルトの名無しさん
19/09/07 11:14:11.92 LlCffhcK0.net
URLリンク(www.youtube.com)
Introduction into StockSharp training course
どうこれVisual Studioってこんなに速く作れるの?
自分で自動売買ソフト組めるってすごくね?
569:デフォルトの名無しさん
19/09/09 13:42:14.17 mFi2C/Ml0.net
クラスの継承について分からくなってしまったので教えて下さい。
以下のプログラムを実行すると、コメントの通り、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
URLリンク(docs.microsoft.com)
FolderItems3 object
URLリンク(docs.microsoft.com)
.Net Framework 4.7.2 でコンパイルし、Windows 10 Pro で実行しました。
よろしくお願いいたします。
570:デフォルトの名無しさん
19/09/09 13:57:18.69 +ClizqJ4d.net
下記 は子フォームから親フォームへのデータ引き渡しのサンプルです。
ShowDialog(); の戻り値を使ってないのですが、ここがよくわかりません。
static public List<object> ShowForm2(List<object> argObjs) {
using (Form2 subForm = new Form2(argObjs)) {
subForm.ShowDialog(); // 戻り値は?
return subForm.resultObjs;
}
}
現在はデータの受け渡しは ShowDialog(); で表示、DialogResult を受け取り、これで処理を分岐。
これだと呼び出し側が少し膨らむと思って探していたサンプルが上のやつです。
571:デフォルトの名無しさん
19/09/09 14:01:51.48 FLVXg6p/0.net
>>560
type of
572:
573:デフォルトの名無しさん
19/09/09 14:25:45.50 wj5pBZXU0.net
>>561
それだけじゃ何とも言えないけど
ダイアログがキャンセルされたかどうかもresultObjsに含んでる
またはキャンセルされたかどうかは重要ではない
のどっちかでDialogResultは不要と考えたんじゃね
あとはただのチェック忘れか
574:デフォルトの名無しさん
19/09/09 14:33:19.47 +8Zg4WGY0.net
showdialogはあくまでサブフォーム表示中に
処理を進めないためだけに使っていて
表示したサブフォームがOKもキャンセルもない作りなら
返り値を使う必要がないんだろう
例えばファイルの検索処理とその経過を表示するだけの
サブフォームだったりするんじゃないかな
575:デフォルトの名無しさん
19/09/09 14:44:41.43 y33/yVcMa.net
>>560
FolderItems2とかFolderItems3はあくまでVSによって作られた
ラッパークラスなんだと思うけど、たぶんこのラッパークラスには
元のCOMの継承関係は反映されないんだろう。
知らないけど。
576:デフォルトの名無しさん
19/09/09 14:54:29.42 mFi2C/Ml0.net
>>562
レスどうもありがとうございます。
申し訳ないですが、おっしゃりたいことが理解できませんでした。
>>565
レスどうもありがとうございます。
>>560 で貼り付けた URL は不適切で、
本来は以下の URL を貼り付けるべきでした。
申し訳ないです。
FolderItems2 Interface
URLリンク(docs.microsoft.com)
FolderItems3 Interface
URLリンク(docs.microsoft.com)
この .Net の説明を見てもやはり継承関係はあるようですし、
if (folderItems is Shell32.FolderItems3 folderItems3)
{
Shell32.FolderItems2 folderItems2 = folderItems3;
}
のようなコードもコンパイルエラーにならないので、
継承関係があることは間違いないと思います。
また何かお分かりのことがあれば教えていただけると嬉しく思います。
よろしくお願いいたします。
577:デフォルトの名無しさん
19/09/09 15:06:55.45 wj5pBZXU0.net
COMにおける継承はメンバを引き継ぐという意味であってキャスト可能かどうかは別の話だから
.NETのコード上で明示的または暗黙的にCOMオブジェクト(のラッパ)をキャストした場合
QueryInterfaceが呼び出されてそのインターフェイスに変換できるかどうかオブジェクト自身に問い合わせる
だから共通型システム的には問題ない暗黙的キャストでもその下のQueryInterfaceで拒否される可能性がある
578:デフォルトの名無しさん
19/09/09 19:12:21.94 ko6k1+RqM.net
正規表現を教えてください。
先頭一文字は大文字アルファベット、
次の一文字は大文字アルファベットかスペース、
残り五文字が数字、です。
文字数は多すぎても少なすぎてもダメてす。
579:デフォルトの名無しさん
19/09/09 19:34:55.30 N7SL81rE0.net
[A-Z][A-Z\s]\d{5}
580:デフォルトの名無しさん
19/09/09 19:51:19.13 P/8qmdeQ0.net
C#でdxfファイルを読み込んでどんなCADデータかなと表示するにはどんな方法がありますか?
581:デフォルトの名無しさん
19/09/09 19:51:40.30 +ClizqJ4d.net
>>563
戻り値使わないとエラーでビルドできないと思ったんですが、こんな書き方あるんですね。
582:デフォルトの名無しさん
19/09/09 19:58:03.26 ko6k1+RqM.net
>>569
ありがとうございます!
できました!!
583:デフォルトの名無しさん
19/09/09 19:58:22.06 8qRxx3SUa.net
>>570
Autodeskのサイトからviewerが落とせたと思うがそれ使うんじゃダメなのか?
C#を使って何か独自のことがしたいの?
584:デフォルトの名無しさん
19/09/09 20:38:09.86 /GXaCKPOd.net
>>570
自力でレンダリングしてるらしきサンプル見つけた
URLリンク(www.codeproject.com)
585:デフォルトの名無しさん
19/09/09 21:02:37.25 gB0pdJ5j0.net
>>570
結構大変。DWGならlibreDWGってライブラリーがある
586:デフォルトの名無しさん
19/09/10 22:30:01.75 /j9k/Fivd.net
>>573
最終型は建築のキープランってものがあって、そこに無数の符号という記号が丸の中に書いてあるんだけどそこを色塗りをしたい。
>>574
ありがとうございます。
難解過ぎてゆっくり休みの日にでも読んでみます。
>>575
やっぱ大変そうですよね。調べてもなかなか...
C#スレはあったかいな。ありがとうございます!
587:デフォルトの名無しさん
19/09/11 00:00:22.11 1SzE9pLa0.net
一般人「ウィンドウ」
キモオタ「フォームがーーー」
588:デフォルトの名無しさん
19/09/11 18:58:32.68 YXyi8nZ+0.net
フォームってなに?泡?
589:デフォルトの名無しさん
19/09/12 08:36:47.62 XbTCqLqm0.net
c#は食わず嫌いだったけど使ってみたら案外良かった
使いやすいように改良してるんだな
590:デフォルトの名無しさん
19/09/12 11:25:52.65 QIiZhm2T0.net
コントロールのタイマーの質問なんですが
private void Timer1_Tick(object sender, EventArgs e)
{
MyClass myClass = new MyClass(this);
myClass.//クラスの処理いろいろ
}
こう書くと毎回クラスが初期化されてしまいます
タイマー内で同じクラスのインスタンスを使い続けたい場合どのように書けばいいのでしょか?
591:デフォルトの名無しさん
19/09/12 11:31:00.31 AZGZd9Ny0.net
myClassをメンバ変数にする
592:デフォルトの名無しさん
19/09/12 11:40:42.95 2zGYYD27p.net
myClassなんて再利用性が皆無なネーミングすんなよ。
593:デフォルトの名無しさん
19/09/12 11:45:28.48 joMf8nOja.net
>>582
説明のための命名だろうよ
594:デフォルトの名無しさん
19/09/12 12:10:59.94 V+BKjeIEM.net
発達はコンテキストが想像できないから…
595:デフォルトの名無しさん
19/09/12 13:44:13.80 j3ZoG8EK0.net
>>582
aho
596:デフォルトの名無しさん
19/09/12 14:02:29.31 0aQt/zFJa.net
>>580
タイマーのイベントハンドラを消して、適当なタイミング(例えばFormのLoadイベントとか)で
private void Form1_Load(object sender, EventArgs e)
{
var count = 0;
timer1.Tick += (snd, ea) =>
{
Console.WriteLine($"count = {count++}");
};
}
でもこれだとイベントの購読解除ができないので注意
っていうか、ジョークだから真に受けないでw
597:デフォルトの名無しさん
19/09/12 20:25:20.03 QIiZhm2T0.net
>>581
レスサンクス、そもそも宣言しないってことですか
それもアリかも、今回はインスタンス1個で済みそうだし
>>586
レスサンクス、むむむ、どうなるん?
>>582
めっちゃわかりやすいし
598:デフォルトの名無しさん
19/09/13 14:33:13.49 FohQxIv6d.net
>>587
コンストラクタかTickイベント(初回のみ)でTimerのTagプロパティにMyClassインスタンスを設定
senderからTagに設定されているインスタンスを取得して利用するってやり方もある
1タイマー1MyClassって感じの設計ならこっちの方がいいかもね
599:デフォルトの名無しさん
19/09/13 16:09:57.39 GqasltTgM.net
再利用性のないクラスの名前に拘り過ぎるのは
効率的に無駄だなと感じる
ライブラリ用のクラスは拘るけどね
600:デフォルトの名無しさん
19/09/13 17:07:26.51 zz4VRjti0.net
>>588
レスサンクス
だけど考えても理解できませんでした
601:デフォルトの名無しさん
19/09/13 17:17:29.19 GqasltTgM.net
これでいいじゃない
private MyClass myClass = new MyClass(this);
private void Timer1_Tick(object sender, EventArgs e)
{
myClass.//クラスの処理いろいろ
}
602:デフォルトの名無しさん
19/09/13 17:23:20.15 65eTAicb0.net
マイコラスの嫁がかわいい
603:デフォルトの名無しさん
19/09/13 17:47:41.70 FohQxIv6d.net
>>590
コンストラクタで、
Timer1.Tag = new MyClass(this);
イベントで
var myClass = ((Timer)sender).Tag as MyClass;
コンストラクタで作ったインスタンスがTimer1のイベントで使えるようになる
これで理解出来そう?
604:デフォルトの名無しさん
19/09/13 17:49:44.94 XXPMNkq8a.net
>>590
たぶんこう
var mc = (timer1.Tag ?? (timer1.Tag = new MyClass())) as MyClass;
でもこんなアホなことやったらあかんw
605:デフォルトの名無しさん
19/09/13 17:59:46.24 FohQxIv6d.net
捕捉でsenderの扱いに馴染みがなくて分かりずらいなら
var myClass = Timer1.Tag as MyClass;
って直接コントロールを見てもいいかな
10個のタイマーでそれぞれクラス作るとかだと、メンバに持つのが嫌になるからそういう時に便利
606:デフォルトの名無しさん
19/09/13 21:09:16.91 zz4VRjti0.net
>>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
サンクスです、うまく動きました
でも正直あまり理解できてません
注:理解するのに時間がかかります
607:デフォルトの名無しさん
19/09/13 21:48:16.79 PFGdVlPv0.net
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);
// 終了条件チェック、
// 終了処理
}
608:デフォルトの名無しさん
19/09/13 22:11:07.86 YdWi/cYta.net
>>597
int counter = 0;
void timer_Tick(object sender, EventArgs e)
{
counter++;
counter %= 256;
textBox1.BackColor = Color.FromArgb(255 - counter, 255 - counter, 255);
}
609:デフォルトの名無しさん
19/09/13 22:12:15.08 Gf0j4OgCd.net
>>596
>>580 でMyClassにthis を渡しているから皆thisを渡してインスタンスを作ってんだけどthisいらないの?
いらないならthisは消していいよ
610:デフォルトの名無しさん
19/09/13 22:27:35.64 zz4VRjti0.net
>>599
いやthisは欲しいです、Class内からtextboxコントロールのメソッド触りたいので
form1渡してます
611:デフォルトの名無しさん
19/09/13 23:44:37.81 aO4dryeFa.net
>>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);
}
612:デフォルトの名無しさん
19/09/13 23:44:54.82 aO4dryeFa.net
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);
}
}
613:デフォルトの名無しさん
19/09/14 02:16:18.45 BYSNLn3J0.net
>>600
コンストラクタやフィールドだとthisって使えないんだっけ?
それならこれでいけるかな
Tagの方も同じ感じでいけるはず
private MyClass myClass;
private void Timer1_Tick(object sender, EventArgs e)
{
if(myClass = null)
{myClass = new MyClass(this);}
myClass.//クラスの処理いろいろ
}
614:デフォルトの名無しさん
19/09/14 09:11:10.12 weYOKlpc0.net
>>603
れすさんくすです
なるほど宣言と初期化をわけるのですね、うまく動きました
615:デフォルトの名無しさん
19/09/14 11:56:47.95 vC+cN/7F0.net
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は変化なし
616:デフォルトの名無しさん
19/09/14 12:17:37.64 iAxlaW7xa.net
デリゲートは参照型
action += method は文字通り action = action + method であり、結合後の新しいインスタンスが action に代入される
デリゲート同士の + は String と同様に言語仕様によって特別扱いされており、Delegate.Combine メソッドの呼び出しに変換される
ちなみにイベントに対する += は x.ev = x.ev + method ではなくプロパティと同様にxに対する特殊なメソッド呼び出しになる
作法的な話をすると、デリゲートのマルチキャストは歴史的経緯による遺物であり、イベントハンドラ以外には基本的に使わない方がいいよ
617:デフォルトの名無しさん
19/09/14 12:37:52.80 vC+cN/7F0.net
なるほど、action += methodは、action = new Action(action + method)的な形ということだったんですね
ありがとうございます
618:デフォルトの名無しさん
19/09/14 14:06:14.47 nQc/7xFt0.net
Windows form だとちょっとした色変えるだけのエフェクト書くの大変。
iPhone swift だと 下記みたいな 2行 でかけるのに。
UIView.animate(withDuration: 0.5, delay: 0.0, options:[]
, animations: { TextField.backgroundColor = .blue }
, completion : { _ in TextField.backgroundColor = .white } )
Form のクラスメソッドに色、透明度、位置、回転、大きさとかを変化させるアニメーション系のメソッド追加してほしいね。
619:デフォルトの名無しさん
19/09/14 16:27:56.54 y7dkXYFS0.net
>>608
そういう人はWPF使う方がええよ
mvvmにこだわらなければそんな差ないし
620:デフォルトの名無しさん
19/09/15 11:17:21.32 ZbgEJrYza.net
今でも業務系のASPって、MVCよりWeb formsのほうが多い?
621:デフォルトの名無しさん
19/09/15 11:21:19.74 0P7zcb1/0.net
>>610
多いと言うか更改されずに腫れ物システムとして生き残ってるのが多いよ
622:デフォルトの名無しさん
19/09/15 11:23:22.76 qUTb/lfg0.net
>>610
ASPとASP.NETは違うよ
623:デフォルトの名無しさん
19/09/15 14:39:22.86 CYqvBFjrF.net
ASP: Application Service Provider
624:デフォルトの名無しさん
19/09/15 17:44:41.18 DjqXGTBC0.net
>>612
aho
625:デフォルトの名無しさん
19/09/15 17:46:02.32 tc+PQ4bB0.net
アスペルガー
626:デフォルトの名無しさん
19/09/15 18:48:25.55 qUTb/lfg0.net
>>614
お前がな
627:デフォルトの名無しさん
19/09/15 19:36:43.99 50f2l1H40.net
application hosting options
628:デフォルトの名無しさん
19/09/15 20:38:22.87 IMDj4f3rd.net
>>612
アプリケーションサービスプロバイダ(英語: Application Service Provider、ASP)とは、
アプリケーションソフト等のサービス(機能)をネットワーク経由で提供するプロバイダ(= provide 提供する 事業者・人・仕組み 等全般)のこと[1]。
広義にはこうした仕組みのソフトウェア提供形態やビジネスモデルまでも指す[1]。
URLリンク(ja.m.wikipedia.org)
629:デフォルトの名無しさん
19/09/15 22:04:55.99 ZbgEJrYza.net
>>610です
>>612
ごめんなさい。自分が端折ってしまったのがいけませんでした。ASP.NETです
>>611
やはりそんな感じなんですかね。意外とASP.NET関連の求人が多いので保守メインなのか開発メインなのか気になったもので
630:デフォルトの名無しさん
19/09/15 22:31:35.04 007yvQzV0.net
ACTIVE SELF PROTECTION の求人だったりして
URLリンク(activeselfprotection.com)
631:デフォルトの名無しさん
19/09/16 01:27:46.19 2BSu07WM0.net
Bitmapを返すdllがあります(C#で作成)
それをWinFormsで参照し、Bitmapを受け取りたいのですが、空の?Bitmapが返ってきます。
デバッガでdll側がきちんとBitmapをreturnしているところまでは確認できました。
ほかにどごを見直せばいいでしょうか
632:デフォルトの名無しさん
19/09/16 01:45:47.54 2BSu07WM0.net
>>621
dll側をよく確認したところ、記述ミスがありました。
スレ汚ししてしまってすみません。
633:デフォルトの名無しさん
19/09/16 10:01:49.86 z/LnXMaR0.net
Process.Start()
で既に起動済みの外部コンソールアプリにコマンドを渡して結果を受け取りたいんですけど
どうすればいいですか?
634:デフォルトの名無しさん
19/09/16 10:55:23.20 1SVMjj7z0.net
>>623
起動時に繋いどかないと後からは無理
URLリンク(cammy.co.jp)
635:デフォルトの名無しさん
19/09/16 11:17:36.58 TvwShLRF0.net
>>623
processをどう作ったか書かないと
636:デフォルトの名無しさん
19/09/16 12:31:59.14 z/LnXMaR0.net
>>625
普通にこんな感じです
Process prc=new Process();
ProcessStartInfo psInfo = new ProcessStartInfo();
psInfo.FileName = "hoge.exe";
psInfo.CreateNoWindow = true;
psInfo.UseShellExecute = false;
prc.StartInfo = psInfo;
prc.Start();
コンソールアプリはすぐに終了せずに待機してくれるタイプです
637:デフォルトの名無しさん
19/09/16 12:42:54.00 yFJZVYWt0.net
>>626
自分でプロセスを起動してるなら入出力をリダイレクトするだけ
psInfo.RedirectStandardOutput = true
psInfo.RedirectStandardInput = true;
起動後は
proc.StandardInput.WriteLine("hoge");
proc.StandardOutput.ReadToEnd();
proc.WaitForExit();
638:デフォルトの名無しさん
19/09/17 18:45:14.27 4wOD4j6P0.net
ポリモーフィズムに関しての質問なんですけど
よくある例えでdogクラスのオブジェクトもcatクラスのオブジェクトもまとめてanimalクラスの配列で扱えるみたいなのあるじゃないですか
でも例えばこの時catクラスでだけ定義されてるフィールドがあったとして、配列に格納した途端アクセスできなくなっちゃいませんか
privateとかpublicは置いといて、たとえば、bool isPrettyとか定義されてたとして、animals[0].isprettyは無理じゃないですか。親クラスから子クラスで独自に定義されてるもんは触れられないですよね
とりあえずまとめて親クラスで持っておいて使う時になったら子クラスの情報使いたいみたいなときなんかうまくやる方法ってないもんですかね。
639:デフォルトの名無しさん
19/09/17 18:49:22.91 6boldAmf0.net
C#的にはパターンマッチングで分岐すればそれは可能だが
親クラスが持っていない情報を子クラスが持っている時点でそのクラス設計は疑わしい
その例ならanimalクラスにvirtual bool IsPrettyを持たせるべき
640:デフォルトの名無しさん
19/09/17 18:50:41.39 fvAMDErgd.net
そもそも使うものをまとめておくのが親クラスというかインターフェースや抽象クラスの役目なので、持ってるかどうかもわからないisprettyを使いたいのが間違ってる。無理やりやるんならリフレクションで存在確認するしかないよ
641:デフォルトの名無しさん
19/09/17 18:51:12.83 6boldAmf0.net
親クラスが持っていない情報というのは言い過ぎだな
親クラスが持っていないpublicプロパティを子クラスが持っているのは怪しい設計
642:デフォルトの名無しさん
19/09/17 18:54:14.01 fvAMDErgd.net
例えばヒゲのプロパティは猫しか持ってないと思うけど、そういう場合は is か as で具象クラスの型を確認してキャストして取ることは出来るけど、それはなんか気持ち悪い気がする
643:デフォルトの名無しさん
19/09/17 19:11:59.16 6boldAmf0.net
全動物のうち猫しかヒゲを持ってないわけじゃあるまいし
Animal型にNullable型のヒゲプロパティを持たせてそれがnullかどうかで処理を分岐させればいいだけでは
Animalクラスがヒゲを持ってるのは唐突過ぎると思うならFaceプロパティでも挟めばいい
644:デフォルトの名無しさん
19/09/17 19:13:48.81 189yfApBd.net
>>628
親クラスを無駄なメンバーで膨らませるのはバッドパターン。
インターフェイスを使うべき。
IPrety InterFace を付けたなんらかの型のリストをループすればいい。
// IPrety InterFace で拡張した型ならなんでもループで回せる。
if myUnit.isPrety == true {
myUnit.doSomething();
}
645:デフォルトの名無しさん
19/09/17 20:02:19.06 5qQz1pKl0.net
>>628
ダウンキャストしなされ
as クラス名;でよろし
646:デフォルトの名無しさん
19/09/17 20:15:43.47 4wOD4j6P0.net
色々勉強になりました
こう共通のメソッドとフィールドがあるからくくりだして親にしようくらいの気持ちだったんですけどぐぐったらそういうのそもそもダメらしいですね
素直に各クラスで同じフィールド定義して継承関係全部なくそうと思います。
647:デフォルトの名無しさん
19/09/17 20:16:03.96 mLXav9Fo0.net
まあそれだったらanimalに純粋仮想メソッド作ってCatにだけ必要な処理書くほうがいいって考えはわかる
648:デフォルトの名無しさん
19/09/17 20:45:51.61 gcZDzsnLa.net
>>631
えー、そうなんか
それけっこう使ってるなぁ、、、