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

■ このスレッドは過去ログ倉庫に格納されています
2020/02/19(水) 17:25:41.55ID:IsrGexiaF
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)

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

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

■情報源
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/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
270デフォルトの名無しさん (ワイーワ2 FFfa-zfCe)
垢版 |
2020/04/10(金) 16:05:22.34ID:eaxyjA8iF
https://stackoverrun.com/ja/q/1249648
271デフォルトの名無しさん (ワイーワ2 FFfa-zfCe)
垢版 |
2020/04/10(金) 16:06:49.77ID:eaxyjA8iF
https://docs.grapecity.com/help/c1/aspnet/webchart/addscrollbartothexax.html
2020/04/10(金) 19:04:23.80ID:saZPvfHU0
>>268
ここで言ってるのはモデルが自分自身の変更内容を保持する機能な
EFにもないよ

もちろんモデルに自分で作りこめば可能だけどな
2020/04/10(金) 21:43:50.98ID:Q8afigXi0
DatasetやTableのoriginalが取れたりrejectでロールパック出来たりするのは確かに便利
2020/04/10(金) 22:14:18.97ID:phkDJesv0
トランザクションログ
2020/04/11(土) 02:58:17.93ID:EYr99YyX0
よぉ〜しよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよしよし
2020/04/11(土) 13:19:24.89ID:n/kHMKTa0
>>270
ありがとうございます。解決しました
277デフォルトの名無しさん (ワッチョイ c62d-kdbN)
垢版 |
2020/04/12(日) 16:27:59.95ID:WBJoN6ah0
if(条件A && !条件B){}
みたいなことをしたいのですが、&&と!をまとめてきれいに書く方法はありますか?
2020/04/12(日) 16:48:42.14ID:insvI+xF0
var 条件C = 条件A && !条件B;
if(条件C){}
2020/04/12(日) 18:02:02.30ID:Vvo4XdlE0
クラスや関数にする
設計を見直す
あーりーりたーんを心がける
2020/04/12(日) 18:08:22.86ID:sgzIx9p/0
>>277
そんなものはない
C# 演算子
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/operators/
2020/04/12(日) 18:11:50.67ID:7/OoXgJO0
>>277
関数にする
2020/04/12(日) 19:13:16.89ID:tx1YNXXn0
if (foo.IsEnabled && !bar.IsEnabled) を
if (foo.IsEnabled && bar.IsDisabled) にすることはある

単語の頭につけるエクスクラメーションマークは
見落としやすいから可読性がやや低い

>>278のパターンで変数にすることはあんまりないけど関数化するのもよくやる
2020/04/12(日) 19:22:29.59ID:xeq/pDNWa
>>277
おそらくそのまんまが一番きれいで見やすいぞ。
条件が長い式なら>>278みたいに一旦、適切な命名の変数に入れるのがいいと思う。
284デフォルトの名無しさん (ワッチョイ c62d-kdbN)
垢版 |
2020/04/12(日) 19:43:51.07ID:WBJoN6ah0
一発で書けるのかなと、すごく疑問に思ってたよ
ありがとう!
285デフォルトの名無しさん (アウアウウー Sabb-KL7n)
垢版 |
2020/04/12(日) 21:05:32.57ID:0dL6T2+Wa
一発で書けた
if (b ? false : a) {...}

一発で書けた
if (!(!a || b)) {...}

一発で書けた
Func<bool, bool, bool> ippatu = (x, y) => x && !y;
if (ippatu(a, b)) {...}
2020/04/12(日) 21:27:27.71ID:JCmsoVoe0
XORでいいんだったら^一個で済むけど違うよな
2020/04/12(日) 21:57:13.58ID:NV9JxSja0
Not演算子が見辛いから関数に置き換える
ぐらいでいい気はする
2020/04/12(日) 23:13:55.75ID:PHqFJcwka
>>285
1つ目は短絡評価の場合の動作が異なるから等価な式になってないし、2つ目の式は元の式より見辛くなって無意味だろう
289デフォルトの名無しさん (ワッチョイ cb5f-zfCe)
垢版 |
2020/04/13(月) 10:34:31.41ID:xWnIwwwl0
>>286
カルノー図描いて観ろ
2020/04/13(月) 11:05:23.07ID:DkcwYYbx0
それでわかるのー
ベイチ図もありだね
https://qiita.com/YankeeDeltaBravo225/items/48000cdf01dde7698930
2020/04/13(月) 14:35:31.90ID:6KK4qS560
てかそんな条件がパット見でわからんくなるなら、根本的にそこにいたる道筋がおかしいと思うよ
2020/04/13(月) 17:03:53.08ID:wlUJ1QGb0
SSH.net使った事ある人います?
フォワードポイント設定後、Startしてプログラムは通ってるんですけど、なぜかポートが開かないので困ってます
RloginというフリーのSShソフト使うと同じポートが開くので、SSH.net側かVS側が原因と考えてます
ネットの先人たちの知恵を拝見して同じようにしてるんですけど、なぜか上手くいきません

開発環境
VS2017
Nugetより最新のSSH.netを入れてます

netstatコマンドでポートの確認したら、192.168.〜の所が開かず、[::]の所が開いてるようです
これはなんなんでしょう?
2020/04/13(月) 17:14:22.22ID:Szw9E2890
>>292
ポートじゃなくてIPどうなってんの?
見た感じv6が開いてそうな感じだけど。
2020/04/13(月) 17:18:05.18ID:ujcK/XL20
ポートフォアード開始してる?ステップインで状態とエラーメッセージ追えば理由なんとなくわかるんじゃね?
2020/04/13(月) 17:41:05.66ID:wlUJ1QGb0
>>293
>>294
返信ありがとうございます!
>>293さんのおっしゃる通りv6が開いてました
フリーソフトは両方開けてくれてたので、そこで勘違いしてました
こんな簡単な事でスレ汚してすいませんでした
ありがとうございました
2020/04/13(月) 19:23:38.52ID:o+L/gyE50
拡張メソッドがあるのに、拡張プロパティなどが無いのは何故でしょう?

多くの日本語解説サイトで DirectoryInfoではなくDirectoryを、EnumerateFilesでなくGetFilesを使ってるのは何故でしょう?
 (対応していないバージョンのC#を利用する人も、その方が高速・妥当なコードも稀だと思うのですが…)
2020/04/13(月) 19:55:51.75ID:i5ardRu40
>>296
> 拡張メソッドがあるのに、拡張プロパティなどが無いのは何故でしょう?
Why No Extension Properties?
https://blogs.msdn.microsoft.com/ericlippert/2009/10/05/why-no-extension-properties/

> 多くの日本語解説サイトで
解説を書いてるヤツらに聞け
2020/04/13(月) 20:03:19.03ID:Bv/vlgUb0
拡張プロパティの類はC#10かもうちょい先ぐらいで追加されそう
https://ufcpp.net/blog/2018/7/pickuproslyn0714/
2020/04/13(月) 20:08:08.68ID:Wzp4v7WxM
>>298
最悪の提案だな
言語にこういう横断的関心事を入れられるようになるとだいたい無茶苦茶になるから、絶対にやめてほしい
2020/04/13(月) 20:26:56.25ID:o+L/gyE50
>>297,298
なるほど 確かにC#3.0に並んでるものと比べたら、優先度低くても全然不思議じゃないですね
将来的な実装を心待ちにしておきます ありがとう!

開発チームの内情というか現実的な部分の説明が面白かったw

>>299
言われてみれば、強力な反面 把握し辛い奇想天外なクソコードも書きやすくなりそうですね
2020/04/13(月) 20:49:56.31ID:4T6PL/Gc0
>>298
リフレクション使うとどんな挙動になるんだろ
2020/04/13(月) 21:10:08.00ID:Bv/vlgUb0
>>301
今の拡張メソッドと特に変わらんのじゃない?

>>299
ちなみに言語にこういうのを入れて滅茶苦茶になった言語ってどんなのがある?
どんな感じに滅茶苦茶になったのかな
2020/04/13(月) 21:18:16.05ID:VqvNVGMOa
>>302
そういう失敗例ならScalaでも見てみたら
2020/04/13(月) 23:30:22.44ID:IBaPMQxT0
Taskとasync/awaitの使い方について質問です
await Task.Delay(100);

task.Wait();
を組み合わせるとデッドロックすると色々なページで書かれていますが

試したらデッドロックしませんでした
https://ideone.com/d6BWCC

ConfigureAwaitもよく分かっていません(コンテキストとかマーシャリングとかも・・・)
https://docs.microsoft.com/ja-jp/dotnet/api/system.threading.tasks.task.configureawait?view=netframework-4.8

なぜデッドロックしなかったのか教えてください
2020/04/13(月) 23:33:06.25ID:LODcFAHq0
>>304
guiでWaitメソッドを使ってみて
2020/04/14(火) 00:04:17.51ID:wwnZT3mo0
WPFで適当なボタン作ってクリックイベント内で同じようなことをしたらフリーズしました
GUIじゃなければ起きない、とかでしょうか
CUIだとフリーズせず実行できてしまいます
2020/04/14(火) 02:23:36.56ID:hp+6QaJX0
・UIスレッドは1つしかない
・GUIアプリの場合、await後は生成元のスレッドに戻ろうとする
・ところがUIスレッドはawaitしている
・お互い待ち合うことでデッドロック発生

CUIの場合はawait後に元のスレッドに戻らないのでデッドロックしない。
GUIでもAsync1、Async2のメソッド内で
await Task.Delay(100).ConfigureAwait(false);
とすればデッドロックしないが、Async1やAsync2でDelay後にUI部品触ると(ボタンのキャプション変えるとか)落ちる
2020/04/14(火) 09:01:56.56ID:wwnZT3mo0
なんとなくわかった気がしました

SynchronizationContext.Currentで取得できる同期コンテキストでawaitの動作が変わってるみたいで
CUIはもともとnull、WPFは
await Task.Delay(100).ConfigureAwait(false);
のあとはnullになるようです

一度nullにしてしまえば
await Task.Delay(100);
Async().Wait();
とやってもフリーズしませんでした
というかCUIと同じようにawait毎にスレッドがコロコロ変わるようになります

逆にCUIでも同期コンテキストを設定してしまえばデッドロックも起こせるみたいです
SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());
とやったらCUIでもフリーズしました

普通のnew SynchronizationContext()ではフリーズしないので、知らない仕掛けがありそうですが
同期コンテキストの作られ方によってawaitの動作が変わるから
デッドロックが起きたり起きなかったりする、という感じがしました
2020/04/14(火) 11:04:24.75ID:27IsOs6K0
WinformsやWPFは各々フレームワークのコンポーネントの初回呼び出しで
それぞれ専用の同期コンテキストを自動で現在のスレッドに設定して
await 式から自動生成されたコードで現在の同期コンテキストのSendやPostを呼び出してるって割と単純な話だわよ
2020/04/14(火) 21:47:37.07ID:kOEIvzYK0
質問失礼致します。
ttps://xr-hub.com/archives/20326
の2番目のサンプルコード「Person.cs」に

public Person(string name, Job job)

という行があるのですが、これは関数ですか?
publicの後の型やvoidを省略した時、どういう扱いになっているのでしょうか?
(暗黙的にvoidなど)

初歩的すぎる質問ですが知恵をお借し頂ければと思います。
よろしくお願い致します。
2020/04/14(火) 21:49:20.96ID:LYeRKBcY0
>>310
コンストラクタで検索してみよう
2020/04/14(火) 21:52:06.64ID:LIgN/yKN0
>>310
それはコンストラクタで関数じゃない

http://www.kumei.ne.jp/c_lang/cs/cs_24.htm
2020/04/14(火) 22:02:45.41ID:kOEIvzYK0
>>311,312
コンストラクタと言うキーワード自体を知らなかったので大変助かりました!
迅速なお答えありがとうございます。
2020/04/14(火) 22:48:21.91ID:GtUt/+gx0
コンストラクタが関数じゃないだとっ?
2020/04/14(火) 23:10:59.52ID:e1S+5JbE0
>>312
え?
2020/04/14(火) 23:32:09.30ID:a7j1JMim0
>>313
コンストラクタ知らないとか煽り抜きで基礎からやり直せ。この先すぐに行き止まりやぞ
2020/04/14(火) 23:38:54.68ID:aqCEjjHy0
ゆっくり進んでいけばいいさ
2020/04/15(水) 00:53:54.59ID:fYr2Vm730
コンストラクタは言語によってちょこちょこ違いがあるからなあ
それによって作法も、チームとかのなかでの使い方も違うんだよな
2020/04/15(水) 06:29:23.91ID:ElrUDxqt0
初心者で妥当な用語もよく分からないのですが、

Sytem.IO.File全体を Sytem.IO.FileInfoで上書きしたり
Sytem.IO.File全体を FileUtilsにリネームして利用ってできるでしょうか

多分歴史的経緯とかなんでしょうが、名前も機能も違和感ある・・・あるよね?
2020/04/15(水) 06:30:19.71ID:ElrUDxqt0
正system
誤sytem
2020/04/15(水) 07:39:24.57ID:0X0pe0WE0
>>319
名前空間の上書きは出来るよ
using に= を付ける。
マニュアル読むべし
2020/04/15(水) 07:54:03.68ID:HIqtt51zM
マニュアル読むならこのスレには来ないよ
2020/04/15(水) 07:59:57.33ID:WVx1tERFM
進歩しろってことだろ
>>322には一生無理っぽいが…
2020/04/15(水) 08:16:40.55ID:ElrUDxqt0
>>321
ありがとう! alias directiveで上書きになるのか
aliasって単語から、上書き用に使うという発想が出てこなかった・・・
2020/04/15(水) 11:11:56.53ID:O8tgepsJ0
>>319
名前も機能もべつに違和感ないけど
2020/04/15(水) 11:38:37.86ID:hXBJaVw20
>>319
すでにFileInfoは存在してるしUtilsみたいな抽象的な名称はあんま好きじゃない
あくまでもnamespaceなんだから個人的に違和感は無い
327デフォルトの名無しさん (アウアウウー Sa1b-V/21)
垢版 |
2020/04/15(水) 12:23:21.76ID:4U/dMrxba
>>319
あなたの違和感をなくすために他人に違和感を与えるコードを書いてはダメでしょうw
そういう尾崎豊的な「世の中間違ってる!」は義務教育で卒業しておけよw

インフラはみんなが慣れ親しんで知識を共有していることに意味があるんだよw
変なエイリアスを使うことはあなたの「俺流」を理解する手間を読む人に押し付けることになる。
それは1年後の自分自身かもしれないよw
2020/04/15(水) 15:49:28.85ID:fYr2Vm730
自分だけのコードなら好きにすればとしか
チームで共有するならレビューしろとしか
2020/04/15(水) 23:14:10.59ID:erSE2P+N0
添付プロパティがあるじゃない
2020/04/16(木) 00:47:09.81ID:97EKYXOu0
まさにそういう話で、(大多数が慣れ親しんだ知識である)自然言語で full path of a file だから

(FileInfo) hoge.FullName より
(File) file.FullPath の方が読みやすく、知識なく利用しやすくない? と思ったんだ

自分が知らないだけでFileInfoやFullNameの方が妥当な理由あるのかな
331デフォルトの名無しさん (アウアウウー Sa1b-7wDT)
垢版 |
2020/04/16(木) 00:49:55.71ID:PmElPVF7a
質問です。
visual studio2013 のWEBフォーム(.aspx)を使用しています。
以下のようなフォームを作りたいです。 どうやってつくったらよいでしょうか?
  ▼コンビニ  ←選択すると▼マークになり、折り畳みのチェックボックスリストが出る
    ■セブンイレブン  ←選択するとレ点でなく、□を塗りつぶす
    □ローソン
    ■ファミリーマート
  △ショッピングモール ←選択しないときは△マークでリストは折りたたまれている
  △スーパー

よろしくお願いいたします。
2020/04/16(木) 00:52:31.21ID:5emHbHZx0
チーム内でそれを浸透させる実力があるならいいんじゃね
俺はデフォルト推奨派なので、それだけの理由なら無意味な改変に見えるので
、それは賛成しないがな
「俺が見易い」は「皆が見易い」ではない
2020/04/16(木) 00:52:46.91ID:tiZKLZWE0
ベースはアコーディオンかな?
2020/04/16(木) 00:56:55.23ID:tiZKLZWE0
CreateFontがMFCではCreateFontIndirect
でオーヴァーライドされている事を
知った時の驚き。😵

世の中広いからそういう常識の所も
あるのでしょう❤
2020/04/16(木) 01:31:46.69ID:kjXrQDZb0
windowsならpathってだけで他システムでもpathかどうか?
組み込み系OSだったらディレクトリ構造持ってないようなやつあったりしないかね?全然しらんけど
つうかその程度なら332と同じく公式に準拠する
IDEがヘルプ付きで候補出してくれるんだし、リファレンスもあるんだから困るほどのことじゃない
あくまでもプログラムであって自然言語じゃない
2020/04/16(木) 02:36:44.98ID:tywb42E30
PowerShell では、FullName

$files = ls -File
echo $files[ 0 ].FullName
2020/04/16(木) 07:33:52.84ID:9ICqslwr0
共有フォルダに置いてる実行ファイルで、一人が起動している時に別の人が起動したら処理中ですとお断りメッセージ出したいのですが、どういう方法で実現できるでしょうか?
DBでフラグ監理しようかとも思っているのですが、世間様はどうしているのかなと思い
2020/04/16(木) 07:47:41.61ID:tywb42E30
共有フォルダ内に、ファイルを置いて、それに記録すれば?
2020/04/16(木) 08:37:52.82ID:vjXf34hg0
ロックファイル的なものを起動時に作成・チェックさせるとかかねぇ?
異常終了したりしてロックファイルが残った時が面倒だけど
そもそも共有フォルダに実行ファイルを置いて、それを起動するって運用が微妙な気がするけど
2020/04/16(木) 09:47:16.73ID:ADqfPc91r
それな
ファイルおいたとこで実行ユーザはローカルとか、なにそれって感じ
なんでサーバにしないのとかね
2020/04/16(木) 10:45:00.68ID:+RUJOV4w0
Unix環境とかならファイルオープン時に共有モード指定できないから、ロックファイルを「作成」できるかで排他制御するけど、
Windows環境なら共有モード指定できるから、「排他モードでオープン」できるかで排他制御できないの?
そうすれば、ロックの解放は単にファイルハンドルを閉じるだけでロックファイルを削除する必要はない。

で、異常終了してプロセスが終了した場合はOSがプロセスによって開かれてたファイルハンドルをクローズしてくれるので、
自動的にロックも解放されるってことにはならないの??
2020/04/16(木) 11:06:22.69ID:+RUJOV4w0
途中共有モードを無視するような輩がいたらあれだけど、とりあえず全部Windowsで揃えてSMBで共有すればそれでいけそうな気がする
2020/04/16(木) 11:06:44.41ID:X8YLxQCs0
設計が悪い
2020/04/16(木) 11:07:10.39ID:tiZKLZWE0
理論通りに動けば良いなぁ

なおopenfiles ってコマンドで強制解除出来る
2020/04/16(木) 11:17:40.23ID:+RUJOV4w0
そうすれば、アプリ起動時にnew FileStream(特定のファイル、FileShare.None) アプリ終了時にStream.Closeの2行で実装終了

Windows最強
2020/04/16(木) 11:28:29.69ID:vjXf34hg0
>>345
それって共有フォルダ側が安いNAS(≒samba)でも使えるの?
2020/04/16(木) 11:51:08.70ID:+RUJOV4w0
>>346
それは知らない。

すべては要件次第。あくまで全部Windowsで揃えられる場合の一番簡単な実装を示しただけ。

安いNASでダメだったら、君のいうロックファイルのやり方でやればいい。ただし、君の方法もひょっとしたら安いNASで「ファイルの存在確認とファイルなければ作成」をアトミックにやってくれないSMBの実装があって使えない可能性もあるので。
2020/04/16(木) 12:10:19.37ID:7ingXuoIM
>>339
> そもそも共有フォルダに実行ファイルを置いて、それを起動するって運用が微妙な気がするけど
バージョンアップの手間を省きたいとかでしょ
Web化しろとかの話もあるだろうけどそこまで工数かけられないとか普通にあると思う
349デフォルトの名無しさん (アウアウウー Sa1b-V/21)
垢版 |
2020/04/16(木) 12:11:00.19ID:qm5c5Rqxa
>>337
微妙に要件と違うけど、昔のアドビのアプリは同一ネットワーク内のPCでは
同じプロダクトキーでアクティベートされたソフトは同時に起動できなかった

あれと同じ仕組みを使うことは可能じゃないか
具体的にどういう仕組みか知らんけどw
2020/04/16(木) 12:45:50.28ID:tiZKLZWE0
udpでマルチキャストする
2020/04/16(木) 18:51:55.07ID:9ICqslwr0
DBにログインIDと開始時刻を記録して処理が成功したら記録削除、失敗してたら20分経過で無効情報で良いかと思ってます
処理が20分超えたらアウトというイケてない部分をどうしようかとも思ってます
だったらファイル管理でも良いかなと思ってますが
2020/04/16(木) 19:13:42.88ID:jOE4Vo+O0
DBに処理対象を一意な文字列にして、ユーザIDとIPアドレスをもってロックを確保しに行ってるな。
弾かれた側に「誰々がどこでロックしてるから諦めるか直談判しにいけ」ってメッセージにしてる。
ロックが外れる時間は2分にしてるけど、ロック掛けてる側が、30秒ごとに延長するように更新してる。
トランザクションは増えるけど、強制終了してロックが残ったのを外す方が手間。
20分待ってくれる方が少ないと思うぞ。
1000人ぐらいが同時に使ってるが、それほど負荷は無い。ジャーナルの残し方だけ気にした方がいいぐらいか。
2020/04/16(木) 22:10:16.88ID:phPWx1q30
>>351
タイムアウトを含めて失敗したら即リソースを解放すればいいだけでは?

あと排他制御が必要なリソースの状態を管理するテーブルと
そのリソースを誰が使ってるかみたいな情報を管理するテーブルは別にしたほうがいいよ
2020/04/17(金) 07:33:58.48ID:sST11acE0
>>353
処理失敗とかイベント取れる所なら良いのですがパソコンがネットワークからいきなり外れた時とかどうしようかなと
2020/04/17(金) 15:28:13.52ID:xgpGiYXu0
>>354
共有フォルダに実行ファイルを置くやり方だから
クライアント側でしかタイムアウト検知できないって話なのか

そうすると>>352が書いてるような方式になるけど
サーバー側で実行するやり方なら必要のない複雑性を抱える事になるから
テストや運用時の手間を考えるとアーキテクチャ見直したほうが早い気がする
356デフォルトの名無しさん (ワッチョイ d777-Ho7r)
垢版 |
2020/04/17(金) 23:54:48.06ID:66fHRI6x0
chartのX軸のスクロールバーを動かしたときのイベントハンドラ的なものってありますか?
具体的には、縦軸(Y軸)の範囲を表示されている範囲内の最大値と最小値に逐次変更したいです。
2020/04/18(土) 15:39:00.86ID:9PsozTHm0
これで解決しそうです。
https://stackoverflow.com/questions/5363209/chart-control-y-axis-auto-scale-on-scrolling
358デフォルトの名無しさん (アウアウウー Sa1b-7wDT)
垢版 |
2020/04/18(土) 23:09:11.85ID:fgVpQ9I4a
>>331
この問題どなたか教えていただけないでしょうか?
とくにレ点じゃないチェックボックスを作成したいです
2020/04/18(土) 23:47:30.29ID:Fpx5gr7r0
>>358
cssで装飾したら?
2020/04/19(日) 17:56:07.02ID:a5Bxo0wQ0
FormにWebboewserコントロールを張り付けて ↓のコードコピペしたのですがThis がFrom1を参照しているのでエラーになります。
正しく使うのはうすればいいのでしょうか?


https://todosoft.net/blog/?p=380
2020/04/19(日) 18:02:11.94ID:jRRmPQvY0
今時、IE7ベース?
cefsharp使ったら?
2020/04/19(日) 18:32:01.51ID:a5Bxo0wQ0
今時WebBrowserコントロールは古いんですね
とりあえず、これは勉強の為のなので、WebBrowserで大丈夫です。
上記コードの this を webBrowser1 に置換すれば問題なく動きますが、thisのまま使う場合はどのようなコードになるのでしょうか?
363デフォルトの名無しさん (アウアウウー Sa1b-V/21)
垢版 |
2020/04/19(日) 19:46:35.97ID:E7TwXw1va
ちょっと何言ってるのか
2020/04/19(日) 19:56:24.71ID:3Oe7CVmea
>>362
リンク先のソースのメソッドは、おそらくはFormではなくWebBrowserを継承したコントロールに書くメソッド
WinForms標準のコントロール自体に機能追加することで、あちこちのFormでWebBrowserを使うつどそういうソースを書かなくて済むようにしてる
初学者でカスタムコントロールの作りかたとか未学習なら「this を webBrowser1に置き換え」で回避してよいと思う
2020/04/19(日) 21:42:29.85ID:a5Bxo0wQ0
>>362
なるほど、このコードはカスタムコントロールを目的としているのですね。
納得しました。ありがとうございました。
366デフォルトの名無しさん (ワッチョイ 779b-+5sX)
垢版 |
2020/04/21(火) 13:34:05.32ID:3bJr7zNG0
Form1に以下のような構造体を作ったんです。

// ----------通知方法の構造体--------------------
public struct Nortification
{
  public bool OpenBrowser;
  public bool MessageboxShow;
  public bool ToolchipBaloonShow;
}

次にメンバ変数として以下を定義しました

  static Nortification _nort = new Nortification(); //構造体のインスタンス

で、プロパティを作ったんです

public static Nortification nort
{
   get
   {
     return _nort;
   }
   set
   {
     _nort = value;
   }
}

ところが、このプロパティをForm2で書き込もうとすると
  Form1.nort.OpenBrowser = true;

「変数ではないため Form1.nort の戻り値を変更出来ません」とエラーになります。
367デフォルトの名無しさん (ワッチョイ 779b-+5sX)
垢版 |
2020/04/21(火) 13:38:13.11ID:3bJr7zNG0
>>366の続き

しかし、以下のようにするとエラーは消えました。

   Nortification nt = new Nortification();
   nt = Form1.nort;
   nt.OpenBrowser = true;
   Form1.nort = nt;

いったん別のインスタンスを作ってそこに構造体ごとコピーし、
コピーのメンバなら値を設定出来ました。

最後に元のインスタンスへコピーし直します。

なぜ元の構造体のメンバに直接値を書き込めないのでしょうか?
そもそも構造体の使い方が間違っていますか?
2020/04/21(火) 13:51:21.58ID:cdjEy/7BH
>>367
C#入門者が必ず嵌るポイント
c# 値型と参照型 とかでググれば腐るほど出てくる
構造体は特性をよく理解した上でパフォーマンス上のメリットがある場合のみ使うもの
今は忘れてクラスだけ使ってればいい
2020/04/21(火) 15:53:17.78ID:1MDMdwK80
このメモリ大容量時代に構造体プログラミングなんてすなや
2020/04/21(火) 16:02:20.66ID:LjsiMFkA0
必要なとこでは必要なんだよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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