ふらっと C#,C♯,C#(初心者用) Part141
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 今後、開発作業が増えてEXEのファイルサイズが大きくなっていく事が想定される場合
プロジェクト分けた方がええかな?
インストール型じゃなくてWEBシステムとして作ろうか悩み中 「拡張メソッドはトップレベルの静的クラスでしか宣言できない」ということは、
public class Cの内部にprivate enum Eを置いたとき、Eに対して拡張メソッドを追加することは不可能なのでしょうか
いくつかの定数(とメソッド)を持った構造体で代用するしかないですかね そこまでobj.method記法に拘る必要も無いだろ… >>162
どうでもいい
開発規模ウン億円とかにならない限り、人間が書いたコードの実行ファイルのサイズなんて全く問題にならない
それはともかく、Webを選べるのなら迷わずWebにすべき
exe配ると後々のメンテは地獄よ >>165
なるほどですね。
どうしてもWEBだと厳しいシステムなんですよね。
(サーバのIPアドレスが固定だとまずい)
cliclonceというのを使えばバージョンアップとか簡単ですか? ClickOnceはシステム管理者がガチギレするらしいので利用しないのが吉 クリックワンス
http://www.asahi-net.or.jp/~ef2o-inue/vbnet/sub13_05_010.html >>163
仮にenumを入れ子にする点は譲れないとしても(この点も本当は再考した方がいいと個人的には思うけど)
アクセシビティーをpublicにすることは検討していいんじゃないの?
隠蔽したい気持ちは分からんでもないが、少なくともpublicにしたからって何か危険があるわけじゃない。 >>172
よく考えたらenumを入れ子で隠す設計をc#は想定してないってことですもんね
大人しく外に出します、ありがとうございました DataGridViewに詳しい人は教えてください。
DataGridViewの列にチェックボックスの列を設けています。
□がクリックされた時だけではなく、□の属するセル(の予約)が
クリックされても□にチェックが入る様に制御したいのですが
どうすればよいのでしょうか?
何かプロパティで設定するのですか? >>174
CheckBoxのセルのクリックで切り替えたいのなら
例えばCellをReadOnlyにしてCellClickイベントで値を切り替えればできる >>175
なるほど!
そーいう方法しかないんですね。
てっきり標準で設定出来るプロパティがあるのかと思ってました。 >>176
方法の一つをあげただけでプロパティにあるかは知らない >>177
サンクス!
セレニウムにチャレンジしています。
VSで作成した場合
インストール環境にNugetが入っていないとうごかないのでしょうか? >>178
アクセス元に迷惑掛けるの目に見えてるから辞めとけ >>180
スクレイピングの練習やで
サンドバッグになってもらいます。 スクレイピングをこれまでIEを操作して行ってきていましたが
セレニウムを使う方がナウいのでしょうか?
コンソール画面が立ち上がって結構うざいんですが >>183
コンソールを消す事はできました。
ただ、問題がありまして
Cromeを使ってログインしないと見えないサイトの中のとあるページを
スクレイピングしようと思っていますが、一度ログインしたのに
もう一度プログラムを実行すると再び画像認証付きのログインページが表示されてしまいます。
Chromeのセレニウムでログインした場合、
ログインセッションは、プログラムを終了すると自動でとじられるのでしょうか? セレニウムで画像選択は同実装すればよいのでしょうか?
Windwos APIを使わないと、ダメでしょうか? スクレイピングはできる様になりました。
ドラッグするか、その枠をクリックしてファイルを選択するしか
画像の選択が出来ません。
セレニウムでドラッグやファイルの選択はできないですか? スクレイピング(が何かわかって無いけど)はできる様に(なった気持ちに)なりました。 select ユーザーコード, ユーザー名 from tbl_user group by ユーザーコード, ユーザー名 order by ユーザーコード
上記のクエリを、Visual Studio 2019の、クエリの構成ウィザードで実行すると成功するのですが、
構成ウィザードで作成したGetData()メソッドをソースコードから呼び出すと、
"System.Data.ConstraintException: 制約を有効にできませんでした。行に入力できるのは、Null 以外の値、一意な値、あるいは外部キーですが、この制約の違反が 1 つ以上の行で発生しています。"という例外が発生します。
何が原因でしょうか? ありがちなのは
その型付テーブルにユーザーコード・ユーザー名以外の列があって
それがNULL非許容であるケース
そろそろ型付テーブルは捨ててみるのはどうだろう >>194
ありがとうございます。
捨てるというか、今データベースプログラミング覚え始めなのです・・・。 group by したらorder by は要らない
と思うんだけどね つか、ユーザーコードかユーザー名にnullがあるんじゃね? >>196
order by しないと結果の順序は不定だぞ C#の勉強のためにメモ帳を作ろうと計画していますが
フォームにTextBoxを貼り付けるだけではあまり面白くありません
また禁則処理や縦書きの機能もついていません
なにか他のもの、WebBrowserあたりを使うのかな?と想像しているのですが WPFだとImageを使うんでしょうか
ImageもしくはPicutureBoxを使う方向でやってみます WPFならWPFのスレで聞いた方がいい
WPF(.NET4.x, .NET Core) GUIプログラミング Part23
https://mevius.5ch.net/test/read.cgi/tech/1557960752/ >>200
メモ帳意外と難しいよね
オレも初めの頃作ろうとして挫折した(あわよくばテキストエディタ目指そうとしてたのもあって)
勉強のためだけだとモチベ上がらないので、世の中にあるけど、俺様仕様なのが欲しいってのを作ってみてはどうかな(なるべく簡単なものから) A・B・C・E・Dという5つの項目があって、
例えば、Aが10で、Bが10で、Cが15で、Dが20で、Eが30の時、3という数字を格納したくて、
今までは多次元配列で、num[10,10,15,20,30]=3という風に入れてたのだけど
これだと配列の宣言時に添え字大きいとメモリ足りないエラー出たりするのだけど
多次元配列以外でこういう処理するほうほうはないでしょうか >>207
dictionaryでkeyをtupleにするとか? >>208-209
ありがとうございます
試してみます 扱うアイテム数や更新や検索速度によっても解は変わるけどね C#でメッセージボックスそっくりのフォームを表示したいのですが、
既にそういうことやって公開してるサイトとかあったら教えてください。
とりあえず警告とかのアイコンとメッセージとOKボタンが出ればOKです。 >>212
MessageBoxクラスと言うそのまんまなのが標準であるけど >>213
英語OS環境でも日本語を表示したいので、MessageBoxだとだめなんです 英語OSで日本語表示
マルウェア臭しかしない
出来たとしてもやめたほうがいいw 手元に英語版Windowsがないから確認できんけど、
Win9xの時代じゃないんだから英語版Windowsだからって日本語のメッセージが化けるとかないはずだと記憶してるけど
違ったっけ? >>217
MessageBoxクラスはロケールのシステムフォントで表示されるので化け化けです
逆にこのクラスのフォントを変えられればそっちでも良いんですがぐぐっても全く出てこず・・ >>219
他の画面を作るのと同じようにFormを自作してShowDialogするだけでいいよ >>219
ほんと?
OSで設定されてるフォントが使用されるのはそう(デフォは昔ならTahoma、今は何だっけ?)
なんだけど、WindowsにはFontLinkって仕組みがあって、欧文以外の文字の場合は適当な
フォントが代わりに使用される仕組みになってるはずだと思うが...
まあどっちにしろサクッと自作しても大した手間ではないな Windowsのデスクトップアプリ作ってみたいんだけど、UWPじゃなくてWPF使った方がいいの? >>225
何が目的?
ストアで売りたいのならUWP
Windows 10以外で使う気があるのならUWPは厳禁 >>226
一度も触ったことないからデスクトップアプリ作ってみたい
販売もWin10以外で使う予定もないです >>227
Visual Studio使ってWindows Formがクッソ楽とWPF使ったことない人からのアドバイスしとくw >>228
楽かどうかはWinformもWPFも同じだよ〜
webで拾える情報はWinformの方が多いが >>230
横だけど
日曜プログラマレベルでWinFormsでそれなりにDB連携の業務アプリを作って運用してはいるんだけど
今更WPFの勉強スタートして使いものになるかな?
つーか、1度作ったWinFormsをWPFにするには作り直しだよね・・・ >>231
Winformを使いこなしてる人が、今からWPFやっても得るものは少ないだろうね
WinformもWPFもやったことない人なら、どっちでも楽さは変わらない
あと、Winformなアプリでも一部だけWPFにすることもできるから、完全に作り直しとも限らないよ Win32をWindowsから追放してUWP化する計画は
やっぱりとん挫かw
ここ10年ぐらいMSはこんなことばっかりやってるね >>235
乗り換えるってのがわからん
普通複数の言語使えて状況に合わせて使い分けるものでは >>234
もうWin32に新たな関数を追加していくだけでいいんじゃないか
既存の分かりにくい関数とかも整理して新たな分かりやすい代替関数を追加して
古いのは非推奨にしていずれ廃止していくとかさ 内部文字コードのUTF8化と同時に整理して欲しいよなー
もうそろそろ互換性はいいだろ >内部文字コードのUTF8化
これは愚策
出入りはUTF8で良いけど SetWindowPosとかなあ
Posとか言ってSizeもZOrderもこれ使うとか初心者が勘違いするだろ
SetWndPosとSetWndSizeとSetWndZOrderに分けろや
ライブラリ作っとけばいいだけなんだけどさ xamlに別のxamlを挿入してその子要素にBindingってできないですかね? >>241
xamlで作ったユーザーコントロールは普通に使える
その時DataContextはカスケードで子要素のユーザーコントロールにも落ちるから
普通にバインドできる
ってことでいい? picturebox の中の画像の位置はどうやったら取得できるのでしょうか?
例えば、w 500 , h 500 の picturebox に w 300, h 500の画像が真ん中揃えで表示されているとき、x 100, y 0 みたいな値をとりたいのです。
画像の上に線とか図形とかを描画するための基準となる位置が欲しいのです。
ImageLocation プロパティで取れるかと思ったら、これはURL とかを指定するものでした。 自分で計算する
PictureBox::ImageRectangleFromSizeModeをリフレクションで呼び出す
上に何か描画するとかならImageプロパティは放棄して自分で全部描いた方が手っ取り早いかもね >>244
c# でリフレクションというのは攻撃魔法をときどきはね返す防御魔法のようなものだと思うのですが、リフレクションを使う方法は具体的にどうするのでしょうか?
自力で計算する方法でとりあえずはなんとかなりそうです。
まだコード書いてないけど、画像の表示方法と画像サイズと pictureBox のサイズがわかるのでそこから計算できそうです。
縦と横の拡大縮小率の計算が少しめんどくさいだけかな? ttps://gist.github.com/Flafla2/f0260a861be0ebdeef76
の
public Perlin(int repeat = -1) { this.repeat = repeat; }
は
public Perlin() { this.repeat = -1; }
と同じ意味でしょうか?またそうであれば、なぜパラメータとしてint repeat = -1としているのでしょうか? >>246
違う
引数を省略した場合は引数に-1と指定されたみなされる >>246
Perlin()と呼ぶことができる
これはPerlin(-1)と書いた場合と同じ
Perlin(0)ってかけばrepeatには0がはいる
だいたい-1なんだけど時々別の値にしたいときなんかに使う
詳しくはオプション引数でググって 1 2次元空間上の座標に乱数で円を重ならないようにたくさん配置します。
2 全ての円の座標の平均値がある条件を満たせば終了。
3 満たさなければ初期化して1に戻る
円の数を増やすと2の条件が厳しくなるので、12のループの繰り返しが指数関数的に厳しくなります。
100個を超えると配置できずにフリーズするんですが、
60ぐらいでも10回に1度くらいフリーズします。
10回に1度フリーズするのがよくわからない。。。
Windowsって特定のアプリがループ処理をし続けるとアプリをフリーズさせるようなシステムがあるのでしょうか? >>250
コントロールの表示の更新が追い付かずにフリーズして見えるだけじゃないのか
それだったら描画ごとにRefresh入れればいいが
とりあえずミニマムコードくらい見ないとエスパーするしかない >>251
すいません。
250はかなり要約して書いていて、本当はかなり長いコードでここには載せ難く。
10回に9回は1秒程度でループを抜け終了するので、
しばらく待ってれば表示されるかと思うと、やがてOSから応答してないよとメッセージがきます。
cならリソース開放忘れを疑うのですが、c#ってそのへん自動で管理してくれるんですよね。 自分のバグを言語やOSのせいにする香具師は何をやっても大成しない ウィンドウプロシージャから呼び出された時に時間のかかる処理をすると
基本的にマウス入力も含めた後続のウィンドウメッセージが処理できないので
結果的に操作などが受け付けなくなりフリーズしたようになる
(5秒だかウィンドウプロシージャから戻ってこないとOSが駄目だコイツと判断してよく見る「応答なし」になる)
レンダリング以外の部分で一秒もかかる可能性があるならその時点で別スレッドにすべきではある
フリーズに規則性がないのはそれこそロジック見てみないと誰にもわからんでしょ
様子からしてGCが暴れてる可能性はあるので値型使ってみたりとかの余地はあるだろうけど 魔法の言葉、Application.DoEvents();
ループ処理の中に書くといいよ >>252
全体的に何を言ってるのかよく分からないんで推測だけど、
UIがフリーズするのはUIスレッド上のユーザーコードがビジーループになってるから。
ウィンドウやコントロールの再描画やマウスやキーイベントへの反応は
システム側のコードで処理されるわけだけど、それはUIスレッドで動く。
だからUIスレッド上のユーザーコードがビジーのままだと、
システムは側のコードも動けずにフリーズしたように見える フリーズするのはスレッドを分離してないのが原因だけど
それ以前に何らかの条件で無限ループになっている可能性もあるな >>250
まずそういうのは実際には円を描かないで演算だけやってみるところからはじめませう。演算が悪いのか描画が悪いのか切り分けたい。 >>257
無限ループの可能性もあるが
こういう指数関数的に計算量増える場合は
UIと計算スレッドを分離するか
ループ途中でシステムコール呼んでイベント処理させるのが定石 みなさんいろいろありがとうございます。
円の数とフリーズ確率に比例関係があるので、
ループでの処理が問題だと思います。
別スレッドにしてみようと思います。
それまで
Application.DoEvents();
活用してみます。 メモリ不足無視して実行し続けてるのも暴走って言うかもな ■ このスレッドは過去ログ倉庫に格納されています