ふらっと C#,C♯,C#(初心者用) Part141
レス数が1000を超えています。これ以上書き込みはできません。
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。 ピクチャーボックスにallowdropはありましたか?
フォームのプロパティからはみつかりません。
ピクチャーボックスからピクチャーボックスに画像を移動させるプログラを作りたいのですが、参考ページはありますか?ピクチャーボックス以外での解説はあるようです。 >>5
「フォームのプロパティ」じゃなく「PictureBoxのプロパティ」じゃないのか
もしデザイナの一覧に表示されていなくてもどっちにもAllowDropのプロパティはある
ピクチャーボックスからピクチャーボックスに画像を移動させるのはImageプロパティをそのまま代入するだけ ↑回答ありがとうございます
allowdropはコード上にしかないみたいですね
gui上からは設定項目が見つからないです グローバル変数の定義にvarを使おうとしたらだめだって言われたんだけど、これってなんで使えないようになってるの?
ローカル変数なら良くてグローバル変数ならだめとか意味が分からん private void pictureBox_main_of_form1_DragEnter(object sender, DragEventArgs e)
{
AllowDrop = true;
MessageBox.Show("ドラッグエンター");
}
ドラッグの許可ですが、これだけではドラッグできないです
メッセージのイベントが発生しないのですが、どこがわるいのでしょうか?
ドラッグエンターというのは領域内にドラッグされたら発生するイベントかと思います >>9
AllowDrop = true;はthis.AllowDrop = true;と同じ。つまりフォームのAllowDrop = true;の設定
それ以前にpictureBoxのドロップイベントでpictureBox.AllowDrop = trueにしようとしているみたいだけど無意味
コントロールの設定はどこでやるべきかわからない?もう少し考えてから質問するようにしないと どうやらピクチャーボックスの許可の問題のようです
panelなら問題なくメッセージが出ます
そちらについて調べてみます >>10
pictureboxはドロップを許可できないということですか? クラスのコンストラクタ、プロパティなど勉強して出直してきなさい ドラッグドロップって面倒臭いな。糞サンプル書いてみた
public Form1()
{
InitializeComponent();
listBox1.Items.AddRange(GetWebColors().Cast<object>().ToArray());
pictureBox1.AllowDrop = true;
}
private Color? mDataToDrop;
static IEnumerable<Color> GetWebColors()
{
foreach (PropertyInfo info in typeof(Color).GetProperties(BindingFlags.Public | BindingFlags.Static))
yield return (Color)info.GetValue(null, null);
}
private void listBox1_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left) return;
var index = listBox1.IndexFromPoint(e.Location);
if (index < 0) return;
mDataToDrop = (Color)listBox1.Items[index];
} private void listBox1_MouseMove(object sender, MouseEventArgs e)
{
if (!e.Button.HasFlag(MouseButtons.Left)) mDataToDrop = null;
if (mDataToDrop != null)
listBox1.DoDragDrop(mDataToDrop, DragDropEffects.All);
}
private void pictureBox1_DragDrop(object sender, DragEventArgs e)
{
var color = e.Data.GetData(typeof(Color)) as Color?;
if (color != null) pictureBox1.BackColor = color.Value;
}
private void pictureBox1_DragOver(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Copy;
} >>15を書いてて疑問に思ったんだが、ListBoxってマウスがキャプチャーされないのか?
ListBoxのクライアント領域の外でマウスのボタンを離してもMouseUpが発生しないけど何なのこれ。
変だよね? >>5
答えそのものをあげる
https://ideone.com/p9Hui9
Windowsフォームアプリケーションを作る
ソリューションエクスプローラーからForm1.csとProgram.csを削除する
ソリューションエクスプローラーのプロジェクトで追加->既存の項目でダウンロードしたcsファイルを追加する
ビルドして完成
左のボックスにはエクスプローラーから画像をドロップできる
右のボックスは左のボックスからドロップできる >>15
ごめんこれ思いっきり変なことやってるわ。
DoDragDropはMouseDownで一度だけ呼べばいい。
フィールド(mDataToDrop)なんか作る必要なかった。 ReadLineとParseはどういう違いがあるのでしょうか?
どちらも入力を行うための物みたいですが違いが分かりません。
https://ufcpp.net/study/csharp/st_consoleio.htmlを見ながらやってます 1+1は2になるのに1×1はなんで1なんですか違いがわかりません、みたいな質問だ >>20
Console.ReadLine()はコンソールから文字列を取得(入力)
int.Parse()/double.Parse()は文字列をint型/double型に変換する >>22
charもReadLineですかね?
分かりました。ありがとうございます form1.csというファイル自体はクラスとは言わないのでしょうか? ドラッグイベントについてなんですが、やり方としてはマウスの位置にコントロールを移動させると考えて良いでしょうか? >>24
「クラスが何か」って説明は自分が>>20で書いたサイトを読み進めれば書いてあるのにまだ読んでないの?
https://ufcpp.net/study/csharp/oo_class.html
>>27
>15-16,18のどこに「マウスの位置にコントロールを移動」している部分がある?
マウス止めてそこにコントロール持ってくることがまずおかしいでしょ
>16はlistBox1.DoDragDrop(mDataToDrop, DragDropEffects.All);
>18はpictureBox1.DoDragDrop(dataObj, DragDropEffects.Copy);
のそれぞれが「ドラッグドロップを開始(DoDragDrop)」
そしてDragDropイベントでコントロールに対する「ドラッグドロップを受ける」動作になっている .Net Frameworkの標準クラスライブラリにある全インターフェースの機能見たいんだけど
MSDNしかない? IEnumerable<T>
ICollection<T>
IList<T>
これって分けてる意味あるの?全部IListでよくない? >>30
使う側目線に立てばね。「大は小を兼ねる」
実装する側に立てば違うでしょ。
Enumerable<T> がなければイテレーターも存在できない。
>>15に書いた↓みたいな奴ね
static IEnumerable<Color> GetWebColors()
{
foreach (PropertyInfo info in typeof(Color).GetProperties(BindingFlags.Public | BindingFlags.Static))
yield return (Color)info.GetValue(null, null);
} LINQみたいな(値の集合ではなく)シーケンスとして扱うライブラリも存在できなくなるね 使う側からしても大は小を兼ねるは無い。
いざメソッドを使ってみたら、NotSupportedException例外が飛んでくるとか嫌でしょ。 IList使ったからって容量が膨大になるわけじゃないでしょ?
謎すぎる 機能の意義の話か
列挙して読み取りするだけの機能なのに
AddやRemove機能ついてるのもおかしいよねって話か IEnumerable 読み取り専用、前方走査可能
ICollection 読み書き可能、集合全般(順序有り集合、順序無し集合など集合のスーパーセット)
IList 読み書き可能、順序有り集合、ランダムアクセス可能(実装上ランダムアクセスを装っているだけのものもあるが)
それぞれ特性が全く異なるので使い分けが必要です そういや、インターフェイスの使い方が全く身につかん
DI等でインターフェイスを使うことが強制される場面を除いては使ったこともない・・・・
どうすればまともなコードを書けるように練習できるん? >>38-39
ありがとう
SOLIDの原則を大雑把に見てきたんで、守れるように努力するよ 異なるクラスなんだけど、List〈インターフェース〉とかにして、foreach回したり出来るのがうれしいってことでおけ? WPF覚えると何か嬉しい事ありますか?フォームとの違いが知りたい。 IEの自動操縦には大分慣れてきました。
そこで今回、
MicrosoftEdgeを自動操縦したいと思います。
この方法を解説している良いブログなどありませんか? >>42
Bindingが強力。
GUIデザインが(良くも悪くも)自由。
高DPI対応が簡単。(ほとんど何もしなくていい) >>44
Ruby で、Selenium WebDriver で、ブラウザを自動操作してるけど、
Chrome, Edge のどちらでも動く >>47
C#になれてるので
できればC#で操作したいです。
C#でEdgeを操作できますか? pythonとかのコードコピーしてもエラーになるからな。
若干メソッドが違う。その辺の勘所あれば大丈夫。 >>50
ほんまやね。
久々にC#のWindowsFormを使ってるんですが
右上の「×」ボタンをなくすにはどうすればよいですか?
自前で「閉じる」ボタンを用意しているので
邪魔なので消し去りたいのです。 ControlBoxをfalseにすれば最大化最小化ボタンとともに消せる
単独で消す方法は特にない サイトに自動ログインしたいのですが
ID/PASSの自動入力、ログインボタンのクリックはできました。
しかし、Googleの認証エリア(私はロボットではありません。 reCAPTCHA)へのチェックを
どうしても入れられません。
iFrameを使っているみたいなのですが、
こういう場合ってIEの自動操縦で操作する事は無理でしょうか?
自動ログインをして手間を省きたいのです。 まぁそういう自動ログインを防ぐための仕組みだしなぁ
googleと勝負するかそのサービス提供者にrecaptcha外してもらうかくらいじゃない? >>56 >>57
ID/PASSを入力してからTABキーを押すとiFrameの中の
チェックボックスにフォーカスが入るみたいです。
もしかして突破できる!!??
C# + Windows APIで
TABキーを送ってチェックボックスのクリックって
どうかけばいいですかね? >>58
キーが送れるなら普通はspaceでチェックボックスonできるけどrecaptchaを突破できるかはしらん >>59
サンクス
TAB+spaceキーのsendで試してみます。
自動ログインするとだいぶん手間がはぶける 自動ログインしてるとロボット判定くらって
パズルやる羽目になるんじゃないかな。 >>61
パズルは目視でやるつもり
さすがに画像認証は無理だわ。 Navigate と Navigate2の違いは何ですか?
サイトによって前者だったり後者だったりします。 https://docs.microsoft.com/en-us/previous-versions/aa752134
IWebBrowser2::Navigate2のことなら
> This method extends the IWebBrowser2::Navigate method to allow for Shell integration;
> however, this method does not make IWebBrowser2::Navigate obsolete.
> The original method can still be used for URL navigations. 「実戦で役立つ C#プログラミングのイディオム/定石&パターン」っていう本が気になるんですが、これってSOLIDの原則みたいなものが解説されてる本なんですか?
https://www.amazon.co.jp/dp/4774187585
本の題名から、デザインパターンの本っぽく見えるものの、見方を変えればただの逆引き系テクニック本っぽくも見えて判別が付きません・・・・
持ってる人いたら教えて! ときどき話題になるけど
初心者用
プログラマーなら大半が無駄 >>67
Microsoftが出してる参考書がいい勉強になると思う
タイトルは忘れたけど黒い表紙のやつ これかあ・・・なんと540ページ・・・・やっぱりこれ級の本が必要なの?
https://www.amazon.co.jp/dp/4822253546
本当はレジュメ10枚とかそんな簡単なのが欲しいんだけどそういう傾向のはないのかな 「自分用に要約したまとめが欲しい」ってC#の自由度だと無理
ネットで公開されているオープンソースのもの読んで勉強したら本買うことも無い >>67
良本だけど、デザパタは解説してないかな。
コーディングの定石を紹介してる感じ。 今更の質問ですが
ブラウザの自動操縦はC#で行ってました。
VBAで自動ログインだったりスクレイピングもできますか???
だとするとC#で抽出してExcelに転記する必要なかったなぁ〜〜〜 >>73
できますよ
ぐぐればたくさん出てきます
自分も最近会社のPCに仕込んでます >>74
ありがとうございます。
VBAでIE操作する事にします。
最初からこっちにしとけばよかったかな〜〜〜〜 便利なツールを作りました。
しかし、悪い奴がそれをコピーして複数端末で使われると困ります。
そこでアドビ製品の様なライセンス制御の仕組みを取り入れたいのですが
何か参考になるサイトはありますか?
不正利用防止対策としてユーザに一意のキーを埋め込んで
アプリの起動時にWEBサーバにその情報を送って突合させようかと思っています。
何かもっとスマートなやり方をご存知の方はいませんか? C#で作っていたらアクチだろうが何だろうがILSPYあたりで逆アセンブルされるから無駄
アクチ部分抜いてビルドしなおせば終わる >>78
うーん、、、やっぱりそうかー
そもそもそーいう事できる人間は
ソフト自体を自分で作れるから
いちいちやるかな〜というパラドックス
100人いたら3人位がそーいう悪い事するかな ドングル使う手もあるよね。
まあそんなケツの穴の小さいこと考えないのが一番簡単ではある ↑はじめてきいたわ
そんなのあったんだ。
うーんまいったなー
一定の割合で犯罪者がいるから悩む web認証プラス重要なメソッドをwebapi化すれば本体リコンパイルされても再現不可能だな。 >>83
どうしてもクライアントじゃないとごにょごにょできない処理なんですよ
犯罪者の違法コピー使用はあきらめるしかないかな ここで聞くような人のものをそんな手間かけて使うのかって話 対応する工数とそれで得られる利益が見合うならやればいい
adobe製品とかならまだしも見合うことなんてまず無いから
不正利用者はセキュリティしっかりしてたらそもそも利用しないから対応しても利益にはならない 簡単な認証かけておけばカジュアルコピーは防げる。
リバースエンジニアリングまでするようなのは少数なはずだから、無視するのが現実的。
ガチでやるならドングル。面倒臭いから正規利用者からも嫌われるけど。 >>86 >>87
うーん、一部の犯罪者はスルーして
カジュアルライセンス制御しまう。
起動時と処理部分でWEBサーバに通信して認証チェックします。
アプリ内に一意な識別キーを入れておいて
AがBにコピーを渡した場合
異なるIPでAとBから同一キーがWEBサーバに送られるからそいつは不正利用
という判断でいこうかと思います。
逆アセンブルするヤツはそもそも自分で作れるだるから
いちいちコピーして使わないかな。 どういうアプリかしらんけどIPみたいコロコロ変わるもんを認証に使って大丈夫なの?
macアドレスとか取ればいいんでね?
偽装は簡単にできるけどそういうのはスルーするんだろうし
とはいえ購入者が別端末使ったりPC買い換えるだけで不正利用扱いされることにはなるが >>89
おお!!いいですね!!
@ユーザ個別の識別キー
Aユーザ利用のMACアドレス
BIPアドレス
カジュアルライセンス制御は、これでうまくいけそうです!
(一部の犯罪者はもうスルーします。どうせ作れるだろうし、、、) というか、毎回認証するのはユーザーにとっても提供側にとっても負担大き過ぎでしょw
ネットつないでないと使えないし
普通にMSのアクティベーションと同様の仕組みでいいでしょ。
プロダクトキー使って一度認証したらライセンス返上するまでずっと有効。
1つのプロダクトキーがいくつかの(通常は一つ)のライセンス枠を持ってる。
枠が全部埋まってると誰かが返上して空きができない限り新たな認証はできない
以前使ってたTIの開発ツールはこんな感じだったよ >>90
IPアドレスは何に使うんだ…。
変わる上に被ることもあるのに。 >>91
なるほど!そーいう手もありますね!
ツール自体はネットがつながっている事前提なので
そこはユーザにとってもサーバにしても心配していません。
>>92
IP偽装も簡単にされてしまうので
確かにあまり意味をなさないですね。 >>93
偽装はともかく、正規ユーザーが不正判定され易いのは問題だよ。 不正対策のために正規利用者が不利益を被ることは極力避けるべき
大抵が開発者の自己満足
ちょっとした手順が必要になるだけでも使い勝手は極端に下がる
ましてや誤って不正利用認定なんかされた日にはもう2度と関わりたくないと思う
さらにwebサーバーの常時保守と認証周りでのトラブルのカスタマーサポートとかまで考えたら本当に必要な工数なのかも疑わしい
そこまでする必要があるレベルのプロダクトならいちいちこんなところで質問なんて投げないだろうしね >>94 >>95
うーん、、、
WEBサーバが確かに攻撃されたらアプリ使えなくなるな〜。
いろいろ考えます。 鯖への攻撃まで考慮しなきゃいけないくらいでかいソフトなの?
どんだけ高価なもん作ってるのか知らんけどパス付きzip程度じゃあかんの? >>97
世の中には悪い奴がいてWEBサーバ攻撃してくるヤツもいるんですよ
zipだと解凍してコピーして横流しされそう。
まぁ、ごく一部でしょうけどね。 >>98
インストール時にだけWeb経由で認証して、認証データはローカルで暗号化して格納しとけば良い。
認証データの暗号化はProtectedDataクラスを使うのが簡単かつ安全。 自分の作ったソフト売りたいって話なら言語は関係ない
パッケージソフトなら不正コピーの心配必要だけどユーザー登録型のライセンス販売なら普通はサポート見込んで買うからそんな心配するのがおかしい >ユーザー登録型のライセンス販売
1か月1000円で販売予定 悪いやつがいるかいないかなんて話してないんだけど伝わらんな
悪いやつに対処するコストと悪いことされたときの被害額が見合うかって話だ
実被害なんてほぼ出ないのに無駄に開発コストかける意味は?
売れて実被害が出てから対策したって十分だよ この知識レベルだとライセンスの前にセキュリティが不安になる 初心者用で質問する人が月額モデルでしかも1000円も取るのか
そもそも月額モデルなら毎月の引き落としどうすんの?
クレカは?全部自前で用意すんの?
せめてvectorとか使ってシェアウェアにしときな
有料ソフトがいかに売れないかを知る良い体験できるよ SDカードって確かこっそりCPRM対応だと思ったけど、
あれをドングル的に流用できたりしないかなとちょっと思ったがどうだろう
CPRMの仕組みを理解してないので的外れかもしれんがw データ整形について質問です。
Dictionary< string, object > に属性名、属性値が格納されています。
例
Key:Value
開催日:2019/3/20
場所:東京
1名前:太郎
1誕生日:2000/1/1
1年齢:19
2名前:花子
2誕生日:1998/2/14
2備考:魚アレルギー
これをDetail型(開催日,場所,名前,誕生日,年齢,備考)の配列かListに変換したいです。
1,2,...がとても不格好で整形しづらいのですが、変更が許されません。
この数字は多くても6個です。また、数字によっては該当の属性名がないものもあります。
なにかよい方法はないでしょうか。 >>108
こんなので出来ない?
検証してないので知らんけど
public class Detail
{
public static Detail RetrieveFromDictionay(Dictionary<string, object> dic, int index)
{
var d = new Detail();
foreach (PropertyInfo info in typeof(Detail).GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
var key = $"{index}{info.Name}";
object obj;
if (dic.TryGetValue(key, out obj))
if (obj.GetType() == info.PropertyType) info.SetValue(d, obj);
}
return d;
}
public DateTime 開催日 { get; set; }
public string 場所 { get; set; }
public string 名前 { get; set; }
public DateTime 誕生日 { get; set; }
public int 年齢 { get; set; }
public string 備考 { get; set; }
} >>108
全keyを走査しながら1個1個処理していけばいいだけに見えるけどそれじゃだめ? UWPで作れば色々面倒なことはMSが面倒見てくれるけどな
あの範囲で問題ないプログラム限定では有るが >>110
できました。ありがとうございます。
勉強になりました。
ちなみにプロパティ名が英語の場合、もう一つ日本語と英語名が対になったDictionaryを定義して、そこから参照する形がいいでしょうか。 Adobe製品の開発言語は、逆アセンブルされない為にC++で開発してるの? C#でArrayListのSortを実行すると
昇順で並び替えられています。
これをDESC(降順)で行うにはどうすればよいですか?
LINQとやらを使った方が確実かな〜。 Sort()した後でReverse()すればいいよ
ArrayListだとSortだけで逆順にするにはIComparer書く必要があってだるいし
というか今時ArrayListなんて使ってないでList<T>使おう >>116
サンクス!そーいうのがあったんだね。
(長らく現場から離れていてC#はコボラーみたいな感じになってます) VBAには、#region #endregion 的な機能はありますか?
コードが長くなってしまって縮小したいです。 VS2017で
前のブックマークへ移動するショートカットコマンドですが
Control + K → P
はもう使えなくなったのでしょうか?
Control + B → P は使えます。
ただ、「K」はVS2010では普通に使えていたはずなのですが、、、 例えばセッターのみが非publicなプロパティーがあるとして、
セッターにアクセスできるスコープからのみ見えるXMLコメントを
書くみたいなことって可能だったっけ? IEを自動起動して、スクレイピングのプログラムを作っています。
スクレイピングに詳しい人教えてください。
ページ内にliが複数あるため、getElementByTagNameでliを指定すると
全部の要素を走査してしまい、時間が結構かかっています。
そこで上位ブロックの divのidが[id_koregahosii]になっている
liの要素を取得するといったコードを書きたいのですが
よい方法はありますでしょうか?
<div id="id_aaa"><li>あいうえお</li></div>
<div id="id_bbb"><li>かきくけこ</li></div>
・・・複数(1000以上)・・・
<div id="id_koregahosii"><li>このliを取得した</li></div>
mshtml_ec = ie.Document.getElementsByTagName("li");
foreach (mshtml.IHTMLElement i_ele in mshtml_ec)
{
//取得したデータを変数にセット
} .Document,getElementByIdしてからそのIHTMLElement2に対してgetElementsByTagNameすればいいんじゃね >>126
ありがとうございます!
試してみます! DataGridViewで特定列を除いて
編集させたくないので以下コードを書きました。
dgv_test.AllowUserToAddRows = false;
dgv_test.AllowUserToDeleteRows = false;
dgv_test.ReadOnly= true;
ただし、その中のCheckBox列だけは
チェックのON/OFFを出来る様にしたいです。
これを実現するにはどういうコードをかけば良いのでしょうか? 地道に全セルをなめてReadOnlyを設定して
実現できました。 助けてくださいm(_)m
DataGridViewの2列目(インデックスは1)がチェックボックスです。
画面上でチェックを入れ「実行」ボタンを押した時に
その行にチェックが入っているかを判定しようとしていますが
うまくできません。。。どう判定したらいいのでしょうか?
エラー
ハンドルされていない例外
System.InvalidCasException:'指定されたキャストは有効ではありません。'
if ((bool)dgv_test[1, i_row].Value == true ) ← ここでエラーが発生
{
Debug.WriteLine("checkあり");
}
else
{
Debug.WriteLine("checkなし");
} >>125-126
Ruby, Nokogiri, Selenium WebDriver では、
doc = Nokogiri::HTML( driver.page_source )
element = doc.at_css '[id="id_koregahosii"] > li'
puts element.text
#=> このliを取得した
CSS Selector では、[id="id_koregahosii"] > li。
id 属性が"id_koregahosii" である要素の、直下のli 要素。
> は直下を表す
doc.at_css は、最初に見つかった、1つの要素で、
doc.css なら、配列(複数要素)が返ってくるように使い分けるので、要注意!
jQuery では、0・1つの要素の場合でも、常に配列が返るので、間違える事がない!
最初に、jQuery などで、CSS Selector を学ぶ必要がある。
それよりも複雑な指定は、XPath を使う >>131
bool型にキャストしてます。
でもエラーがでます。 >>133
boolとbool?は違う型
null許容型でググろう >>134
すみません。わからないので教えてください。。。。 >>135
bool?型と言ってるのになぜbool型にするの?
(bool)のとこを(bool?)って直すだけだぞ
null許容型は、要するに(bool?の場合は)true,false以外にnullも含む(許容する)型 using System.Numericsとしているのに
Complex a = 123;とだけ書くと何故か赤い波線が付いてエラーになります
System.Numerics.Complex a = 123;とするとエラーは出ないのですが、省略できないのが気に食わない >>137
VisualStudioのバージョンは?
後、赤線のエラーは何て書いてある?
VS2017だけど、省略してもエラー出ないよ >>138
暗黙的に変換できませんと書いてあります バージョンは2017です
System.NotImplementえdException: 'メソッドまたは操作は実装されていません。'というエラーも出ます その再現する部分だけを書いたプロジェクトをどこかに晒してみたら? 全部削除して書き直したら治りました
何度も確認したのでタイプミス等ではないはずですが、何が原因だったのか
お騒がせしました >>130
var o = (bool?)true;
bar b = (bool)o;
これは実行時もエラーは発生しないし、
var o = (bool?)null;
bar b = (bool)o;
これで発生する例外はNullReferenceExceptionみたいだから、たぶん指摘されてるのと別の原因なんだろうなあ。
知らんけど。 あー間違えた
var o = (bool?)true;
じゃなくて
object o = (bool?)true;
だね。結論は変わらない >>143
何言いたいのかよくわからないけど>>130に対する回答は>>131であってるよ
DataGridViewのCellの初期値がnullなのが原因なだけだから
null許容型のキャストするか行を作った段階で値を代入するかのどちらかになる >>145
分かってよ。
nullをboolにキャストしようとした時発生する例外はNullReferenceExceptionであって
InvalidCasExceptionではないはずだ >>130
失礼。
発生した例外がNullReferenceExceptionではないから、
bool?にキャストすべき所がboolになってるバグの他にもバグがある。
例外はInvalidCasExceptionだから、
DataGridViewの列の定義が間違っていてdgv_test[1, i_row]がDataGridViewCheckBoxCellになっていないか、
初期化時にdgv_test[1, i_row].Valueにbool以外の値を代入していると思われる。 Windowsフォームでコントロールのプロパティの
EnableをFalseにすると「若干」色が薄くなるようですが
もっとはっきり薄くできないですかね?
完全に消えるとまずいんだけど
はっきり「今これは使えません」って意思表示したいんだけど
いい方法無ですかね? >>150
フォーム全体で対応させるのはわからない
コントロール一つならEnabledChangedのイベントで
コントロールに初めから組み込みたいのなら
https://dobon.net/vb/dotnet/control/tbenabledfalse.html
の「自分で描画する」を参考に。やっていることは真逆だけど色を変えればいいだけ
ボタンやラベルなら使用不可を示すのに色だけでなくフォントの打ち消し線の有無で実装したことならある Window上にOpacity薄くしたパネルを全面表示すればいいんじゃないか テンプレに「酔っぱらいはレス禁止」って付け加えておいた方がいいな Checkboxの質問をしたものです。
初期化時にFalseを設定してやったらエラーが出なくなりました。 チェックボックスの初期値がない=null
nullからのinvalid castやんけ なんでList<T>がraw型のCollection継承してる扱いになってんだ??? ちょっと何言ってるかわかんないです raw型って何
何か読んで疑問に思ったんだったら記述示すなりリンク張るなりして C#で多倍長浮動小数点数演算は出来ますか
多倍長整数を使ってどうにかするしかないんでしょうか >>160
自分でなんとかしたいと思います
1000桁とか10000桁とかの計算がしたいので 今後、開発作業が増えて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();
活用してみます。 メモリ不足無視して実行し続けてるのも暴走って言うかもな >>250
乱数頼みなわけで物理的にいつまでも決まんねーことあんじゃん
重複が無い円はそのままにして置いたら?
どうせ乱数じゃん? >>255
魔法の言葉、Application.DoEvents();
で解決しました。
やはりWhile分で条件達成まで延々ループ処理させてたのが問題だったようです。
フリーズすると制作したアプリで取得したデータ大丈夫なの?
って冷たい目にさらされていたのですが、これですっきりしました。
ありがとうございました。 ASP.NET MVCを初めて勉強しています
MVの場合、ボタンクリックのイベント処理はどう書くのがスタンダードなのでしょうか?
(Webフォームではイベントハンドラーを使ってましたが。) 自分で作ったアプリ14個くらいショートカットで起動できるようにしていて、
その中の名前が似た3つが弄ってもいないのにある日突然起動しなくなったのですがどういったことが考えられるでしょうか >>271
妖精さん「俺のせいにするんじゃねーよ!」
>>269
C#のプログラム上の問題でないことは確か
PC初心者板へどうぞ とりあえずイベントログを見てなんかエラーが出てないか確認 テキストファイルを開いて書き換える動作が、
昨日まで普通にできていたのが今日やってみたら読み込みは出来るものの、書き込み時に
UnauthorizedAccessException:パスへのアクセスは拒否されました。
の例外が出て書き換えできなくなったのですがなぜでしょうか >>276
それは何故でしょうか?
自分のPCで自分以外は使う事もありません。
そしてどうすれば取り戻せるのでしょうか >>275
WindowsUpdateで
「アレ、こいつこんなとこアクセスしてるけどヤバクネ?修正しとこ」
って改修したとこがまさに今反映された
一回だけそういうことあった >>277
アプリ実行時に
右クリックメニューからの管理者で実行とかやってみれば?
それと対象のファイル自体のアクセス権も確認 ありがとうございます
WindowsDeffenderを切ってみたら書き込みが出来ました
セキュリティが悪く効いてた感じでしょうか DropDown式メニューの幅を指定したいのですが、ToolStripMenuItemだと、
幅を指定しても無視されてしまいます。
ToolStripButtonであれば反映されるのですが、ToolStripMenuItemでも指定する方法を教えてください。
//指定しても無視される(文字に合わせた幅になってしまう)
var item = new ToolStripMenuItem("テスト");
item.AutoSize = false;
item.Width = 100;
this.toolStripMenuItem.DropDownItems.Add(item);
//これなら反映される。
var item = new ToolStripButton("テスト");
item.AutoSize = false;
item.Width = 100;
this.toolStripMenuItem.DropDownItems.Add(item); >>281
ContextMenuStripでAutoSize=falseにしてそれをDropDownに登録するのはだめなのか? >>281
やってみた感じ、DropDownが表示される時に
MenuItemの場合はWidthではなくてTextを使って横幅を評価しているみたいなのでダメっぽいねw
(AutoSize = falseにした場合、MenuItemの幅自体はちゃんと設定した値になっていることは
マウスオーバーした時のハイライトの枠の大きさで確認できる)
Labelの場合はAutoSizeをfalseにすればWidthもHeightも設定した値が
そのまま表示に反映されるようなので、これをプレースホルダー的に使うことは出来そう。
バッドノウハウ感全開だけどw
でもMenuItemの幅をわざわざ制御したい理由が思いつかんw TextBoxに、テンプレート的なデフォルト文字列を持たせたいのですが、
Formのコンストラクタで
textBox1.Text = "文字列";
という方法で指定すると、TextBoxが表示されてから何も変更してない状態でもCtrl+Zで文字列が消えてしまいます。
どうすれば、消えないようにできるでしょうか? >>287
試してみたけどこちらでは.Net3.5でも.Net4.62でも再現しない
念のためフォームのShown時のCanUndoを見たらfalseになっているからUndoが効くはずがない
どこの違いなのか分からないが文字列設定後かShown時にとりあえずtextBox1.ClearUndo()を入れてみたら >>287
試さずに適当なので違ってるかも
デザイナーでtextBox1のTextの値をリセット(コンテクストメニューにある)すれば
>>288の指摘どおりになるんじゃないの?
恐らくザイナーでTextの値をいじったことがあるために、InitializeComponentで
空文字が代入されてるんじゃないか。
でなきゃアプリケーション設定か キーボード眺めて思ったけどCTRL+ZでなくてCTRL+Xしている可能性もあるなw
手入力じゃなくコード上の代入だとUndoできないんだよな >>285-286
>>284 です
PDFsharp というのが良かったのでこれにしました >>292
それ日本語の折り返しに対応してないとか、難あるよ。 PDF仮想プリンタの存在前提で普通にGDI+で書けば楽だと思うけどな
Win10ならデフォで入ってるんだし win32のhage.rcファイルからhage.resを造って-win32res:hage.resでexeにリンクしてるとき
hage.rcの中身が
hogehoge BITMAP "filename.bmp"
のときは
Bitmap a = Bitmap.FromResource(hInst, "hogehoge");
で取得出来るのですが
hage.rcの中身が
456 BITMAP "filename.bmp"
だと
Bitmap b = Bitmap.FromResource(hInst, 456);
Bitmap b = Bitmap.FromResource(hInst, Convert.ToString((IntPtr)456));
Bitmap b = Bitmap.FromResource(hInst, Convert.ToString((IntPtr)((UInt16)456)));
とかで取得出来ないのですが
456を上手くBitmap.FromResource()に渡す方法は無いのでしょうか? ありがとう
これだと自分でWin32APIのLoadBitmap呼んだ方が速い気がしないでもない こっちは2018年かよ
雑談するには迷惑かからんでいいけど [DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr LoadBitmap(IntPtr hInst, IntPtr id);
[DllImport("gdi32.dll")]
private static extern bool DeleteObject(IntPtr handle);
と
IntPtr p = (IntPtr)((UInt16)id);
IntPtr hBitmap = LoadBitmap(hInst, p);
Bitmap b = (Bitmap)Image.FromHbitmap(hBitmap);
DeleteObject(hBitmap);
return b;
でうまくいきました
CharSet=CharSet.Auto を書かなくても動くのですが
書かない場合だと LoadBitmapW ではなく LoadBitmapA の方が使われるようで
id が数値リソースのときは問題出ないのですが string でリソース名を指定するときに
参照されなくなるので書いておく方が良さそうです
IntPtr p = Marshal.StringToHGlobalAuto(rn); // OK
IntPtr p = Marshal.StringToHGlobalUni(rn); // OK
IntPtr p = Marshal.StringToHGlobalAnsi(rn); // CharSet.Auto 書かないときはこっちを書くと動作 C#というより.NET Framework全般の問題かもしれませんが・・・
ビルドした実行ファイルの拡張子を7zにして開けると
.rsrc(フォルダ)
.text
.reloc
というファイルが出てきます
このうち「.text」をエディタで開けると
「C:\Users\ユーザー名\source\repos\プロジェクト名\obj\Release\実行ファイル名.pdb」
の文字列がそのまま入っておりユーザー名まで見えてしまいます
プロジェクトのプロパティなど見てみましたが該当する文字列は設定されていませんでした
この文字列が入らないようにビルドするにはどうすれば良いでしょうか? >>302
C#の問題じゃなくVisual studioとかのビルド側の設定の話だから該当するスレでやれ hoge.Dispose()って必ず呼ぶ必要ありますか?
ネットにあるサンプルでDispose()してるのと放ったらかしなのとあるようですが
放ったらかしでも問題無いとしたらわざわざDispose()呼ぶのはなぜですか? >>305
必ず呼ぶ必要はないが呼んだ方が良い
o リソース解放のタイミングやスレッドが制御できないのでそれらに依存する場合不具合の温床になる可能性
o 無駄なオブジェクトの昇格が起きてしまいGCに悪影響が出る可能性
いずれも無視できる場合もあれば致命的になる場合もある
サンプル程度で目くじら立てる必要はまったくないが
本番では呼んだ方が良い なるほどありがとうございます
ちなみに
using(Graphics g = Graphics.FromImage(hoge)){
...
}
みたいなときスコープ抜けるとgのDispose()は呼ばれないですか?
抜ける前に自分でg.Dispose();しておく必要ありますか? disposeを自動で呼んでもらうためにusing構文がある 何か今までGCに任せれば良いやって適当に書いてたんですが
意外とDispose()呼ばないといけない場所多いんですね クラスを書く時デストラクタとDisposeを省略するなっていうのが今回得た教訓かも知れません ちゃんとした製品にするようなソフトならケアするけど個人やチームで使う程度のちょっとしたツールだったら一切書かないな グラフィック周りや通信周り、データーベース周りあたりはちゃんと書いといた方がいいんじゃねえか? 稼げるブログの始め方をブロガーが解説!副業や不労所得を作る
https://www.youtube.com/watch?v=CHn6tNCYAZM
第1回 ブログをどうやって始めるのか?初心者の頃に知りたかったことをブロガーがわかりやすく解説【ブログで稼ぐ】
https://www.youtube.com/watch?v=TEMUZvQSM1Q&t=708s
第2回 ブログで不労所得1億円!?ブログでお金を稼ぐ仕組みを解説〜
イケダハヤトさんはブログで年間1.5億円の収入!【ブログで稼ぐ】
https://www.youtube.com/watch?v=eWw-RfbNP1g
第3回【学生向け】ブログで月1万円を稼いでいる実例をわかりやすく紹介〜
ブログやアフィリエイト入門。【ブログで稼ぐ】
https://www.youtube.com/watch?v=mjHp2Fqj9OE&t=190s
第5回 月100万円を稼げるようになった体験談!副業でブログを開始し不労所得に!【ブログで稼ぐ】
https://www.youtube.com/watch?v=nwrlcNSdw0U&t=523s
サラリーマンをやりながらどうやって副業をやっていたのか?スケジュールや作業量などを解説
https://www.youtube.com/watch?v=FGlGur0XC_k >>311
メモリーはGCでいいけど>>314が言うような通信、データベースとかファイルとかリソース掴む奴はDispose呼ばないと他のプロセスが掴めなくなったりするから必要なくなったらDisposeしといた方がいい そしてHttpClientで大量のTIME_WAITを抱えると デストラクタはへたに実装しないほうが良いかもしれんぞ >>307
Graphicsの実装次第だよ
usingで後始末がされるためにはされるように処理を作成する必要がある
みんなが作ってて広く普及してるクラスなら多分大丈夫だけど
今回のプロジェクトで作成したばっかのクラスはテストやるまで信用するな 既視感しか感じない質問だからどうせアレだろと思ったら本気の質問だったのかなw >>320
> Graphicsの実装次第だよ
はあ?
g.Dispose()を呼ばない実装なんてできるのか?w
> usingで後始末がされるためにはされるように処理を作成する必要がある
それはまた別の話な まあ可能不可能ならこういうことは可能だろうね
public class Graphics : IDisposable
{
void IDisposable.Dispose()
{
}
public void Disposable()
{
...
}
} >>323
public class Graphics
{
void Dispose()
{
}
}
( ゚д゚)・・・ プログラミングそのものの話ではないんですが、c#で他の機械とソケット通信してデータやり取りしてこちらからの指示やその応答でなんらかの処理を行うプログラムはどう作るのが一般的なのでしょう?
通信を行うプログラムと業務用にオペレータからの操作とその他を担うプログラムにわけて作ろうと思っています。
通信相手はIOTのマイコンのようなもので独自のプロトコルがTCP/IP上で規定されています。
通信プログラムと業務用のアプリのデータのやり取りはファイルとしてデータを保存するのも手ではあるのですが、読み書き遅いので、共有メモリ的な使い方とかメッセージ的な使い方にならないかな、と。
linux上でc言語ばかり使っているので、どうするのが一般的なのかよく分かっておりません。
よろしくお願いします。 他の機械がWindowsならVNCサーバー入れるのが一番楽 >>326
ありがとうございます
通信相手はIoTの小さなマイコンでOSはありません 質問がごちゃっとしてるけど
要はローカルマシン内でプロセス間通信したいってこと?
今はgRPCが推されてるんじゃね 知らんけど >>328
わかりにくくてすいません
二つあって、ソケット通信するプログラムと業務用のプログラムを分けて作る場合の普通の作り方です
ソケット通信するプログラムは言語に付属してるライブラリをそのまんま使うしかないなと思ってます
プロトコルは規定されてるのでうまく作れないならcで作るしかないかな、と
業務用のアプリとソケット通信するプログラムのIPCはc#でどうやるのがWindowsの流儀なのか、お尋ねしております
ご教示いただいたgRPCは後者についての情報ですね
はじめて聞く技術なのでわかっておりませんが、参考とさせていただきます。少し道具立てが大きそうですね
ありがとうございます >linux上でc言語ばかり使っているので、どうするのが一般的なのかよく分かっておりません。
「、」の前後で矛盾してるな >>330
普段はlinuxでc言語ばかり使っています
Windowsでc#を使うことがなかったので、どういうものが普通とされているのか分かっておらず、戸惑っております >>331
IPC的なものは使わずにソケット通信すると言うことですか。なるほど。 TCP/IP通信自体は.NETにもSystem.Net.Sockets.SocketやらSystem.Net.Sockets.TcpClientやら用意されてる
TCP/IP上で独自プロトコルならこの辺使うけどIPCでは普通直接は使わない >>334
いや325に独自プロトコルって書いてあったんでな >>334、335
わかりにくくてすみません
IoTデバイスとの通信はTPCIP上で独自のアプリケーションプロトコルが規定されてて、それに従います
それをやる通信用のプロセスと別建ての業務用のプロセスの間でもデータのやりとりを行う必要があるのですが、IPCはどうやって普通は実現してるのかがC#を使う上でわかっておりません >>337
他にも組み合わせて使うと思いますが、その通りです。 ど素人め、定番はこれだって回答がすぐにないのは
ひょっとすると、プロセスごとにわけて機能を作り込むような考え方はWindowsというかC#というかわからないですが、一般的ではないのでしょうか? >>340
私の書いた文はわかりにくいかもしれませんが、そのご指摘はどういう意味なのでしょうか? >>341
自己紹介だと思っておけばいいよw
あなたは普通に質問してるだけだと思う。問題があるのは彼の方だろう。 普通の方法があるんじゃなくて目的に応じて複数の方法があるという当たり前の話なだけなので
普通の普通の連呼されてもこんな方法もあるよって情報が増えるだけやぞ
既にもらった情報で自分の目的に合致するのか一旦実践した方がいいんじゃねえの
なんか最初のレス見る限りメモリマップトファイルとかウィンドウメッセージで事足りる話に見えるが 元々のSocketはプロセス間通信用
SockAddr の AF_UNIXがそれ。
Windowsは長い間、AF_UNIXをサポート
していなかったが、去年ぐらいからwin10で使えるようになっている。(デスクトップとWSLの場合)
いつディスコン喰らうか判らない高位ライブラリーを使うか、
自分に技術蓄積がある(?)下位ライブラリーを使うかの判断はケースバイケースでしょぅね
幸運を >>342
なるほど
>>343
おっしゃることはよくわかります
抽象的でフワフワしてる質問であることも承知しております
その上で、デファクトスタンダードというかどこでもこんな方法よく使ってるよというご意見があればと。
手法についてご教示ありがとうございました
>>344
そうですね
一度使い始めると、それなりに長い寿命のソフトになってしまうので、悩ましいところです
簡単に捨てられるような技術だと
AF_UNIXかそれともINETでループバックで使うのもありですが、難しいですね
ありがとうございます いろいろとアドバイスしてくれてる人たちに
ど素人め
と罵倒したのはなんだったの? >>346
ははは
そう解釈されましたか
識者「ど素人め、定番はこれだ」
私 なるほどー
という意味で書いたのですが、誤読を誘発してしまいましたね
私が他者へど素人めと言ってるわけではなく、識者ならこんなフワフワした質問は、パッと答えてくれるかなと思って書いたのです >>325
>通信を行うプログラムと業務用にオペレータからの操作とその他を担うプログラムにわけて作ろうと思っています。
プロセスとかプログラムを分けて作りたい理由って何なの?
書いてる内容だけだとライブラリ化すれば十分なように思えるけど >>349
機能が違うのが一番の理由です
設計するにあたって、通信の機能は独自のプロトコルがあるのでそれなりに考慮しなきゃいけないことが多くて、通信に専念させたいのですね
業務用のプロセスは、こちらはこちらでUIがありますので、通信を行う機能とは考察しなきゃいけないところが違います
また、両者の動作タイミングが全く違うこともありますね 機能が違うだけならプロジェクト分けてdll化すればよいだけなので、
普通に考えれば不特定多数(いやらしい言い方だけど)からのアクセスが要件なんでしょうたぶん
知らんけど >>351
動作タイミングが違いますので、dll化では実現できないと考えています。
一つのプロセスで実現するにはマルチスレッド化せざるを得ないと思うのですが、そうすることは暗黙でみな承知している事柄なのでしょうか?
マルチスレッドでもマルチタスクでも似たような考察点はあるのでどちらを採用しても作成する難易度は大差ないのだとは思いますが、知識が余りに不足しており、マルチスレッドスレッド化したプロセスのデバッグは私では困難極まりないとも考えています。 >>352
アクセスさせる相手が常に同じならプロセス間通信なんてまどとっこしいことを
する意味はないような気がする。
マルチスレッドはもちろん落とし穴いっぱいだけど、過度に恐れる必要はないし
そこまで難易度高くないと思う。 少なくとも自分はプログラミング始めて半年でも普通に使ってましたよw スレッド間通信だって、プロセス間通信だって同じことじゃん
プロセスを分けたからって通信にだけ専念するなんて造りにはできない
通信タスク⇔アプリタスク
と並列に動く2つのタスクの接点処理を作ってやらないと動かないぞ >>353
ありがとうございます
考え方ですね
勿論、通信と業務双方まとめて考察できてモノシリックな作りに出来たらそれはそれで良いのだと思います。
通信機能は状態遷移に従って色々やらせる事があるので、業務用の機能と合わせて考察するのは、私にはなかなか難しいのです。
ちなみに、可能でしたらご教示頂きたいのですが、マルチスレッドのプログラムのデバッグ手法はどのようなものでしょうか
webや良書など、参考にされたものがありましたら教えていただけませんでしょうか
マルチタスクのプロセス構成で、どうしてもsemaphore的な扱いの部分で考え落ちのバグがあり、状態遷移に基づいて試験してもバグをかなり流出させてしまったことがありまして。
勿論、分岐網羅や境界値分析で一通り全ての試験をこなしてはいたのですが
まして未経験のスレッドだとどうなるやらわからず二の足を踏んでおります。 >>355
ありがとございます
それはその通りです
機能ごとに作るのは、仰っている接点をキチンと作ることでもあります。
通信した結果をなんらかのIPC機能を使って業務用のプロセスに通知、逆に業務用のプロセスからの指示を通知するように明示しておきたいのです
一種の責任分界点としての役目もありますね そもそも通信タスクとアプリタスクってどっちが親なん?
アプリタスクの常駐処理って何やってるの?
通信タスクに最新データが来たら通知して欲しい?
アプリタスクが通知タスクの受信バッファを定期で確認する? >>347
少なくとも340はそう捉えて、突然罵倒する危ない人なんだなと感じたんだと思うよ
俺は正しく解釈したけど340に対するレスがずれてたんでもしかして340の解釈が正しかったのか?と勘ぐっちゃった てか実際にローカル同士の対話なのかそこすらハッキリ情報出してねえだろ
要件の定まらねえフワフワした質問にはフワフワした回答しかこねえよ >>358
親子関係は特に考えていませんね
24時間運用することを想定してます
業務用のプロセスはデバイスの稼働状況とセンシングしてるデータのモニタリング、及びそれらの蓄積。
必要に応じてデバイス(のさらに先にいる装置)に対してある種の指示を行うことを想定してます。
センシングしてるデータはそのまんまではなく、モニタするときには簡単な加工(FFT程度)して表示させるつもりです。
業務用のプロセスは、可能だったらポーリングではなく、イベントドリブンな形で受信を契機に即座に表示してほしいのです。 親子なんか意識する必要ないしなあ。
悪いがここ馬鹿ばかりだから相談しても無駄だぞ。 >>360
現実に誤読された方がいるので表現が良くない点があったのでしょう
ただ、見直しても ど素人… の文言は私が他者に向かって発言している文言だと解釈するのは難しいのではないかと思っています ちょっと、見返してみましたが、もはやc#そのものとかなり離れた会話になってしまいました
すみません
c#で実装するため、下らない質問でも書いて良いスレと書いてあったので、このスレに書いてしまいましたが、あまり相談するにあたり適切だとは言えない内容となってしまいました
長々とこれ以上続けるのも申し訳ないので、この辺りでやめておくことにします
ご教示頂いた方、ありがとうございました 揚げ足取りだけどmonolithicねw
これおじさん世代に間違って覚えてる人多し >>367
ご指摘ありがとうございます
ははは、恥ずかしい >>362
だったら通信開始した時点で他の処理は動いて欲しくないんだから
別プロセスなんかにする必要ないじゃん
問題起きるだけだよ
また通信が途中で死んだとき
途中までダウンロードしたデータどうするの?
また、その後のアプリの動作はどうしたい?(最新が取れるまで完全に止めたい?古いデータで動かしたい?)
とか色々ある仕様を決めて
初めて別プロセスにするって仕様が決まるんであって
わかりにくいから分けちゃったは余計面倒で複雑になっちゃうぞ
別プロセスにしたいなんて受信自体はアプリが死んでても生きててもいつでも動いてほしくてとにかく受信バッファを素早くいつでも処理してほしい的な
要望でもないとやらないよ >>369
そう言う考えもありますね
ありがとうございます >>364
いや普通に誤読するだろ
最低でも
> 「ど素人め、定番はこれだ!」って言う回答がすぐにないのは
程度は書かないとわからんよ
そもそも「ど素人め」なんて言う言葉が本当に必要だったのか? 仮に
通信タスクが通信し受信バッファに溜め込んで
アプリタスクが受信バッファを定期で見に行く造りにした場合
・通信タスク受信バッファ書込中(アプリタスクは受信バッファには触れない)
・アプリタスク受信バッファ読取中(通信タスクは受信バッファには触れない)
上記2つの状態を解消する何らかの仕組みは必要 >>372
そうですね
なんらかの形で排他を行い、リングバッファのような仕組みでデータの受け渡しを行なって、プロセス相互にメッセージを送受信してイベントの発生を通知できたらいいですね。
ありがとうございます >>350
機能が違うからプロセス分けるってのはC#では一般的ではないね
ネットワークI/Oを担当する部分と、業務ロジック/UIを担当する部分で機能は違っても
両方存在しないとユースケースが完結できないのであれば一般的には一つのプログラムにする
通信機能を複数のプログラムで共有したい場合だったり
それぞれのプログラムの起動/停止タイミングの違ったり
耐障害性を考慮したプロセス監視要件が違うケースみたいに
プログラムを分ける必要のある要件があれば別
プロセス分ける必要がなければC#の場合はマルチプロセスに比べて
マルチスレッドのほうが道具も揃ってるしシンプルに作れる >>372
解消じゃなくて実現だったw
書いてるうちに逆に書いてそのままだったすまんこ UI使わない時(ログオフ時)でも常に通信してる必要があるなら
通信部だけ独立させてサービス化することはあるな プロセス間通信は.NET FrameworkならWCFを使うのが一般的だった
(他は.NET RemotingやIpcChannelとか)
ただ.NET Coreだと上の3つはサポートされてないから
標準でとなるとNamed PipeかSocket、あとはHTTPサーバーを立てるくらい
どれ使ってもWCFと違って型付きでデータをやり取りできないので
マーシャル/アンマーシャルは外部ライブラリ使ったりして追加実装する必要がある
ローカル限定ならまずはNamed Pipeから考える
通信用プロセスと業務用プロセスが別のマシンで稼働する可能性があったり
それぞれ別の理由でスケールしていく可能性があるなら
少し大げさだけどRabbitMQみたいなメッセージングも選択肢として検討するかな >>374
スレッドセーフのサンプル探すのが楽だよね
プロセス間通信のサンプル探すよりはいいと思う
書込中と読取中の2つのガードが必要なのに片方しかやってないのが多い
それも仕方ない話でこれ以上は詳細な仕様決めが必要になる >>379
gRPCも選択肢としては考えるけど
ローカル限定のプロセス間通信なら大げさすぎる気がするし
リモートも考慮するなら業務プロセスが死んだ時の対応とかで
メッセージングにしといたほうが信頼性が高い ローカル限定ならMSMQが楽だけどね
パフォーマンス的にOKかどうかは要件次第。
DCEは悪用されまくってセキュリティー強化
で既存ソースが動かないってのはあるが、
スレッド生成から含めてランタイムが面倒見てくれるので便利。 Ruby では、
IO の派生クラスが、抽象クラスのBasicSocket で、
その具象派生クラスに、TCPSocket/TCPSserver, UDPSocket, UNIXSocket/UNIXServer がある。
TCP/UDP, UNIX ドメインのストリーム型ソケット
socket は、プロセス外部との通信 (プロセス間通信、インターネット) を実現します
直接HTTP を扱わず、TCP で書くことも出来るが、
HTTP 以外でも、TCP を使うプロトコルは、TCP で書くことも出来るが、
普通は、ほとんどのプロトコルで、既に公開されたライブラリを使う、と書いてある。
つまり、これらを使って自分で書くことはない
HTTP などの既に公開されたライブラリを使う! >>374
>両方存在しないとユースケースが完結できないのであれば一般的には一つのプログラムにする
それは機能分割できてないだけでは?
別レイヤとして処理を依頼する、その結果を受け取るで済む話のような? C#でpandasに相当するのてDataTableですか? DataGridView の DataSource として List をバインドすると完了までに時間がかかる(List の Item 数が約816万件ある)ので、
徐々に追加・表示されるようにしたいのですが、どうすればよいでしょうか。 たしかに800万件を全てバインドしてしまうという考え方が乱暴かもね。
そうすれば楽だとは思うけど、別の方法を考えた方が良いと誰に聞いても言うんじゃないかな 質問です。
Adaptive Code 第2版を読んでいるのですが、
SQLを用いたサンプルプログラムの実行がうまくいかず、困っています。
サンプルは以下のものを使用しています。
https://github.com/AdaptiveCode/AdaptiveCode/tree/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf
SQL Serverとの接続をする部分で例外を出します。
具体的には、以下のソースファイルの26行目です。
https://github.com/AdaptiveCode/AdaptiveCode/blob/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf/ServiceImplementations/TaskServiceAdo.cs
エラーメッセージは、以下のとおりです。
System.Data.SqlClient.SqlException: 'SQL Server への接続を確立しているときに
ネットワーク関連またはインスタンス固有のエラーが発生しました。
サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、
および SQL Server がリモート接続を許可するように構成されていることを確認してください。
(provider: Named Pipes Provider, error: 40 - SQL Server への接続を開けませんでした)'
動作環境はWindows 10、Visual Studio Community 2019です。
SQL Server Express 2016 LocalDB はVSと同時にインストールしてあります。
解決策をご教示いただきたく、よろしくお願いします。 >>393
using(var connection = new SqlConnection(settings.GetSetting("TaskDatabaseConnectionString"))){
この次の行で止めてconnection.ConnectionStringの値を確認してみ
LocalDBしかインストールしてないなら接続文字列は "(LocalDB)\{LocalDBインスタンス名}" みたいな形式でないと接続できないよ
このあたりを参考にしてね
https://blog.clock-up.jp/entry/2016/07/27/vs-sqlserver-localdb >>394
早速ありがとうございます。
connection.ConnectionStringの値は、以下のようになっていました。
ConnectionString = "Data Source=(local);Initial Catalog=TaskDatabase;Integrated Security=True;Application Name=Task List Editor"
ソースコードを読み解いてみると、接続文字列は以下のApp.configから読み取るようになっていました。
https://github.com/AdaptiveCode/AdaptiveCode/blob/master/Chapter12/ch12-b_st_rd-injection/DependencyInjectionWpf/UI/App.config
そこでApp.config内の接続文字列を"Data Source=(LocalDB)\MSSQLLocalDB;.....(以下省略)"と変更したところ、
エラーメッセージが変化しました。以下のとおりです。
System.Data.SqlClient.SqlException: 'Cannot open database "TaskDatabase" requested by the login. The login failed.
Login failed for user '{自分のPCのホスト名}\{ユーザー名}'.'
どうやらこれだけでは解決しないようなので、
教えていただいたブログの情報を参考に設定を変更してみます。
それでもうまく行かなければまたご質問いたします。 >>395
> System.Data.SqlClient.SqlException: 'Cannot open database "TaskDatabase" requested by the login. The login failed.
Visual Studio入れてるなら 表示 - SQL Server オブジェクト エクスプローラー をクリックして
SQL Server の下の データベース を展開して接続したいデータベースがあるかを確認して
(そもそもデータベース作ってあるの?) >>393
出版社に送ってやれよ
くだらんコードのせいでプロジェクトが暗礁に乗り上げた
エラーの理由もわけがわからない
これがadaptive codeってことでよろしいですか?
って >>394
教えていただいた解説ブログを参考に設定を確認しました。
・LocalDB の存在確認
コントロールパネルの「プログラムと機能」にMicrosoft SQL Server Express 2016 LocalDB が存在しており、インストールはできているようです。
・有効な LocalDB のインスタンス名を確認
解説と同様に、sqllocaldb infoをコマンドプロンプトで実行すると、以下が表示されました。
MSSQLLocalDB
ProjectsV13
・SQL Server Data Tools for Visual Studio の存在確認
コントロールパネルの「プログラムと機能」には存在しませんでした。しかしVisual Studioの「ツール」→「ツールと機能を取得」を
確認すると「SQL Server Data Tools」にはチェックマークが入っており、インストールはできているように見えます。
・Visual Studio に LocalDB インスタンス名を設定しておく
"(LocalDB)\MSSQLLocalDB" が既に設定されていました。
・Visual Studio 内 Server Explorer から LocalDB 接続を行う
解説の通りmdfファイルを作成しました。接続文字列を確認し、サンプルプログラムのApp.config内の接続文字列を、以下の通り変更してみました。
"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename={先ほど作成したmdfファイルのパス};
Initial Catalog=TaskDatabase;Integrated Security=True;Application Name=Task List Editor"
すると、発生する例外が変わり、以下の通りになりました。
System.Data.SqlClient.SqlException: 'Cannot attach file '{先ほど作成したmdfファイルのパス}'
as database 'TaskDatabase' because this file is already in use for database '{先ほど作成したmdfファイルのパス}''
>>396
「SQL Server オブジェクト エクスプローラー」
を開いたところ、「SQL Server」→「(localdb)\MSSQLLocalDB」→「データベース」
のところに解説ブログに従って作成したmdfファイルのパスが表示されています。(これで「作ってある」と言えるのかがよく分かりませんが…) すみません、どうやら解決しました。
サンプルプログラムのTaskDatabaseプロジェクトの「プロパティ」→「デバッグ」を見たところ、
「ターゲット接続文字列」が以下のように記載されていました。
Data Source=(localdb)\ProjectsV13;Initial Catalog=TaskDatabase;Integrated Security=True;Pooling=False;Connect Timeout=30
また、「SQL Server オブジェクト エクスプローラー」をよくよく見てみると、
「SQL Server」の下には「(localdb)\MSSQLLocalDB」のほかに「(localdb)\ProjectsV13」があり、
その下に今回のサンプルプログラムで使用する「TaskDatabase」が作成されていました(いつの間にできた??)。
そこで接続文字列のデータソースを「(localdb)\ProjectsV13」に変更したところ、サンプルプログラムがうまく動作しました。
SQL周りの知識が全く無いので、MDFファイルがなぜ、いつの間に作成されていたのか、、、
まだ理解できていないところはありますが、とりあえず先には進めそうです。
教えていただいた皆様、ありがとうございました。 >>400
そんなに稼いでるのにYouTubeで小金稼ぎ必死だな >>399
君はそのうち本名とかアカウントとかパスワードとか晒すことになりそうだ JSON-RPC(http)のクライアントを作っていて、自前のコードで一通りできてますが、コード量が非常に多いです。
NuGetで探すと.NET Core用のものが多いのですが、今回は.NET framework 4.6.1です。
JSON-RPCクライアントに向く軽量ライブラリってないでしょうか?
System.Text.JsonなどでJSONパースだけをさせるとかが定番なのでしょうか? 同じですか?
改変前
Image img = this.picbox.Image as Bitmap;
if(img == null){
img = new Bitmap(this.picbox.Width, this.picbox.Height, PixelFormat.Format32bppRgb);
this.picbox.Image = img;
}
改変後
Image img = this.picbox.Image as Bitmap ??= this.picbox.Image = new Bitmap(this.picbox.Width, this.picbox.Height, PixelFormat.Format32bppRgb); 自分で判断できないようなコードを書くんじゃない
> this.picbox.Image as Bitmap ??=
この部分でコンパイルエラーになるはずだが 新型コロナウィルス対策
一般人「手洗い、うがい、マスク」
c# プログラマ「ウィルス対策はマイクロソフトazule にまかせるよ。あとWindows ディフェンダー!」 Console.Read() とか Console.In.ReadLine() とかじゃなくて
FileStream に stdio を指定して読み込む方法を教えて下さい FileStreamは文字通りFileStreamであってFILE*に対応するのはSreamだよ
標準入力を指すStreamならConsole.OpenStandardInputで取得できる スタックに積んでから取り出すと何故か値が変化しているという謎の現象に3日間ぐらい悩んだが
ついさっきプロパティは参照型だという事実に気付いた そのプロパティが参照型 と言いたかったんだろう多分 すみません。今、mciというのを使って、音楽再生アプリを作っているのですが、
Windowsメディアプレイヤーみたいに、曲の進捗状況を示すバーみたいのって、
コンポーネントにないでしょうか? プログレスバーはダサいから、いやです。
理想を言うとDMMプレーヤーみたいに進捗状況を青いのがニョキニョキ伸びるのが
カッコ良くていいです。
自作するとしたらフォームに青いニョキニョキをグラフィッククラスで描画するんでしょうか? >>413
エロ動画とか見ないからDMM Player知らんのだけど、要するに、
(1) ダウンロード済みのパーセンテージを帯の長さで
(2) 再生位置をスライダーの位置で
表示するありがちな奴?
Windows Formsにそんなのないので自作するしかないね なぜ@は正常にダウンロードできないのか教えて下さい
よろしくお願いします
@aaa.csvが作成されるのですが0 byteの空のcsvです
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var wc1 = new WebClient();
wc1.DownloadFileAsync(url1, csv1);
Aこれは正常にダウンロードできます
var url2 = "http://tekitou/xxx.csv";
var csv2 = "bbb.csv";
var wc2 = new WebClient();
wc2.DownloadFile(url2, csv2);
B上の2つを1つのメソッドの中に並べてから実行するとなぜかaaa.csv、bbb.csvともに正常にダウンロードできます
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var wc1 = new WebClient();
wc1.DownloadFileAsync(url1, csv1);
var url2 = "http://tekitou/xxx.csv";
var csv2 = "bbb.csv";
var wc2 = new WebClient();
wc2.DownloadFile(url2, csv2); >>419
はい!非同期にファイルをダウンロードするメソッドです! 同期・非同期の両方を使うのは、おかしい。
JavaScript ならクライアント側だから非同期で、Ruby ならサーバー側だから同期
非同期は、同期のような書き方はできない。
コンテキスト・文脈が異なるから、
異次元との通信で、タイムライン・時間の進み方も異なる
だから異次元通信のような、独特なタイミングの調整が必要! >>418
基本通りDownloadFileCompletedイベントを使え
キーワードのわかるものは自分でまずググれ
>>421
お前はいらんから消えろ 質問の趣旨からは外れるけど、System.Net.WebClientは古いから、新規開発ではSystem.Net.Http.HttpClientが推奨だったかと >>418
たとえばMainにその4行だけ書いたら
1の場合ダウンロード始める前にプロセス終了するけど >>421
正直に言うとよく分かりません!
目的はwindowsフォームで作ったアプリで使う事です。
具体的には、DownloadFileCompletedイベントを使い、
ダウンロード完了を待ってCSVファイルにアクセスしたいと思いました
実はこれは成功しています。
コンソールアプリでも同様のことができないかとチャレンジしてみたのですがこの通りダメでした。
「非同期」について根本的なことが理解できていないと指摘されているのだと思ってます。
もう少し調べてみます! >>422
windowsフォームアプリで使っているので、それを参考に同じように書いてみましたがやはり空のファイルしかダウンロードできません!
static void Main(string[] args)
{
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
WebClient wc1 = new WebClient();
wc1.DownloadFileCompleted += Wc1_DownloadFileCompleted;
wc1.DownloadFileAsync(url1, csv1);
}
private static void Wc1_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
{
Console.WriteLine("完了");
} >>424
visualstudioのF11を使って走らせると一応最後まで行くのが確認できます!
なぜでしょう >>423
そちらも当たってみることにします
ありがとうございます >>418
非同期にダウンロードするなら、ダウンロード終了を待たないとそりゃ中身0バイトでしょ。
Mainをasync voidにして、awaitしなよ。 >>429
へとへとになりましたがいけました・・・・
一応報告です
async voidはダメだという記述をどこかでみました(ぐぐりまくった結果ソースがどこかわからない)
async Task MainでいけるということですがC#7.1を有効にするためごにょごにょしました
awaitをつけたところ戻り値voidのメソッドはだめだと怒られたのでDownloadFileTaskAsyncに変えてみました
static async Task Main(string[] args)
{
var url1 = "http://tekitou/xxx.csv";
var csv1 = "aaa.csv";
var client = new WebClient();
await client.DownloadFileTaskAsync(url1, csv1);
}
なんだか胃が痛くなってきました
ありがとうございました・・・ >>430
async void申し訳ない、雰囲気で話してしまったので裏を取るべきだった。
aync Taskだな、おっしゃるとおり。
行けて良かった。 >>431
ありがとうございました。
ダウンロード終了を待たないとそりゃ中身0バイトでしょの一言が貴重でした
ちなみにですが、
https://dobon.net/vb/dotnet/internet/downloadfile.html
「.NET Framework 2.0以降で、非同期的にファイルをダウンロードし保存する」
で紹介されているC#のコードですが、ここではawaitが出てこない
その理由は、
コンソールアプリと違ってフォームを表示しているメインのスレッドは勝手に終了しないから
という理解でよいでしょうか?
コンソールアプリだとメインで走っているスレッドはコードの最後まで行けば勝手に終わってしまう。そのため、ダウンロードに関わっているスレッドもそれに引きずられて終わってしまう
と考えたのですが・・・ >>418のBでうまくいったのは、
たまたま非同期が前、同期が後の順番だったため、同期が終わるまでプログラム全体が終了せず
その間に非同期のほうも無事にダウンロードできたという事で・・・?
サーバー側の都合で同時に同じファイルのダウンロードは認められず、先に要求のあった非同期が終わるまで同期のほうが始まらなかったとか >>432
DownloadFileAsyncとDownloadFileTaskAsyncは別物よ
そもそも.NET Framework 2.0時代にはTaskは存在しないし当然awaitなんてのも存在しない
DownloadFileAsyncはイベントベースで完了を待つ(ことができる)もの
まあフォームアプリの場合通常はフォームが閉じない限りプロセスは終わらないんだから必ずしも明示的に待つ必要はないわけで
でもある程度大きいファイルをDLすることを考えると
DL中にフォームが閉じられた(プロセスが終了した)ときに打ち切られるのは変わらないから
必要に応じてDL中はFormClosingで閉じるのをキャンセルしたりする処理を書かないといけない タマタマ動いてるプログラムと
正しく動いてるプログラムは
月とすっぽんの差がある >>435
一番知りたいのはフォームアプリとコンソールアプリでなぜこのような違いがでるのかっていう点ですね
それについては>>432の理解でよいのでしょうか
前半は肯定してもらったのですが、後半はどうでしょうか
>DownloadFileAsyncはイベントベースで完了を待つ(ことができる)もの
DownloadFileTaskAsyncでもcompletedイベントハンドラが動きました
とここまで書いて一発で疑問を解決してくれるコードを発見です
static void Main(string[] args)
{
var url1 = new Uri("http://tekitou/xxx.csv");
var csv1 = "aaa.csv";
var client = new WebClient();
client.DownloadFileAsync(url1, csv1);
Console.ReadLine();
}
もちろんこれがアプリの中で使えるということではないんですが
基本の基本となる理屈がこれで分かりました
コンソールとフォームの違いに重点を置いた説明ってなかなか見当たらないんですよね
どちらかに特化したものはあちらこちらにあるんですけど。
そのせいで頭に生じた矛盾点が解決できず基本理解が大きくゆれていたんです
あと、>>418のBで順番を逆にしたら期待通りの結果が得られました
解決です >>432
その認識で良いよ。
メインスレッドは終わらないからで大丈夫だと思う。 >>437
ManualResetEventのWaitOneで待ち構えて、CompletedイベントでManualResetEventにSetしてあげるとかが王道なのかな。
そういう事しなくて済むようにしたのがAsyncだとは思うけど。
ManualResetEventのWaitOneは、Console.CancelKeyPressに紐付ける形でよく使うかもしれん。
フォームアプリでどうして大丈夫か、は、一回Program.csをよく読んでみたら良いんじゃないかな。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.forms.application.run?view=netcore-3.1 >>437
コンソールアプリにはイベントループが無いからだよ
Console.ReadLine() がイベントループみたいなもんだからそれで見た目だけ治る 学術の巨大掲示板群 - アルファ・ラボ
ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など
simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0 >>438-440
大変ありがとうございます
しっかりと調べた方がよさそうなキーワードが盛りだくさんです
今から出かけるので帰ってから取りかかろうと思います
まだまだ奥が深そうですね! 非同期は、異次元空間。
時間の進み方も違うから、相手を知ることができない。
過去・未来も、わからない
コンテキスト・文脈も異なる。
相手がエラー・例外でも、こちらでキャッチできない
そもそも相手が何も知らせてこない場合も多い。
エラーと知らせると、さらに攻撃されるから、何も送ってこない
非同期に対して、こちらが出来ることはタイムアウトして、あきらめることだけ
非同期は、独特な書き方が必要。
異次元と通信するのだから、独特なタイミングの調整が必要!
これを分かっていないと、アプリは何回かに1回、エラーを起こす。
常にエラーを起こさないだろ。
自分がテストした時は、正常に動く
こういうバグが、一番やっかい。
多くのアプリは、これで時々エラーを起こす GUI アプリはイベントベースだから、
アプリの終了ボタンを押すなど、プロセス終了イベントを送らない限り、
CPU 使用率0 のまま、プロセスは存在し、イベントを待ち続ける
そこが、CUI アプリと異なる点 何も知らないルビクソは黙ってろ
GUIアプリといえども実行中の非バックグラウンドスレッドが全て終了すればプロセスは終わる
にもかかわらずプロセスが勝手に終了してしまわないのは、フレームワークが内部的に無限ループでイベントをポーリングし続けているから GUIアプリがイベントベースってのは誤解を生みそうで好かんな。
結局アプリケーションメッセージループを理解しないと、真っ白になるGUIアプリ作ることになる。
CUIアプリでもちゃんとしたアプリ作るとなると普通はイベントループ的な部分を作るんだし、あんまり誤解を生みそうな発言は良くないんじゃないの? Win32 API は、本が古い
猫でもわかるWindowsプログラミング 第4版、2012
C言語で作るWindowsアプリ!
TCP/IPネットワークやシステムプログラミングもカバー。
Win32 APIを使ったWindowsプログラミングの集大成! !
Windows 7 / Vista / XP SP3、Visual C++ 2010対応 それが理解できてれば、CPU利用率の話は暴論だと理解できるはずなんだが。
UIスレッドとそれ以外のスレッドとか、ちゃんと頭に浮かんでる? Rubyのチュートリアルレベルのことしかわからないのに、
他言語のスレに誰も求めてないRubyでの回答しか書けないやつにわかるとは思えない、実践経験もあるように思えないし
プログラミング言語触ってて、昔取った杵柄(しかも低レベル)は最高にかっこ悪い老害だとどうしてわからないものかね レベル的には「ただのガイジ」以外の表現はないと思うけどなw 中小企業の業務システムをc#とsqlサーバーで作ろうとしてます
帳票発行とか商品検索システムを作る上でオススメの本やサイトがあったら教えて下さい
初心者向けの本は読破しましたがオブジェクト指向とかは理解できてないレベルです >>458
そこら辺の言葉もよくわからんレベルなんだけど商品の物流管理や発注、出荷、売上、締め処理まで恐らくSCMなのかな >>459
先ずは「グラス片手にデータベース設計」
の販売管理編か生産管理編をお勧めします。 ありがとう注文してみる
dbの設計方法学んでからc#って感じかな そのレベルだと、パッケージ買ってこいって話にしかならんと思うよ。
要件定義もできないから、設計に落とし込めるわけがない。
パッケージに合わせて業務改善してもらえ。 典型的なデスマーチの入り口です
おめでとうございます >>463
当然パッケージで行こうとしたんだけど、あれが出来ないこれが出来ないで結局ポシャった
のんびり自社開発してくんでc#のオススメ本もヨロシク パッケージで出来ないことをするってのは、それは結構リスキーだぞ。
なぜ出来ないかよく調査した?
昔、とある業界用のパッケージ製品作ってる会社にいたけど、どうしてこれができないの?って返事は結構
「法律によって規制されてます」
「その運用すると結果的に脱税になります」
「省庁の○○発第何号でガイドラインが出て、こうすべきだと指針が出ました」
「他の部分に上記の理由で変更できない事があり、ご指摘の所作はそれに矛盾します」
みたいな事が多かったよ。
基本的には「仕様です。対応していません」と答えるけど、コンサルとしても入れるときは運用から全部相談に乗ってたから良く現場に資料持って説明しに行ったよ。
システム作るときはそのへん注意な。 内容によるけどパッケージが対応してない、よりパッケージに合わせて業務を変えるが好ましい場合が多い
自社開発でそのパッケージより高クオリティなものが作れるなら別に良いんだが、そんなの作れるならそのパッケージ売れよって話になるし
だいたいが業務は変えたくない、けど楽したいというただのわがままでしかない まぁそう言うなよ
SCMをフルで自作すればざっと300画面。
週に2つ作れば、150週。
1年は53週しか無いので足掛け3年。
で、外出しするにしてもデータの流れも画面の動きも
知らなければ只の養分だよ。(ERPなら1億からのコース)
データの流れを把握してなければRFPすら書けない。
だからこそのデータベース設計の把握を最優先だと思うのですがね。
その後の画面周りは誤差の範疇かと その水準なら、EXCEL & VBA 辺りでお手軽に帳票とか集計とか作ってみてイメージを固めてからから考える方がいいような。
たぶん形が出来る前に挫折すると思う。
基本は 466, 467 に全面同意なんだけど。 誰にでも初めてはあるからなぁ
困難は知った上でチャレンジして欲しいと思っているyo。 業務分析はちゃんとできてるの?
各部のキーマンを全員集めた?
外注に何人も入ってもらってもまとまんないよ。
ましてや中の人間がやったら、できない事ばっか責められると思うけど。
伝票類とかしがらみはあるのかとか、そういうフィジカルな部分も考えつつしなきゃな。
なんか同じような案件で同じような状況の話を鋼管屋さんの話を昔聞いたことあるな。 取引先毎の仕様(伝票様式、出荷データ等)が幅広くて統一してもパッケージカスタマイズで億行くと言われ社長激怒
現行システムあるけど継ぎはぎだらけで担当死んで誰もワカンネ状態
で新規に作り直そうが今の状態
説明足りなかったすまん >>472
応援したい気持ちもあるが、地獄を想像せざるを得ない。
悪い事は言わん。スクラッチで専任で入ってくれる会社なり人なりを捕まえて数千万でもかけるべき。
現行システムからのコンバートどうするんよ?捨てるの?
死んだ人は曲がりなりにも、ツギハギにでもシステム作ってたんだろうが、それは会社の業務を知り尽くしての事だと思う。
そして、それには数千万、もしかしたら億行くかもしれん価値があった、そんだけなんよ。
本来はその人に人材を育成してもらうべきだったんだと思うぞ。
おまいさんが作ったとしたら、次世代もちゃんと育成して自分の手からそのシステム手離れさせていける?
あと、取引先毎の仕様は、うまく言ってこっちの都合の良い様式に丸め込んでくるスキルも必要よ。 >>473
大筋合意。
デパ専、ストア専。一つとっても、
各社扱いが違う。(某梯子高だって特殊)
それを理解するためにも基本パターンを
理解しておくのが重要じゃないかなぁ 渡辺 幸三の
「業務システムのための上流工程入門」と
「業務別データベース設計のためのデータモデリング入門」
を勧めておく
業務システムの基本設計ができるようになる入門書として俺はこれ以上の本を知らない
考え方が少し古かったりやや偏ってるところもあるけど即実践で使える
業務全体を俯瞰で見れるから中小企業のシステムとも相性がいい おもしろそー
オブジェクト指向も分かってない人が組み上げていくっていいじゃんか
俺もやってみたいわぁ
中途半端に大きいからVisualStudioさえ入れさせてくれないわー >>475
生産管理・原価管理システムのためのデータモデリング
も名著やね 商品検索システムや帳票はDBさえ普通に出来てればアプリ側は比較的簡単
(帳票は技術的に簡単でも手間がかかるのでパッケージを使うことが多い)
ただアプリ設計もDB設計も実装技術も今から学ぶ必要があるならデスマ確定なので
自社開発は諦めて外部発注のための要求仕様を作ることに力をいれたほうがいいと思う どれくらいの工数かけて内製するのか知らんけど外に出したら億いく案件を中なら安く済むと思ってるのが間違い
その手のパッケージ開発で飯食ってるやつと、そうじゃないやつで同じもの作るときにコストがどれだけ跳ね上がるか…
内製したら安く済むならみんな内製するんだからパッケージ商売自体が成立しない
ソフト開発が甘く見られてる典型例な感じする 製造業だと、まずBOM的な考え方をしないといかんのかとか、そういう所から要件定義じゃないかな。
その後原料ロット、生産ロット、出荷ロット管理なりを考えてから、その後帳票かな。
前後で法規制をきっちり考えないといかん。 >>477
うん、それを含めた3冊読むのが一番いいと思ってるんだけど
例として出てくるような業務に詳しいかDB設計経験がある人じゃないと
先にあげた2冊に比べてハードルが高いみたい >>479
>ソフト開発が甘く見られてる典型例な感じする
これホントそうなんだけど、なかなか伝わらないよね。
しかも、それぞれの分野に専業の業者が居るぐらい特化してるって事をわかってほしいし、その上で社内にいた人の価値をもう少し再評価してあげてほしいと思う。
ツギハギって言うけど、ツギハギでも動いてるってのはなかなかよ。 「とりあえず Excel っぽいのを作ってくれればいいから」 >>483
よく言われるwww
世界中の天才が集まって作ったソフトと田舎もんが作った業務システム一緒にすんなっての
エクセル使わないですむように開発してんのに殺意わくw とりあえず出てきた本は読んでみる
開発は帳票や伝票部分はパッケージ探して業務部分は自作してみる
業務内容は頭に入ってるからのんびりやってみる
アドバイスありがとう 仕様がわからない状態だから
どう転んでも赤字にはならないようリスク要因特盛の見積もりだから
発注側との想定金額と大きく乖離してるんじゃないかな
仕様がわからないと既存システムを調べて一から仕様を起こして検証が必要
それにそういう会社の案件はめちゃくちゃリスク高いから
受託としてはできればやりたくないんだよね 一年後くらいにどうなったか教えてくれたらうれしい。
いや、本気で、一年後にここに報告に来れる状態を保ててるなら、もう一流なんじゃないかって気もする。 レスみた限りだと仮にシステム構築出来たとしても要件漏れありすぎてバグと業務混乱で炎上爆発するの確定やん、、 今更だが言語以前の話だからスレ違いだし、続けたいのならせめて相談室スレに行ってくれ 問題は締めがある、在庫、物流の処理がある事、受発注、出荷、売上(おそらくは入金も)があるって事で、
仕入れ、設計、ロット管理含めた生産管理、品質管理、不良在庫、不適合管理を全部把握してないといかん上に、
そのすべてが会計、経理上おかしくないようにしないといかんという、
請けるとしてもそこそこ会社が小さい頃から全部門の面倒見てきた人を無理矢理巻き込んだ上に税理士なんかにお伺い立てて確認してもらうレベルの案件だからなぁ。
業務だけじゃなくて法規もちゃんと調査して、必ず必要だから経理の人間捕まえなよ。 >>491
言語以前の問題だと質問者が気づいていない以上仕方あるまい。 内容に応じて他スレ・他板へ行くことを勧められることがあります。 快活クラブでリモートワークしてる c#プログラマがいたよ。
女性店員に「エロサイト表示しろ、無修正のやつな」
って大声で要求してた。
c# プログラマってなんでこんなやつばかりなんだろ。 C#でLINE Bot作りたいのだけど、visual studio2019でLINE Botがインストールできないのだが、対応していないのかな?
ググったけどわからない。 >>484
まあ、何も知らない人からすればパソコンオタクが
ゲームでも楽しむようにパソコンをカチャカチャやって
作るだけってイメージだからな
何でこの程度のものでそんなに時間かかるの?
まだできないの?
社内SEによく向けられる疑問 >>482
だよな、ついに破綻して動かなくなってしまって
担当SE逃亡行方不明なんてのも珍しくないしな >>485
帳票や伝票部分はAccessかExcelでいいんでない?
俺なら全部Accessでやってやるぞw ワッチョイありで関係ない談義するアホどもとここでなぜか連レスするキチガイ
わざと質問できない空気にしてんのかこいつら? .NETのフォームアプリケーションで自作のイベントハンドラを動かし続けるにはどうしたらいいですか?
まずサブクラスで、eventとdelegateとevent処理関数を用意。
Form_Shown時に、上記をイベントハンドラ設定。
結果はイベント待ちにより処理が占有される。
理想は、フォームを動かしてる裏で、までイベント待ちさせたいです。(イベント待ちを別スレッドにすれば可能?)
なんともわかりにくい説明になって申し訳ないのですが、よければお答えいただけると幸いです。
よろしくお願いします。 >>504
わかりにくいというより何言ってるのか全然分からないw
いや別にディスってる訳じゃなくてマジで なるほど調べてみます。
圧倒的理解力不足なもんで…
ありがとうございました >>504
作るイベントによって変わるけど>>505が万能回答
>>506
メッセージを誰が送るのかわからない
何を起点にDoEventするのかわからない https://dotup.org/uploda/dotup.org2162644.png
https://dotup.org/uploda/dotup.org2162643.png
Blazorを使用してSPAを作ってみたいと考えております。
画像と同じ説明になってしまいますが、
Dictionaryとforeachを使って画像ファイルを並べられたまでは良いのですが、
その画像ファイルとセットで説明文も一緒に添えたいと考えております。
説明文もセットでforeachに加えて並べるにはどうすれば良いでしょうか?
(Dictionaryもforeachも手探りでやっただけでして拘りはありません。)
画像+説明文の数だけulやliやhrefやimgを書いていくのも大変なので、
自動化?のためにforeachとdictionaryを使用しました。
宜しくお願いいたします。 >>513
タイトル、説明文、画像ファイルパスなど必要なもの一式を
一つの型にまとめてDictionary<T>やList<T>を使う 514の言うとおりだけど、キー不要なのにDictionary使う意味はないな。Listで。 >>514-516
皆様ありがとうございます。
何とか無事にできました。
https://dotup.org/uploda/dotup.org2163229.png
https://dotnetfiddle.net/2laUxq
こちらが実際に書いたコードになります。
コメントアウトされている16-21行のコンストラクタを書くと、
49-52行のnew ArticleItemに赤波線が表示されてしまい、
「ArticleItem.ArticleItem(int, string, string)' の必要な仮パラメーター 'number' に対応する特定の引数がありません。」
となってしまいます。
一応numberに対応する引数はそのまま書いているつもりなのですが、これはどういう理由なのでしょうか・・・? コンストラクタに引数を与えるなら
new ArticleItem(1, "vermeer.jpg", "フェルメールの真珠の耳飾りの少女") >>518-520
一応そちらも試してみていたのですが、{}を()に直すのを忘れていました・・・初歩的なミスでした。
フィールドの場合ですと毎回Name=、Number=、Description=を書かなくてはなりませんが、
コンストラクタですと文字だけで便利な反面、第三者には伝わりにくい面もあるのでしょうか。
やっていくと色々と違いがわからず混乱してしまいますが、基礎から調べてみようかと思います。
初歩的な質問に答えて頂きありがとうございました。 >>521
・該当部分がコメントアウトされている場合、引数無しのコンストラクタ(デフォルトコンストラクタ) public ArticleItem() が暗黙的に定義されている
・public ArticleItem(int number, string name, string description) が定義されている場合は public ArticleItem() は暗黙的に定義されない
多分混乱の原因はこれを忘れてるからなんじゃないかな どーでもいいけど画面左のグラデーションが綺麗だなぁと思いました 三項演算子で null のときは
?? とか ?: とか省略方法があるようですが
値で 0 のときにチェックを省く方法はありますか?
a = b == 0 ? c : b;
a = b != 0 ? b : c;
みたいな場合に
a = b ?? c;
a = b ?: c;
とかの書き方無かったですか? >>525
ないです
素直に0比較してください
nullはプログラム上重要な要素になるので特別な処理が作られました int orz(int x, int y)=>x==0?y:x;
で
a=orz(b,c);
でいけました
ありがとうございました あまり意味ない上に、何やってるかわかりずらいようなしないでもないでもない 本人が満足しているんだしロジックに関わりすらしない部分で持つ変なこだわりが初心者らしくていいじゃないかw >>529
3ヶ月後の自分に「こいつ死ねばいいのに」って言われるやつ。 気持ちはわかるが変数名メソッド名が文字数的に長い短いを気にしないほうがいい
正しく命名された内容であればたとえ20文字超えとかでも問題ない
エディタ周りが優秀になり強力な入力補間が効く現代で文字数が減ったところで何の恩恵もない
流石に50文字超えみたいなのは正しく命名されたとは思えないので論外ね >>529
一回だけで済む方法もあるよ
if ((a = b) == 0) a = c; ではプロのお方に考察してもらいたいんだが、
なぜLINQ(IEnumerable)にはListにはあるForEachメソッドが無いのかな? どうせやるなら
static class IntExtension {
public static int ifZeroThen(this int val, int to) => val==0 ? to : val;
}
と拡張メソッドを作って
a = b.ifZeroThen(c); 「foreachは副作用を起こすためだけに存在する操作なのだから手続き型で記述すべき」というだけのことなんだが、
理解できない馬鹿は多いんだよね それってビットスライスプロセッサと同じ?
昔、AMDのAm2900だっけ? C#で自クラスを表すキーワードってありますか?
thisで自インスタンスを指すのと同じ要領で、
ILogger<This>みたいな書き方で自クラスを指し示せると便利なんですけど 例示の通り全部のクラスにloggerのstatic instanceをコピペで置きたいんじゃない? 派生クラス内のbaseキーワードのthis版みたいなもんか
まあ気持ちはわからんでもないがエディタのリファクタで済む話でもあるしなあ まさに>545がやりたいことでした
DIする全クラスにloggerを用意するルールになってて、
本体のクラスとILoggerのクラスが食い違ってるものがけっこうあって、
なにかそういう間違いを防ぐ方法がないかなあと思ったのですが
ないようなら間違えないように気を付けるしかないですね、わかりました スニペット定義すればいい話じゃないの
なんでそんなクソみたいな需要のためにキーワード追加しなきゃならんのよ 人種差別を肯定し、master というブランチ名を使うレイシストc# プログラマーのボーナスは全廃し、給与50% カット6ヶ月ぐらいすべき。 mainという単語からは主流≒多数派ばかり優遇して少数派を蔑ろにする差別的な印象を感じる branchとかmergeとかもPC的にはそのうち禁止されるんじゃね? PATAのデバイスついてるPCもアウトだな。masterにslaveだもの。 slaveは言い訳できないが、masterはいいだろ
言葉狩りの暴走は勘弁してほしい 変数名やメソッド名全部に差別チェックが入る時代が来るぞ くだらね
考えすぎだと思うよ
日本語でも主/従というがこれをpolitically incorrectだと言う人はいないでしょ そんなことより、変数名に日本語使う会社の先輩を禁止にしてほしい >>558
良いじゃないか。
国民皆保険制度の健康保険の記号と番号なんて、
kenpoKigouとkenpoNoぐらいしかうまく当てられんぞ。
insuranceとはちょっと意味合い違うからな。 そういうのって正式に英語名称が定義されたりしないの? 全国の地方自治体向けに作られた翻訳システムがあるが英訳はめちゃくちゃわかりにくいぞ
区役所とかのホームページ見れば分かる プログラマが勝手に作ったローマ字使うくらいなら正式な英語あるならそれ使えばいいじゃん
わかりにくさはローマ字も一緒だし
それも嫌なら正式名称の日本語かな
日本語は入力がめんどくさい、isとかつけたら見づらいとかあるんで個人的には英語にしたいところ 配偶者特別控除とか英訳した変数使われたら長すぎてたまらん そんな長いのかと思ってググったら全然長くないじゃん >>560
必ずしも充足されてるとは言い難い。
まず政府管掌健康保険が協会けんぽに変わったから、云々、と歴史まで追いかけるときりがない。
それに、プログラマが勝手に決めないぞ。プロジェクトでコンセンサスとって対訳表作る。 >>566
対訳表に則っているなら先輩が変数名に日本語使うのを禁止になんかできんだろう
規約を変えたいという気持ちならわかるが >>567
うん、だから禁止になんてする必要ないじゃないかって言ってる。
コンセンサスが基本だから、先輩後輩関係なくどうしても納得ができないと言い張れば変わるよ。 >>568
元のレスの環境はわからんが対訳表なんかきっちり固めない規模なんだろう
だから個々人の裁量で進行する
世の中規約がきっちりしてるプロジェクトばっかならそもそもあんな愚痴なんて出ないよ >>569
まあそれもそうかもなぁ。
ただ正式名称が良いとは思うが、日本語マルチバイトで変数を使われるのは俺も嫌だ。
インテリセンスで泣けてくると思う。 出来もしないのに無理やり英語使われてもなあ
ソースコード読んで直す側としては、変数名で恥ずかしいスペルミスされたり見当はずれの英単語使われるくらいだったら
開き直って日本語の変数名にしてくれてるほうが100倍マシ
ローマ字表記はヘボン非ヘボンの混在だったり長音や「おう」の表記ゆれだったりでgrepできなくて迷惑
子音のみ表記は論外 shine←誰だ!ソースコードに死ねって書いた奴は!
お前が一番英語できねーじゃん 派生クラスのインスタンスが与えられていて、abstruct な基底クラスの virtual なメソッドを呼び出すにはどうすればいいでしょうか?
using System;
using System.Reflection;
namespace ConsoleApp1
{
class Base1
{
public virtual void method1()
{
Console.WriteLine("Base1 method1");
}
}
abstract class D1 : Base1
{
public override void method1()
{
Console.WriteLine("D1 method1");
}
} class D2 : D1
{
public override void method1()
{
Console.WriteLine("D2 method1");
}
public void callBaseMethod()
{
base.method1();
}
}
class Program
{
static void Main(string[] args)
{
D2 d2instance = new D2();
d2instance.method1();
d2instance.callBaseMethod();
Type d1type1 = d2instance.GetType().BaseType;
MethodInfo mi1 = d1type1.GetMethod("method1", BindingFlags.Instance | BindingFlags.Public);
mi1.Invoke(d2instance, null);
D1 d2asD1 = d2instance as D1;
MethodInfo mi2 = d1type1.GetMethod("method1", BindingFlags.Instance | BindingFlags.Public);
mi2.Invoke(d2instance, null);
}
}
} D2クラスのメソッド内からは base を使って D1::method1 を呼び出せますが、D2クラス外から D1::method1 を呼び出したいのです。
reflection を例のように試してみましたが、これではD2.method1 が実行されました。 static void Main(string[] args)
{
D2 d2instance = new D2();
D1 d2asD1 = d2instance as D1;
MethodInfo mi5 = typeof(D1).GetMethod("method1", BindingFlags.Instance | BindingFlags.Public);
var dynamicMethod = new DynamicMethod("baseMethod1", mi5.ReturnType, new[] { mi5.DeclaringType }, mi5.DeclaringType);
var il = dynamicMethod.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.EmitCall(OpCodes.Call, mi5, null);
il.Emit(OpCodes.Ret);
dynamicMethod.Invoke(null, new object[] { d2asD1 });
}
これで
D1 method1
と出力されました。
何で出来るのかはさっぱり分からないけど、完全に理解したので、感謝の気持ちだけ送ります。 今までGUI作ったことなかったなーと思って勉強しようと思ったんですが今だとどれを勉強するのがいいんですかね
さすがにformsは古い?そうだけどWPF以降も色々と出ていてこのタイミングでどれをやるのがいいのか迷ってて >>582
就活用ならUnityでもやるのがいいんじゃね
そうじゃないのならVB6ですらWindows10で動くんだから古いとか気にする必要はないはず Unityに+1
Unityのゲームの中身じゃなくてEditorの方をおすすめ unityがおすすめなんですね。あれゲーム専用だと思ってました
もっぱら業務アプリばっかなんでそういう用途にも使えるとは思ってなかったです 倉庫の在庫官吏を、VRで実際の倉庫とそっくりに作った仮想倉庫内を移動して有無を確認するようなシステムにしたらITで社会が幸せになるね 数値で確認じゃなくVRでわざわざ見渡すシステムを作るのか
すげーな、現場でそんな発想するやついねーわw カメラを設置するだけでも大変だったのに
モデリングに手間暇かかるだけ無駄 商品もリアルに表現しなきゃねってことで
手足に負荷がかかるような器具を付けて商品の重さも再現するんでしょ?
倉庫の広さも実感できるようにランニングマシーンの進化版みたいのに乗ってと・・・ これからは業務アプリもunityやunrealengineだな 配管系のゲージは研修半分でオーバーレイして表示させるとかそういう話聞くけど、在庫数は無いわ。
金はかかるがだいたいパレットやらロットにRFタグつけて棚卸しできるようにするだろ。
ちなみにプラントのモデルは案外あるし、点群で撮っちゃうって手もある。
ただ、確かにモデルを表示する類の業務アプリはUnityで作ってるのもあるよ。
それなりに大手の製造業だけど。 >>593
リアル涙の倉庫番スペシャルか。
別方面で売れるかもしれんな。w そんなに余裕ならamazonの倉庫で
働けば良いのに:-p >>597
バーチャルで人が汗水垂らして荷物を運んで
それとシンクロしてリアル倉庫で機械が荷物運ぶのな
これこそ来たるべき未来の労働の姿だわ >>600
それだけでは体力的に厳しいからパワーアシストスーツを着ないとな X軸を対数にしようとIsLogarithmic= Trueにしたら"対数スケールはこの軸には使用できません"と例外が出たが、
Y軸では出ません。
プロットしたデータが悪いのかと試しにXもYも同じデータでプロットしてもX軸を対数にしたときだけやはり例外が出ます(Y軸だけ対数表記だと出ない)。
詳しい方がいたらアドバイスをください。
private void CalcFFT(int samplingNum)
{
chart2.Series[0].Points.Clear();
var input = new Complex[samplingNum];
var output = new Complex[samplingNum];
for (int i = 0; i < chart1.Series[0].Points.Count; i++){
input[i] = new Complex(chart1.Series[0].Points[i].YValues[0], 0);
output[i] = new Complex(chart1.Series[1].Points[i].YValues[0], 0);
}
// FFTを実行
Fourier.Forward(input);
Fourier.Forward(output);
for (int i = 0; i < input.Length; i++){
var aftInput = Complex.Divide(input[i], output[i]);
var aftOutput = 20*Math.Log10( Complex.Abs(aftInput));
chart2.Series[0].Points.AddXY(aftOutput, aftOutput);
}
chart2.ChartAreas[0].AxisX.IsLogarithmic = true;//これだけ例外になる
chart2.ChartAreas[0].AxisY.IsLogarithmic = true;
} >>605
0や負数を取り除いてもエラーになってしまうんです。
そもそもY軸では負数を含めてもエラーにはならなかったので悩んでいます・・・。
上記のリンクも調べて既に試したのですが、
SuppressExceptionsを設定してもダメでした。 chartなんて使ったことないから何か勘違いしてるかもしれんけど
別に何の問題もなかった
private void PlotSomething()
{
for (int i = 0; i < 10; i++)
{
var x = Math.Pow(10, i);
chart1.Series[0].Points.AddXY(x, x);
}
chart1.ChartAreas[0].AxisX.IsLogarithmic = true;
chart1.ChartAreas[0].AxisY.IsLogarithmic = true;
} 動くコードから一つ一つ近づけて行くのもいい手だよね >>607
コードをお借りして試してみましたがダメでした・・・
私の環境で気になるのは、
AddXYをした後でもX軸のAxisX.Minumum=0でAxisX.Maximum=1のままだったんですよね・・・
そのままformを抜けて描画すると突然アボートになる・・・ フォームロード時にエラーになる?
対数軸持ちチャートはデータ数0を
許さないから、ダミーデータを入れた?
series.enabled = false;はしてある?
でなかったらわからないです。 >>609
新規作成したプロジェクトでも同じって言ってるの? >>611
すみません、新規作成したプロジェクトで>>607を走らせたらいけました・・・
今のプロジェクトで変なプロパティ触っちゃったのかな
X軸の対数表記絶対許さないマンな動きだったのでコントロールを作り直して試してみます! >>612
また、新規作成して今度は駄目なコントロール貼り付けて
動くか確認
思った通り駄目だったら
動くやつと比較ツールで比較して出た差分を修正して動くようになるところを確認
とか for (int i = 0; i < input.Length; i++){
var aftInput = Math.Log10(Complex.Divide(input[i], output[i]));
var aftOutput = 20*Math.Log10( Complex.Abs(aftInput));
chart2.Series[0].Points.AddXY(aftOutput, aftOutput);
}
chart2.ChartAreas[0].AxisX.IsLogarithmic = true;
chart2.ChartAreas[0].AxisY.IsLogarithmic = true; こっちか
for (int i = 0; i < input.Length; i++){
var aftInput = Math.Log10(Complex.Abs(Complex.Divide(input[i], output[i])));
var aftOutput = 20*Math.Log10( Complex.Abs(aftInput));
chart2.Series[0].Points.AddXY(aftOutput, aftOutput);
}
chart2.ChartAreas[0].AxisX.IsLogarithmic = true;
chart2.ChartAreas[0].AxisY.IsLogarithmic = true; いや、ソリューション全部比較しないとプロパティまで見えないよね? ※usingは長いので省略
class useDynamicObject1{
static void Main()
{
dynamic order1 = new Order();
order1.ProductID = 100;
}
}
class Order: DynamicObject
{
private Dictionary<string,object> items = new Ditionary<string,object>();
private const object MyDefault = null;
public override bool TrySetMember(SetMemberBinder binder,object value)
{長すぎてエラーが起こるので略}
}
というようなコードがあったとします。dynamic order1 = new Order();
order1.ProductID = 100; この部分でOrderオブジェクトのTrySetMemberメソッドが動作してるっぽいんですが
通常 order1.TrySetMember(引数を入れる);という形でインスタンスメソッドを呼び出しますよね?
なぜorder1.ProductID = 100;の記述でTrySetMenmberメソッドが呼び出されるのかがわかりません
理由を教えてください、よろしくお願いいたします。 >>617
継承元のsetterがそう書いてるからじゃないの?
代入でsetterメソッドが呼ばれるよ >>617
docsに書かれている通り、プロパティに値をsetするときに呼ばれるような仕様だから、じゃダメなの?
https://docs.microsoft.com/ja-jp/dotnet/api/system.dynamic.dynamicobject.trysetmember?view=netcore-3.1
>このメソッドは、sampleObject.SampleProperty = "Test"のようなステートメントがある場合に呼び出されます。
>sampleObject は、DynamicObject クラスから派生したクラスのインスタンスです。 なるほど、状況はわかりましたが コードのイメージができません
どのようなコードを記述するか参考例はないでしょうか?
※どこかのサイトにかいてあるコードでもかまいません マルチスレッドについて質問です。
C#は初心者です。
コードの書き方を見ると、Threadは使うな!Taskを使え!というものばかり見ます。
今の時代はThreadはgotoみたいな扱いで、使っちゃだめなんでしょうか。 >>621
Taskで事足りるから、Threadを直接扱うメリットが無い >>621
ThreadをThread.sleepで保留していて無理やり割り込んで起こすとか
言うような処理が必要なければTaskとかParalellで十分だかららしいよ 車で例えるなら、
Thread/ThreadPoolを使うマルチスレッドは、クラッチ操作とかいろいろ面倒くさいマニュアル車
Taskを使ってのマルチスレッドは、アクセルを踏むだけで動いてくれるオートマチック車
ってなイメージかな
でもってTask.Run()すら書かなくていいasyncなメソッドは自動運転車
ただ単に移動したいだけなら楽なAT車(Task)を使えばいい
全部お任せしたいなら自動運転車(asyncメソッド)で十分 async await で済むならそれが一番良いね 621だけどありがとうございます!
時代の流れに沿ってTaskの勉強します >>627
非同期処理自体に明るくないなら古い生のThreadの時代の記事を
むしろ一番最初に読んだ方が理解が早いと思う。
特に非同期処理固有の落とし穴をちゃんと理解しておくことは重要
今時の便利なスキームの有難みも分かるしね windowsフォームアプリは簡単なものなら作れるようになったので
次はウェブアプリに挑戦しようと思い、ASP.NETの本を読んで勉強してます
テスト用に作ったアプリをローカルではなく
実際にサーバーにあげて動かしてみたいと思っているのですが
こういった用途のサーバーレンタルは有料と考えてよいでしょうか?
さくらのVPS for Windows Serverなどを考えています
とりあえずの目的は、運用するまでの手順を学ぶことです
スレチだったらごめんなさい >>631
ありがとうございます
そちらも当たってみます さくらのVPSでも良いけど
shellやpythonやdjangoの便利さに心奪われて
C#やASP.NETのことを忘れてしまうだろうな
それでも良いけど >>636
使われてるでしょ?保守は地獄だろうけど >>636
Cは型安全だと思ってる?
それともCはホビー以外に使えないと思ってる? >>638
使われてるって言ってるのがわからないの? ホビーの延長みたいな感覚で仕事をしてる責任感の薄い人が居ることは事実 板のローカルルールとスレのテンプレが読めない人はNG 読んでるけど従うつもりがないだけなんでそこんとこ認識をヨロシク NSのC#自体のソース読むと結構アンマネージ使ってたような覚えがあるけど気のせいか >>644
気のせいじゃなく、実際結構使ってるよ。 >>644
C#自体と言われてもよくわからないんだけど、roslynのこと? idisposeも実装されてない
他のクラスの既にできているオブジェクトを外から強制的に消す
(全く参照させない、gclistに強制的に入れる)方法って
ありますか?
そのクラス内のあるstaticクラス変数にそのオブジェクトの
thisが入っているので外から
そのオブジェクトのアドレスだけはわかる
状態です。
それをなんとか全くどこからも
使わせないようにしたい あとthis.anyMethod()も
全くできないようにさせたい
外部から強制的に
できる? そのオブジェクトは
unityのObjectも継承してないので
static destroy(Object)も使えません >>648
IDisposable.Dispose()を実装して呼び出してもオブジェクト自体が消される訳じゃない 条件がよくわからんしunityに限る話ならunityスレでは?
というかreflectionがあるんだから完全に禁止するってほぼ不可能じゃない? gclistに強制的に入れて
強制的にgc実行とかできない? 何がしたいのか分からないねw
たぶん問題設定そのものが間違ってると思う >>653
参照を消したいのなら変数にnull入れてGC.Collect() >>655
全参照にnullをいれなきゃそれだめなんじゃ?
オブジェクトの元は外部の(管理下にない)ソースなんで自分でコード変えることができないんだけど
コード内容はわかるといった今の状況です
そのコード実行もしなきゃいけないし、オブジェクトも
つくられるんだけど、実行中に使えないように
したいという状況です 仮に触れなくすることができたとする
でもそれらをそれまで触ってたオブジェクトは当然触れるものと思って触るわけだ
そこで実は触れませんとなったらNullReferenceExceptionか何かで死ぬしかないことになると思うんだけど
ならもう自プロセス終わらせればいいってことにならないかな >>656
そのオブジェクトを使う部分を自由に出来るなら、
管理用のクラスを通してしかそのオブジェクトにアクセス出来ないようにすれば?
管理用のクラスはIDisposable.Dispose()を実装するとして。 >>659
管理部分は盲点でした
外部ソースをdllでまとめて
ある条件のときはそのdllを読み込まず
ダミーのdllを読み込ませる
といったことでなんとかできそうに見えます
ちょっと試してみます
ありがとうございます みなさんありがとうございます
大変参考になりました 本人が解決したって言うから良いんだけど全然理解できないのは俺だけ?
管理クラスと言うかラッパーみたいな共通窓口作ってそこでフラグ管理みたいなことしてアクセス制御すりゃオッケーって話? >>662
気になるだろうけど他人が掘り下げても得られるものは無いと思う 何がしたいかは何となくわかる。
それが本当に本人が思っているほど必要なことかと聞かれたら...
大半の人は質問者は何か根本的に勘違いをしてるんじゃないかと思うんじゃないだろうか やったできたわ
嬉しい
共通に使うクラスAがあって
クラスB.dllのオブジェクトが通信しあってる。
クラスB.dllに似たクラスC.dllをつくってクラスAと通信するがクラスBからはなにもしてほしくない
でもクラスBもAも変えられず実行もする
ってなるとクラスBを殺すしかと
思ってたけど
必要時クラスB.dllをダミーに置き換えればいけた
管理の部分はみれてなかった
コード内容が完全にわかってるからいけた コードの中身全部がわかってなくてもインターフェースさえわかってればできたんじゃ?
ダミー作ることなんてテストとかでも使うしよくある手法じゃないかな
dllファイル名書き換えてとかはあんませんだろうけど
つうかdisposeもgcもunityも関係ない…
無理やりBを解放したら普通はAがまともに動作しないでしょ 質問させてください。
.NET Framework3.5 で完全な透明な黄緑色で円を描画する方法はありませんか?
Graphics g = Graphics.FromImage(this.bmp);
Color customColor = Color.FromArgb(0, 128, 255, 0);
SolidBrush brush = new SolidBrush(customColor);
g.FillEllipse(brush, 0, 0, 6, 6);
とやった場合、意図せぬ透過処理がされてしまい何も描画されません。 >>671
そのthis.bmpをPNGフォーマットなどで保存したら「完全な透明な黄緑色で円を描画」した画像になるよ
ディスプレイで見えないのは不透明度が0なんだから指示通りでしかない 正直な所、これが意図してないとしたら、何を意図してるのかわからん。 準2級エスパー能力を発揮するなら
半透明な黄緑は期待したものでなく
黄緑のサングラスを通して見たようなものを期待しているのではないか
画素ごとに輝度をとって黄緑と乗算するか、いきなり黄緑と乗算するか、
そんなものがお望みなのではないか >>676
エスパーにエスパーが必要になりそうだなw
>>671
適当なペイントソフトで再現してみてから考えるなり質問した方がいいと思う
MSペイントじゃなくフォトショとかGIMPとか半透明色が使えるやつで 皆様説明が下手ですみません。
>>673
保存しましたがなりませんでした。
>>676
そういうブレンド演算処理の違いの話ではなく、
完全な透明は、通常 ARGB(0,0,0,0)という透明な黒の事が多いですが、
私が描画したい色は、完全に透明(つまりアルファ値が0)な黄緑で、
ARGB(0, 128, 255, 0) という透明な黄緑を描画したいという意味です。 >>678
その保存した画像をアルファ値だけ弄ってみれば期待通りになっているのが分かるはず >>679
いえ、アルファ値が0なので完全に透明で何も見えないのでARGB(0,0,0,0) と区別はつかないですが、
メモリ上のビットマップの内容にはアルファが0でも赤と緑の値に128や255の値を書き込めますよね。
そういう描画(つまり半透明演算をしない)がしたいんです。
>>680
目視できないくらい薄い黄色で描画されました。
何度も重ね描きしたら、うっすらと黄色が見えてきました。
不透明度128なら半透明の黄緑色で描画されます。
>>681
this.bmp は画像ファイルなので、その上に上書きで円を描画すれば元の画像が消えますよね?
そうはならず、元の画像のままなので期待通りにはなりませんでした。 >>682
>その上に上書きで円を描画すれば元の画像が消えますよね
透過で上書きして消えるペイントソフトある?普通は消しゴムじゃないか?
それなら範囲指定するデータを設定してそれに沿ってBitmapDataで画素を置き換えたことしかない ARGB(0, 128, 255, 0)で描画したはずが
抜き出してみるとARGB(0, 0, 0, 0)になってしまうとか?
それとも
ARGB(0, 128, 255, 0)での描画or透過処理で、画像に目で見える影響を与えたいとか? >>683
消えるペイントソフトは無いと思います。
消しゴムだと普通はアルファ値だけ0になるか、又は透明な黒 ARGB(0,0,0,0)で消えますよね。
そうではなく、透明で黄緑な消しゴム ARGB(0,128,255,0) を使いたいという事です。
>>684
>ARGB(0, 128, 255, 0)で描画したはずが
>抜き出してみるとARGB(0, 0, 0, 0)になってしまうとか?
違います、元の画像のまま何も変化なしです。
>それとも
>ARGB(0, 128, 255, 0)での描画or透過処理で、画像に目で見える影響を与えたいとか?
そうです、透明な黄緑で円を描画したのだから、
円の形で透明に切り抜かれてほしいんです。
(更に切り抜かれた部分は透明な黒ではなく、透明な黄緑で) 透明な黄緑の先には元の画像が薄っすら見える方がいいのか?
透明な黄緑一色の均一な色で塗りつぶすのか? >>682
と言うことは、不透明度0の時に特別扱いされてないか確かめないといかんな。
不透明度0って、描かないと判断されてるのかもしれん。 >>685
もう何言ってるのかさっぱりワカンネ
ペイントかフォトショでその期待する画像作ってよ 掲示板で一番楽なのは計算式かな?
それがformsアプリでできるかどうかって言うと微妙だと思うけど ちょっと思ったのは
もしかしてやりたいのはカラーキーの抜き色? >>685
あらかじめthis.bmpをFormat32bppArgbにする
this.bmpと同じ大きさのBitmapを作ってくりぬきたい場所にFillEllipseで描画する。(refbmpとする)
refbmpとthis.bmpのBitmapDataを作ってrefbmpの画素がある部分と同じアドレスでthis.bmpの画素のアルファ値を0にした黄緑色の画素データを書き込む
https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.imaging.bitmapdata.scan0
これしかやったことは無い。図形じゃない塗りつぶしならGraphics.Clear(Color)が使えるけど図形を指定するやり方はわからない >>685
なんか思いっきり勘違いしてる気がするけど、アルファが0ってことは
何も上書きしないのと同じことだよw
無色のガラス板を乗せたのと同じだからw >>686
>透明な黄緑の先には元の画像が薄っすら見える方がいいのか?
いいえ。
>透明な黄緑一色の均一な色で塗りつぶすのか?
はい、そうです。
>>688
フォトショップは持っていないのと、
ペイントはアルファチャンネルに非対応のようなので
Gimpで説明させていただきます。
説明画像をこちらにアップロードしました。
https://f.easyuploader.app/eu-prd/upload/20200728214113_76595047614e3537674b.zip
"元画像.png" をGimpの消しゴムツールで消すと、
"消しゴム.png" の画像になります。
この画像をGimpで開き、円で消された部分の色々な箇所を、
Gimpのスポイトツールで色を取得すればわかりますが、
青や黄色、白等が取得でき、
透明でありながら元画像の色が残っている事がわかると思います。
私がやりたいのは、"目的の画像.png" を.NETで作りたいという事です。
この画像の円で消された部分をスポイトツールで色を取得すると、
RGB(128,255,0)の黄緑色のみが取得されます。
>>690
いいえ、やりたいのはカラーキーの抜き色ではないです。 g.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
これで透過処理はされなくなるけど、失敗しそうな気がする(RGBがゼロになりそう)
試していなくてスマン >>693
スマホだからzip見れねー
画像で上げ方知らんの? >>691
詳しく説明してくださってありがとうございます。
それで出来ると思います。
ただちょっと一手間がかかりそうですね。
>>694
ああ、これです!私が捜し求めていたものは!
っと思いましたが、残念ながら透明な黒 ARGB(0,0,0,0) になってしまいました。
アルファ値128ならちゃんと半透明の黄緑になるのに、惜しい。
アルファ値1だとほぼ透明な黄色になりました。
スマホで透明部分の色が確認できるのかわかりませんが、アップロードしてみました。
"元画像.png"
https://f.easyuploader.app/eu-prd/upload/20200728224712_3833583973794a4b386f.png
"消しゴム.png"
https://f.easyuploader.app/eu-prd/upload/20200728224758_6e4174726e5477434158.png
"目的の画像.png"
https://f.easyuploader.app/eu-prd/upload/20200728225050_49646a7a674171774f59.png 適当に検証コード書いてみたけど別に変なことしなくても
ピクセルにアルファー値を持つビットマップは作れるけど
何がしたいのかな。
面倒くさいから質問ろくに読んでないけどw
private void Form1_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear( BackColor);
var hb = new HatchBrush(HatchStyle.HorizontalBrick, Color.White, Color.Black);
e.Graphics.FillRectangle(hb, ClientRectangle);
var bmp = new Bitmap(Width, Height);
using (var g = Graphics.FromImage(bmp))
{
var c = Color.CornflowerBlue;
var gb = new LinearGradientBrush(ClientRectangle, c, Color.FromArgb(0, c), 0f);
g.FillRectangle(gb, ClientRectangle);
}
e.Graphics.DrawImage(bmp, 0, 0);
} >>700
あ、アルファ値って普通に書くだけでいけるんや
んじゃあ、最終出力がpngであるならなんでもできるね
1ピクセルずつアクセスしてRGB取り出してRGBAブッ込めばなんでもできるしそれこそなんでも >>694
それ知らなかったけどおかげでGraphics.Clearにも完全透明色でのRGB設定できないのわかったわw、ありがとう
http://bbs.wankuma.com/index.cgi?mode=al2&namber=77366&KLOG=131 >>700
>>691 の処理をもっと簡単にやりたいんです。
>>702 の掲示板を見る限り、やはり>>691 でやるしかなさそうですね。
皆様ありがとうございました。 .Netは4.5を指定すればWindows8.1から2004まで追加のアップデートなしで済むんですよね?
最新のVS2019で4.72だかで作って配布したら10でも.netアップデートしなきゃ使えんと文句の嵐でめげた。 なに作ってんのか知らんけど.NET CoreでSCDという手も なぜサポート切れを?4.8で終わりなんだから4.8にしとけ .NET Coreベースの.NET 5に統合
WindowsのOS標準でインストールされてるのはとりあえず当分は.NET Framework 4.8が続くだろうな >>711
winformsかもしくはそれぐらいお手軽なのあるの? .NET Core 3.0でWinFormとWPFは移植されたよ(もちろんWindows版限定だけど)
.NET 6以降はXamarinベースの.NET Multi-platform App UIを導入予定だよ
https://devblogs.microsoft.com/dotnet/introducing-net-multi-platform-app-ui/ >>707
4.6.1を勧める
Win10(初代以外)ならインストール要らず
このバージョンを要求する外部ライブラリも多いし ラインタイム依存が嫌なら、
.Net Core 3.1 でランタイム込みの自己完結型アプリを作ればいいんじゃないの。
その分ファイルサイズはでかくなるけど。 そうですか、.netのアップデートは情シスに頼まないと一般ユーザーでは出来ないのがネックです。
会社の端末はwindows updateは殆んどやらないし。
.net位やって欲しいな。
愚痴ってごめんなさい。 >>716
だめ。BindingRedirect周りの設計をミスったことが散々ディスられてMS側も誤りであったと認めている。4.7.2以降が推奨されている。 >>726
ありがとうございます。
確かにこの板だと紛らわしかったですね。 無能winformsプログラマのおいらをMicrosoftは見放してしまうのか・・・ >>728
ところがどっこい、UWPは消えつつあるのに対し、WinFormsは.NET Coreに移行され、.NET5以降もしぶとく生き延び続ける 4年前に「Win32は廃止されて今後はUWPの時代」と息巻いてた人たち
20年延々懲りずに「すべてのアプリはブラウザ上で動く時代になる」と言い続けてる人たち
どっちも心底センスがないと思うw
そんなことちょっと考えればありえないって分かるよね >>730
概ねあってね?
前者はandroidアプリで
後者はWEBサービスだろ
それしか息してないじゃん
PCだけガラパゴス化して化石が残ってるってだけ ほらほらストアにアプリ公開したら数千円くれるキャンペーン再開してホラホラ うちの会社は特定業界向け製品だけ作ってるけど、旧製品だけWinFormsのまま(もっと古い製品はC++とWin32APIとMFCだけど)
ここ数年内に出した製品はWPFになってるな。
新規でWinFormsは使ってない。 >>734
wpf始めるにはhtmlとか覚える必要ある? >>735
WPFで使うxamlは、ぱっと見はhtmlに近いけどまるで違うから覚える必要はない xmlはマスターしておいた方がいいよな。namespaceとか。 WPFはほとんど普及しないまま既にForms同様メンテナンスモード(原則的に新機能の追加はなくバグ修正等の止むを得ない対応のみが行われる状態)でありレガシーなので、
特にFormsと比較してWPFが正義ってことはない 最近はディスプレイのスケーリング表示に対応させたいからWPFの方が楽だな だけど、大昔VBが開発された頃に想定されたような
いろんなdpiが混在するような状況なんてなく、96pdiとその倍ぐらいしか事実上ないわけで、
だったらそんなのどうでもいい気もする >>745
スケーリングは標準で25%刻みで350%まであるけど?
最近のノートPCやタブレットは最初からスケーリング設定されているし
特にSurfaceなんか滅茶苦茶解像度高いからスケーリング必須 その倍数の環境が一般的になってきてるからスケーリング対応が必要なんだが どうでもいいの意味は対応しなくていい、ではなく
システムが中途半端な対応しか用意してないWindows Formでも
なんとかなっちゃうでしょって話。
理論上はいろんなdpiが存在する前提になってるが、現実的には96dpiと
その2倍ぐらいしかないんだから。
25年前には想定されてなかったCRTの完全追放が早期に実現したからね。 ちょっと思い出したけど、WPFでは1ピクセル幅の水平垂直の直線が綺麗に描画できない(ピンボケになる)
問題があったけど、あれは4Kとかの環境では気にならないのかな >>748
カスタム設定(最大500%)で1%単位で設定する人は稀だろうけど
標準設定(最大350%)の25%単位の指定は使う人が増えて、解像度のバリエーションも増えたって話なのだが
4Kモニターも少しずつ広まってるし その前に、「WinFormsもとっくに高DPIに対応済みだ」って誰か突っ込んでやれよw >>752
WinFormsも高DPIに対応してはいるけど面倒臭い .NET CoreのWinformsでも普通にコントロール崩れるから全然ダメ 【速報】ビル・ゲイツ死去
https://hayabusa9.2ch.net/test/read.cgi/news/1600242851/
ゲイツが天国で寂しくないようにこのスレのc#プログラマを30人ほどいっしょにうめたらどうか? ゲイツはジュニアってよばれてたなのかな
インディージョーンズを思い出す >>755
それでも困らないし全然駄目じゃないから
WPFが10年も普及してない
全然駄目なら完全に淘汰されとるわ Winformでもそれなりにアプリが作れちゃうから、わざわざ新しい手法を覚えようとは思わないよなぁ >>763
hidpi対応が全然ダメだって話だしlodpi環境自体が淘汰されてないんだから当たり前じゃろ >>764
まさにそんな意識の人が多いんだろうなぁ。
ことあるごとに「WPFはいらない」とかアピールしなければ害はないのだが。 なんか本気で凝った画面作るならunityとかあるし
工場向けならwinformsだしで
消極的に凝った画面作るときしか選択しないwpf Web技術使えばいいからな
新規でWPF選ぶ時代ではない
Silverlightと同じ WPFも.net5+WinUI3でディスコンだけどな お邪魔します、くだんのUnityで
c#を始めてみたんですがデスクトップビルドとHTML5ビルドのクライアントで対戦ゲームを作るようなとき
あるいはゲームでなくてもデータベース参照でも良いですが、
どうやって通信の仕組み作れば良いのでしょうか? >>770
プロが書かないとそこそこ危険な分野なので、Photonみたいなのを使っとくのが安全じゃないのかな
https://assetstore.unity.com/packages/tools/network/photon-unity-networking-classic-free-1786
個人のゲームで無料の20CCUを使い切ったら大したもんだろうし、それを超えても500CCUまではかなり安く使えるんで、とんでもない大ヒットしない限りこれがいいよ >>771
ネットワーク通信の書き方ってUnity操作のスレなんだろうか?そこもよくわからない・・
>>772
ありがとうございます
c#始めて1週間程度なもんでココのスレ来たんだけど
ローカルでちょこっと遊んでみたいだけなんで
photonてどういうアセットなのか?
ccuが何か?すら知らなかったんで
そのあたりを調べてみたいと思います。
どうもでした。 >>232
> WinformもWPFもやったことない人なら、どっちでも楽さは変わらない
ってことは絶対ない
覚える分量もぜんぜん違うし
特にWPFとMVVMと一緒に覚えないといけないのは難関すぎる
c#精通してる人たちでも移行がすんなりいかなかったのにふざけるなよほんと >>774
それを言ったらWinformsもサブセットだしWPFもサブセットだし大体がサブセットになるじゃん >>775
MVVMは必須じゃないぞ
MVVMやらないならそんなに差があるとは思わないな
MVVMまで覚えるなら確かに学習量が全然違う
つーか、1年以上前の発言にレスすんなよw ボタンを置いてダブルクリックするとイベントハンドラが自動的に作られる…
みたいな作りやすいUIが早くできればいいのになー >>778
VSのWinフォームデザイナで出来てるだろうが WinFormsを選択する理由がない
C#はXamarin, Unity, WPFでOK >>778
どういう目的でボタンを配置したのかをAIが忖度して
イベントハンドラーが自動的にプログラミングされるならすごいなー
いや余計なお世話かもしれないから
ダブルクリックでウィザードが起動するくらいなら出来なくもないか!?
ダブルクリックでUnityもXamarinも対象位置に飛ぶだけかな?
if文やトライキャッチはTABキーダブルでテンプレ挿入なるけど、まだまだ物足りない・・・ .net5からはWinUI3でUWPのガワがデスクトップで利用できるようになり
xamarinからunoってのに代替わりもありそう .net coreはまだまだコントロールが足りなくて切り替えは厳しいな
シコシコ作った自家製クソアプリがラズパイ上で踊り狂う日を待ってます async awaitの原理がよく分かりません。
await以下のコードは実行されないにも関わらずawait中にそのスレッドが固まらないのはどういう原理なのでしょうか?
具体的にはUIのボタンクリックなどのイベント関数内でのawaitの話です async awaitのメソッドはその時点でノーマルメソッドから呼べないので悪手 const 汚染とか GPL 汚染とかと一緒で
async await 汚染が広がるってのはある
もちろん回避方法知ってれば回避可能 githubでc#製のソースコードみてると
visual studioが吐いたファイルとかが含まれてないんですけど
普通はvisual studioで開発をしないものなんでしょうか? 無駄なものは要らんので .cs だけで済む場合は .cs だけのプロジェクトの方が好き makefileを自分で書けっていうのは見るなって言ってるのと同じだよな 自動生成されるようなものをリポジトリに含めてもしょうがないから除外してるだけなんじゃね? slnもcsprojファイルも無いってことなんでしょ?
わざわざそんなことする? でもググって出てくる例っておかしいのばっかりじゃね? 道路で逆走している車から見て「車がみんな逆走しているぞ」って言っている感じか そう言えばこの命令が欲しいときってプログレスバーで進捗状況も更新して欲しいときが99.89%なんだけど
結局while+sleepのが綺麗に書けることが多くて使ってないな 正しい使い方を知らないのにも関わらず悪手、なんてよくいい切れるなw
プログレスバーはIProgress使うだけでじゃん 「非同期メソッドは、asyncがついた関数内からしか呼べない。」みたいなことが書いてある嘘ブログが結構あるからな
例の大量書き込みの人は、そう言うのを書いてる人か、それかそう言うのを読んで真に受けてる人なんだろう プログレスバーなんて、簡単に動かないだろ。
マルチスレッドなのに、素人ができるわけない
非同期と同じ。
コンテキスト・文脈が異なるから、特別な書き方をしないと動かない 別にasync/awaitがなかった時代でも
GUI操作のときだけForm.Invoke()すればよかっただけじゃない
Rubyジジイは老害みたいなこと言ってるわりにいにしえの当たり前のスキルすら持ち合わせてない >>814
C#でマルチスレッドじゃないと動かないプログレスバーなんか存在しないからコンテキスト・文脈が異なるスレに帰れ >>789
ありがとうございます。
大雑把に言えば、await以下の同関数内のコードは内部的にはコールバック化されるという理解で良いんでしょうか?
そして待機せずに同関数から抜けるため固まらないと UnityのC#にTaskが無いのは何故なんです? C++では、クラスの宣言とメソッドを別々にかけるじゃないですか
class A{
int get();
};
int A:get()
{
}
みたいに。C#でも同様な書き方は出来ますか? JavaScript で言えば、await は、非同期・async を、同期的に書けるもの
例えば、処理A, B, C があり、
Bが非同期なら、コンテキスト・文脈が異なるから、
A, C, B の順番で実行される
await を付けると、下へ行かない。
同期処理と同じ、A, B, C の順番になる
面倒な非同期処理を、同期処理のように、上から書いた順番通りに実行される
漏れは、C# のawait は知らないから、自分で調べて >>821
C#のawait知らないならC#のスレに得意げに書き込むなよ知障 99% から 100% になるのに 3日かかるんですね判ります >>825
いや、すぐ100%になるよ
その後の
更新したファイルのチェックをしています
に時間かかるけど C#のよりよい書き方を教えてくれるチェッカーってありますか?
シェルスクリプトだとshellcheckみたいなの >>825
単調増加するとも限らない
途中で減るプログレスバーとかあるで システム更新系のでそんなのがあった気がしたねw
まあ、処理時間ベースの進捗度なんて出すのはどうせ難しいんだから
フリーズしてる不安だけ感じさせないようにしてくれれば十分だよね。
VS2005の時代のイメージライブラリーにナイトライダーのあれみたいな
gifアニメがあったけどああいうのでいいと思う
10段階の処理のnフェーズ目を処理中、みたいな表示はあってもいいかもしれんが
スレ違いなのでこの辺で 確かにファイルのダウンローダー系のは残り時間表示が減ったり増えたりするな .NET5っていつから正式版使えるの?
俺の中の作りたいプログラムキューが結構溜まってきてるんだけど >>833
ファイルがたくさんあるときは、一つのデータに固めて送れば変な変化しないと思う >>835
GAという表現は使ってないね。まだRC1だけどGo Liveライセンス有り。 C#でアプリケーションを作ってVisualStudioInstallerをSetupファイルを作ってインストーラーを使ってます
アプリで参照しているdllのバージョンが上がってSetupファイルをビルドして再配布しようとしているんですが
どうも配布先で実行しても該当のdllだけ差し替わらないのです
VisualStudioInstallerの方では該当のdllを参照しているバージョンはプロパティで確認しても最新ですが
同名dllの該当ファイルはアップデート後も書き換わらず上書きされない状態です
何か解決方法ありますでしょうか? 補足です
配布先で、一旦アンインストールしてSetupを実行する限りは
新しいバージョンのdllが入り問題なく動作しています >>839
該当のdllがファイルバージョンを上げ忘れてると思われる
msiは対象のファイルのバージョンが上がっていないと上書きしない余計な仕様があって、これに引っかかる(無視する設定は無いはず)
まずはdllファイルのプロパティからバージョン情報を確認して、新旧で変わっていないようなら配布元に更新をお願いするしかない >>841
レスありがとうございます
該当のdllのプロパティを除くと、製品バージョンは確かに新しいものですが
ファイルバージョンが1.0.0.0と触ってないような値です
おっしゃられるmsiがチェックするのは、このファイルバージョンという理解であっていますか?
そのメーカーさんが最近nugetでアップデートを配布するようになって
アップデートする度に配布先でバージョン不一致のトラブルで悩まされてるのですが
もしかしてこのせいなのかな・・・ 窓から投げ捨てろ
嫌ならGUID再発行して見るべし >>843
一応、仮想環境入れてやっておりまして、そこで調べていてdllのバージョンが変わってないのに気づいた次第です
>>841
同メーカーの別のアップデートされているdllのプロパティを見たら
ちゃんとファイルバージョンも製品バージョンと一致させて更新されていました
トラブルが起きたdllはファイルバージョン入れ忘れの可能性が高そうなので
メーカーさんに問い合わせてみます >>845
少し訂正
解決方法としては、REINSTALLMODEプロパティ※を変更する方法もあるそうだ
※VisualStudioInstallerのプロパティではない
結構手間がかかるみたいだから、dllを修正して貰うのが一番だと思うけど一応 どぼんさんのとこにREINSTALLMODEを設定する方法が書いてあるので
これが一番簡単だね
http://dobon.net/vb/dotnet/deployment/overwrite.html
これはどぼんさんのところには記事がないと思うが、
MSIのプロパティは外部ツールで手動でやらなくてもPostBuildEventで
自動的に変更する方法があって、ググれば出てくると思う。
しかしMSIってそんな仕様があったんかw
っていうかもうVS10年ぐらい使ってないんだけど
今MSの推奨するインストーラーって何なの?
MSIは廃止されるはずだったよね? >>847
そんなに単純じゃないからちゃんと調べて アドバイスありがとうございます
とりあえずメーカーさんには問い合わせをだしつつ
簡単そうなOrcaを使ってamusにし、強制的にdllを上書きするようにしてうまくいきました
今回分は手動でmsi書き換え対応、あとはメーカーさんの対応待ちというところでひとまず解決です
ご教授いただき感謝です ボタンクリックでpingを並列処理(guiでparallel.for)させてるのですが、並列処理が終わった後に何らかの処理をさせたいのですが、終わる前にさせたい処理が始まってしまうのは何故でしょう? >>854
すいません、結果表示の所でデリゲートしてました。
デリゲートしてたら抜かされるんですね。 やってること、機能の理解、用語の理解、みんなめちゃくちゃすぎて、まるでQiitaをみている気分だ class myDAT {
public int no;
public double[] data = new double[5];
}
public static void Main(string[] args) {
myDAT[] mydata = new myDAT[10]; //★
for (int i = 0; i < 10; i++){
mydata[i] = new myDAT();
}
クラスを配列にしたとき★の箇所の"myDAT[10]"を10固定じゃなく動的にしたいのですが
どうすればよいですか? 最初[10]と宣言した後、[20]とかには・・・・変更できますか?
っと追加で質問してもいいですか? >>861
普通の配列は固定長
可変長の配列が欲しいならList< T > >>856
スマヌ…足を突っ込んだばかりで良く分からずに始めたもので…別スレ案件でしたか… >>858
static void Main(string[] args)
{
const int defaultCount = 10;
var count = defaultCount;
for (int i = 0; i < args.Length - 1; i++)
{
var arg = args[i];
if(arg == "-n" || arg == "/n")
if (int.TryParse(args[i + 1], out count)) break;
}
var chars = new char[count];
for (int i = 0; i < count; i++) chars[i] = (char)('A' + i);
Console.WriteLine(new string(chars));
Console.ReadKey();
} 質問です
イベントは、購読する側が寿命が短い場合自分で登録解除しないと開放されず、リークするのは分かるのですが、
イベントを発生させる側が寿命が短い場合はそのインスタンスをフィールドで持っておかないと
購読されていても途中で開放されてしまうのでしょうか
その場合、例えばコンストラクタでイベントを発生させるオブジェクトを受け取って購読するだけのような処理(以下)
public class Subscriber {
public Subscriber(Publisher publisher) {
publisher.ValueChanged += Publisher_ValueChanged;
}
}
の場合、subscriberはpublisherを持っていないので、subscriberが生きている間にpublisherが開放されて購読も解除されるといったことは起こりますか?
これは設計が悪い? >>866
>subscriberはpublisherを持っていない
これが分かってるなら答えは自明でしょ
設計が悪いかどうかは何を実現したいか次第
でも普通は発行側の寿命を購読側に合わせたいことなんてあるのかなと思う。 >>867
ありがとうございます
UI(コントロール)のイベントを加工してロジックに伝えるアダプターのようなものを実現したいです
設計を見直してみます パラメータをPOSTしてウェブサイトのHTMLソースを取得しています。
POSTするデータが普通の配列形式の方法は以前から知っているのですが、JSON形式でPOSTするサイトに出くわしました。
いろいろなウェブサイトを見てPOST自体はエラーせずにできるようになったようなのですが、レスポンスもJSON形式のデータしか取得できずに困っています。
欲しいのはウェブサイトのHTMLソースです。
どうしたらいいでしょうか? var jsonParameter = new JavaScriptSerializer().Serialize(new
{
hoge1 = new
{
hoge2 = new
{
fuga1 = "0",
fuga2 = "1",
},
hoge3 = new
{
fuga3="3",
}
}
});
// リクエストの作成
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/json; charset=utf-8";
req.Accept = "application/json, text/plain, */*";
using (var streamWriter = new StreamWriter(req.GetRequestStream()))
{
streamWriter.Write(jsonParameter);
}
var httpResponse = (HttpWebResponse)req.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
string result = streamReader.ReadToEnd();
} curl, wget でも出来る。
Windows 10 なら、C:\Windows\System32\curl.exe
が入っている。
これは、PowerShell のcurl alias とは異なる
漏れは、VSCode の拡張機能、Rest Client を使ってる 5.0始めたけど new()の出番めっちゃ多いな
varよりnew()優先にするのがいいのかな Windows 10だけサポートしたいんですけど
.Netはどのバージョンからサポートしたらいいのでしょうか? 二つの配列A,Bがあり、Bに入っていない要素がAにある場合の処理はどのようにすればいいでしょうか?
やりたい事は、テキストファイルから一行ずつBに読み込んで格納し、なんらかの結果の配列Aとの照らし合わせを行いたいのですが、なかなか上手くいかず… >>880
>>881
ありがとうございます!こちらを元に調べてみます! C#で構築したORACLEを更新しているシステムがあるのですが、
入力時にタイムアウトするのを防ぐ、もしくは入力を促すような
仕組みを作るにはどうすればいいでしょうか。 一般的な対策はありますか?
ユーザーに処理を放置せず、すぐ完了させてくれとかいうしかないですか?
自分はプログラマーでもないので詳しくなてすみません。 入力時にタイムアウト、ってなんでそうなるの?
入力を促されていることにユーザーが気がつかないのか、ユーザーがいい加減でほっとく人が多いのか。
前者なら、
・画面以外でユーザーに入力を促す仕組みを作る
- 決まった音を鳴らしてみる
- メール等で通知してみる
・ユーザーの入力が遅いのであれば、入力を保存してタイムアウト後に画面を開く?などした際にも前回の入力値を復元してあげて二度手間を減らしてあげる
後者なら、
・教育する
などがあるんじゃないかと思うんだけど、エスパーはたいてい外れるので、もうちょっと状況を整理してから聞いてみるのがいいんじゃないかと。 ありがとうございます。
>ユーザーの入力が遅いのであれば、入力を保存して
ローカル環境に入力途中のデータを保存するようにしてもらうという意味でしょうか バックグラウンドで定期的に無意味なselectクエリを発行すればいいよ ヘルメット開発しろ
早く入力しないと高圧電流が流れる仕組みだ - 照明を落として赤いパトランプ点灯
- SF映画で自爆装置が作動した時みたいな警報音を鳴らす
- 当然プシューという音とともにスモークを噴出させることも忘れずに そもそも何がタイムアウトしてるんだ?
真面目な話はそれからだ
まあ、設計が悪いと思うけど コネクション開きっぱなしでユーザーにフォーム入力求めてると予想。 >> 894
それっぽい場合はどのように処理をすればいいのでしょうか 1.My.settingというものに書き込んでおけば呼び出すことが出来る
2.テーブルからデータをSELECTして画面に表示したら、Oracleとの接続を切って
画面の更新ボタンを押す際にOracleと接続すれば、タイムアウトすることはない
1.2.のような理解で正しいでしょうか。 1.My.settingというものに書き込んでおけば呼び出すことが出来る
2.テーブルからデータをSELECTして画面に表示したら、Oracleとの接続を切って
画面の更新ボタンを押す際にOracleと接続すれば、タイムアウトすることはない
1.2.のような理解で正しいでしょうか。 何のタイムアウトか分からない
何でタイムアウトしてるのか分からない
この状態でどうすればいいか話しても無駄なので
まず上の2つを明らかにしないと >>897
1.はとりあえず関係ない
2.は改善する可能性はある
Oracleとの接続ってコネクション開いてるだけでもタイムアウトするのか?
タイムアウトしたといってる状況とエラーメッセージとか晒せ そもそも、なんで「プログラマーじゃない」って言っている ID:n+WfHqnB が改善案を求めているのかが謎 職業的なプログラマーじゃないけどちょっとは齧ってるからやらされてるって感じじゃなのかね データベースついでに教えて欲しいんだけどさ
内蔵のSQLiteって、あれって本家のSQLiteみたいにWALを吐かせることってできないの? 「なんか舐められてるからここらで一発英語連発しとくか」 データベースとの接続を、したり切ったりするようなものは、見たことない。
普通、ずっと接続してる
テストでは接続を切って、始めからやり直すけど
本番環境で接続処理をやり直していたら、遅くて話にならない。
ユーザー認証とか、接続の初期化処理から始めるわけだから >>907
それをやってないアプリケーションの可能性が高いよね 普通そこら辺アーケードゲームみたいに
カードをピッで暗所番号入力とか
銀行ATMとかもさ、入力遅かったら
カウントダウンで自動ログオフするんじゃないの? どんな普通か知らんけど、
MySQLにアクセスしてテーブルの中身を表示して変更するアプリを自作したときのことを、いろいろ思い出した。
データベースのユーザーidとパスワードがあるわけだけど、それはアプリのセッティングに保存できるけど
毎回アプリ起動時に入力する。
データベースにconnectして、ユーザー操作を待つ。selectやupdateが必要になったとき、そのsql文を実行する。
connectionがある間は何度でも繰り返すことができる。
アプリ終了時にはconnectionをcloseする。
何だけど、これだとconnectionが使われない時間が長くなると、接続が切れる。タイムアウトするというやつ。
なのでバックグラウンドでconnectionを維持する(もしタイムアウトしたら、次に必要な時に自動でopenするとか、タイムアウトしないように、ダミーで何かする)ライブラリ機能が大抵はある。
これをコネクションプールと言う。
件のアプリは、そのあたりに問題を抱えているのではないか。
最初からコネクションプールがうまく使えていないのか、データベースかライブラリのバージョンアップでタイムアウトの設定が変わったのか コネクションプーリングはタイムアウト対策じゃねえよ オープンしただけのアイドル状態のコネクションがタイムアウトするならプーリング関係ない
プールに戻さないでタイムアウトするんだからな
まず何がタイムアウトしてるのかはっきりさせんと話にならん
まあどうせトランザクション開始してからユーザ入力待ってるんだろうけど コネクションプールは、大量のアクセスに対して、事前に起動しておくもの
それで接続が速くなる 普通のWebアプリはリクエスト/レスポンスのたびに毎回コネクションopen/closeしてる
タイムアウトの件とは関係ないがコネクションプーリングは
DBサーバーを使う場合の基本なのでちゃんと押さえておいたほうがいいyo try~catch~finallyで質問です。
finallyを使うケース教えて下さい。 プログラム板のスレッドの中で記述されていて
catchブロックの中でreturn文などにより処理が
スレッドの呼び出し元へ戻ってしまう場合には
try文の次に記述されたレスは実行されません。
finallyブロックを使った場合はcatchブロックの中でreturn文などが実行された場合でも必ず実行されます。
(ただしSystem.exit(0)によってプログラムが終了した場合を除きます)。 finallyを使った記憶がないな
IDisposableを正しく実装してusingするのがC#流 async/awaitで排他制御やる時にSemaphoreを使うけど、開放する時にfinally使うのが一般的 >>920 は間違ってはいないだろ
偏ってるかも知れないが
using は構文糖衣 usingっていまいち分かってないんだけど、例外が起きたときにも破棄されるの? using変数宣言とref structで無駄なヒープ確保をせずにDisposeを呼べるようになったのは良いね
ネイティブ周りで重宝する ASP.Net Coreで使用しているデータベースを、他の種類のデータベースに移行する手段があれば教えてください
具体的には、SQLServer Expressから月500円の激安マネージドMariaDBに乗り換えたいんです >>928
やれるかどうかじゃない
やるかどうかだ 月500円の激安マネージドMariaDBに問い合わせろ MariaDBで動かして見て、どんな感じのテーブルが作られるか自分で確認して、手動で移行するしかないのかな? EFとか使ってれば差異はある程度吸収してくれるけど、
生SQLベッタベタに書いてたら厳しいだろうな まあ無理そうだけど、どうやるんかな
なんか手段が用意されてないんだったら難しいわ あまりに頭が悪そうでコメントすると泥沼化しそう
こんなの雇ってるクソ会社あるのか そのソフトはデータベースを変更できるように作られているのだろうか
多分なってないのでソースコードレベルで変更が必要なのではないだろうか Ruby on Rails では、sqlite, postgresql, mysql の3大DB を、
単一のRuby ファイルで定義できる
それを実行したら、各DB の型に合わせて、表が作られる。
表の型などを抽象化してる それだと最大公約数になるからDBのポテンシャルを発揮できない その代わり、個別のDB の特別な機能を使うと、可搬性が無くなる
どちらを選ぶか、難しい >>944
別言語だけど Railsでは、そういう実装になってて
C#でも同様の実装になっていればデータベースを替えるのも簡単
という話だとおもうけど、そのアプリがMS SQL ServerとMariaDBと
どっちでも動作するようになっているのなら、インストールし直せば
OKなんじゃないかな このruby荒らしは実際に使ったこともないただの頭の悪い人とバレたな >>946
インストールし直せばってなんじゃい
ORM使ってDBMSに依存したSQLを書いてなければ
設定変更でアプリの修正は終わるって話
それはRails(ActiveRecord)でもEF Coreでも同じ
データ移行は別途必要 将来的にやるかどうかもわからないRDB移行を楽にするためのものというよりは
システム管理者がバックエンドのストレージを選べるメリットのほうが価値としては大きい using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int[,] ma = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
int[,] mb = new int[,] { { 6, 3, 4 }, { 5, 1, 2 } };
int[,] mc = new int[2, 3];
for (int i = 0; i < 2; i++)
{
for (int j = 0; i < 3; j++)
mc[i, j] = ma[i, j] + mb[i, j];
}
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 3; j++)
Console.Write(string.Format("{000}", mc[i, j]));
}
}
}
}
System.IndexOutOfRangeException: 'Index was outside the bounds of the array.'
というエラーが起きます
配列のレンジをはみ出してはいないと思うのですが、どう直したらいいんでしょうか 2番目のforの条件式がjじゃなくてiになってるよ ありがとうございました..
全然気づかなかったです
勉強法がわからないんで手持ちのC言語の参考書の例題をC#で一つづつ書き直してるところです >>953
iとjの間違いじゃ?
×for (int j = 0; i < 3; j++)
○for (int j = 0; j < 3; j++)
やりたい事と合ってるかどうか知らんが
Console.Write(string.Format("{000}", mc[i, j]));
757968で、エラーなしで出力されます。 実行確認してたら亀レスだったorz
CとC#は別物では?新しく買い直した方が良いのでは? >>953
linqなら1ステップで行けそうだな。
ビバLINQ >>957
vs使ってないの?エラーの箇所すぐわかるじゃん 新・標準プログラマーズライブラリ なるほどなっとく C#入門
この本注文したんですがプライムデーで混んでるのか全然届かなくて。
年内にある程度使えるようになりたい >>961
今回エラーが出なかったんですよ
実行中に例外で止まるんですが止まる行が
mc[i, j] = ma[i, j] + mb[i, j];
の行でした >>964
馬鹿じゃないお前はRuby使ってろ
馬鹿 >>965
ID:kSQNYYOMの馬鹿さ加減がわからない馬鹿 >>962
本を読むよりDOBON.NETを読んだりしながら適当なツール自分で作った方が上達は早いぞ
そして掲示板で聞く前にVSのデバッガを使いこなしたり自分で何でもググって調べる癖をつけるようにした方がいい
ネットで質問するのはググって5分で見つかることを回答してもらうまでずっと待つということだから効率が悪すぎる 俺は本「も」読むのがいいと思う
ネットの情報でつまみ食いばかりしてると
流れが身につかなくて何も作れないままってなる鈍臭いやつもいるから
そうでない才気あふれる人間なら何やっててもすごくなるけど ネットの情報は新旧入り乱れてるからことが多いから前提となる知識のない初心者は混乱しがち >>962
注文した後に言うのもアレだが、C#は各言語の中で最も日本語WEBサイトが充実してるから本は不要なんだけどな
上でも言われてるDOBON.NETやufcpp.netの2サイトだけで上級者レベルまで学べる そうかなあ
今時はC#も主流はWeb開発なわけだけど、ASP.NET Coreを学べる日本語のサイトなんてMS公式以外にはほとんど無いぞ 今の.NET界隈はMSが米で主流な内製開発の軽いノリに迎合しすぎて、もはやジャップSIには全く適さない代物になってしまってる そもそもmsのドキュメントの機械翻訳のレベルが低すぎるっていう 昔と違って今は何でもかんでも日本語訳される時代じゃないからね
英語で読めない人は取り残されるだけ >>978
「昔と違って今は何でもかんでも日本語訳される時代じゃない」
まるで昔は何でも日本語訳されていたかのような スキあればマウンティング。
オートマウンティングデーモンか switch文も式になるけど、何でもかんでも式になる方がいいことなのか? いいかどうかはともかく流行りではある
ついていけないなら引退するしかない 昔のVBVCは単語でF1押せばとりあえず日本語ヘルプが出てきた
ここでも国力の低下を実感するよね >>981
副作用のないコードを書くのが少しでも楽になるならいいことだ 人手で翻訳したバージョンが提供されたのは確かVS2010の時代が最後じゃなかったかな。
どっちにしろ別に最近の話じゃないね。
日本の国力というよりMSの経営方針が変わったんだろうね。
知らんけどたぶんバルマーさんの発言力がその頃弱くなったんじゃないか
いわゆる"as is"でいいから手動翻訳された古いバージョンも読めるようにしておいてくれればいいのにね。
別に英語でも読めるけど日本語の方がやっぱり早く読めるし斜め読みもしやすいよね >>983
if分みたいにcase毎にアウトラインを畳めればなあ(visual studio) >>978
昔と違って翻訳精度上がってるからね
Chrome右クリして翻訳ポチれば良いだけ >>990
おいおいマジで言ってるのかw
フレーム問題とか知らないのかな サイトに訪問した人が翻訳結果が可笑しいと思ったら
その場で治せる仕組みが一時期あったやろ?
あれでかえってめちゃくちゃになってたところもあるんやで コミュニティー何とかって奴ね
わんくまの人たちとか結構頑張ってたね
あれはWikipediaみたいに直接編集できるんじゃなくてコメントを書けるだけじゃなかったかな 日本語と英語が交互に表示されてるのに
コメント欄が英語の上にかぶさって
肝心な英語が読めない機能付きで
うざかった希ガス 英語読めるようになったほうがいい
それですべて解決する マイクソが無料でエンジニア用英語読解講習コースを開けば解決 \ __ /
_ (m) _ ピコーン
|ミ|
/ `´ \ 言語解説に特化した言語を開発すれば・・・・!
( ゚∀゚)
ノヽノ |
< < このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 674日 23時間 27分 52秒 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php レス数が1000を超えています。これ以上書き込みはできません。