ふらっと C#,C♯,C#(初心者用) Part134
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part133
http://mevius.5ch.net/test/read.cgi/tech/1510056685/
■関連スレ
C#, C♯, C#相談室 Part95
http://mevius.5ch.net/test/read.cgi/tech/1508180530/
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■情報源
https://msdn.microsoft.com/ja-jp/library/gg145045.aspx
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://msdn.microsoft.com/en-us/library/gg145045.aspx
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:----: EXT was configured 最近のMSのドキュメントはほんと不親切だよな。
幸運なことGDI+は不親切になる前に開発されたものだから、ググればMSも含めて大量にドキュメントが残ってる。 ググってみた。
Application.SetCompatibleTextRenderingDefault(false);
というのが設定されるようになっていて、GDI+は糞だからGDIを使いなさいってことらしい。w よく鉛筆5本とか言うけど、Win16ではDCは同時に使用できるのは5つまでだった。
だからDC取得したらその関数内ですぐ開放するのが当たり前だった。 c#の{ }って中身が1文の場合、省略できるものとできないものってどうやって決まってるんでしょうか?
namespace、class、
for、switch、while、try、checked、fixed、unsafeなど PictureBoxのMouseMoveイベントハンドラ内にInvalidate()を入れるとTimerのTickが止まります。何故ですか?
https://ideone.com/fWNMPP コード見てないけど
そんな暴れん坊見たいことはしないほうがいいと思う マウスの位置をフィールドに入れて間隔の短いタイマーで描画しますか? すみません質問です。
C#でエクセルを複数起動させるプログラムを書いているのですが、解決できない問題があります。
例えば既にa.xlsxが開かれていて、追加で3つのエクセルファイル(b.xlsx, c.xlsx, d.xltm)を立ち上げるとします。
その場合、process.start("excel", "b.xlsx c.xlsx d.xltm");
とすると、a~dまでが一つのプロセスにまとまるのはいいのですが、テンプレートが編集モードで開いてしまいます。
仕方ないので、
process.start("excel", "b.xlsx c.xlsx");
process.start("d.xltm");
とテンプレートだけ"excel"を抜いて起動すると、ちゃんとテンプレートは新規ファイルで開かれますが、プロセスが3つに分かれてしまいます・・[a.xlsx], [b.xlsx, c.xlsx], [d1]
(何故かa.xlsxまで孤立しちゃうんですよね・・・)
色々試したところ、
process.start("excel", "b.xlsx c.xlsx");を実行して一度処理を終了させた後(この時点ではa~cが一つのプロセスになっている)、
また起動し直しでprocess.start("d.xltm");を単独実行させると、a~cと同じプロセスにdが加わってくれました。
であれば、全部起動完了待ちすればうまくいくか?と思って、
Process p = new Process();
p.StartInfo.FileName = "excel";
p.StartInfo.Arguments = "b.xlsx c.xlsx";
p.Start();
p.WaitForInputIdle();
p.StartInfo.FileName = "d.xltm";
p.Start();
と、インスタンスを作ってからp.WaitForInputIdle();を加えたうえで実行させると、
プロセスは3つじゃなく今度は2つにまとまりましたが、一つになってくれませんでした・・。
[a.xlsx, b.xlsx, c.xlsx], [d1]
という具合で、何れにせよテンプレートだけプロセスが分かれちゃいます。
色々試しましたが、テンプレートファイル含む複数のエクセルファイルを、テンプレートファイルは新規ファイルとして開きつつ、全て一つのプロセスとして起動させる方法が分かりませんでした・・
方法があれば教えてくださいお願いいたします(m_m) 712です。
p.WaitForInputIdle();
の後に、System.Threading.Thread.Sleep(1000);
を強引に追加したら上手くいきました・・。
(うまくいったというのはつまり、
a.xlsxだけが最初に開いてあって、
b.xlsx, c.xlsx, d.xltmをC#で開いた時、a~dまで一つのプロセスにまとまり、
d.xltmも新規ファイルで開いてくれたという事です)
でもこれ、絶対正規の解決方法じゃないですよね?
きっともっといい方法ありますよね?・・
ご教授下さい。お願いいたします。 >>713
システムハングアウトなめんな。
スリープは大事。 >>715
オートメーションってつまり、コムオブジェクト使うって事ですかね?
ちょっと調べてみます。
>>716
スリープも効果的に使えば立派なコードですかね!
ミリ秒時間の調整行って、確実に上手くいく範囲で秒数縮めてみようかと思います。
もっといい方法見つかればそれで実装しますが、それまでスリープで対応しようかと思います。
有難うございました。 Form1のデータから、Form2を呼び起こして、
Form2のPrintDocument1_PrintPageを印刷しています。
Form2を閉じて、2回目にForm1から別のデータを印刷すると、
DrawStringで印刷したデータが重複してしまいます。
PrintDocument1_PrintPageを初期化するような方法はないでしょうか? getcommandlineargs()で引数を渡すと
スペースとダブルクォーテーションが消えてしまいますがどうすればいいですか?
大文字にしても消えます >>719
ダブルクォーテーションは""に置き換える
スペースの入った文はダブルクォーテーションで囲む >>708
ありがとう
自分でやってみた結果
埋め込みステートメントができるのは
do,if,else,fixed,for,foreach,lock,using,while
だった pictureBoxに線を引いたり色々描画した後に指定位置のピクセルの値を取得する方法はありますか?
CopyFromScreen?を使うしかないですか? (12345).ToString("D8") = "00012345"
だけど、” 12345"にする方法はないのか? >>726
0を半角スペースにしたいならPadLeft(桁数)でいいんじゃね なるほど
" 123"
" 123.0"
" 123.00"
~
みたいなのをformat登録しておいて一括処理したいんだが,,,,
PadLeftをつかうには、独自フォーマットを作って解析して分解するひつようがあるな。
"8,D","12,F1","10,F2","10,F3","8,D"
これをSplitで分解して桁と表示にわけるとできる。みんなこんなことをやってるんだろうか? 設計ミスだな
出力の幅なんて最終的な出力の段階で自ずと決まるもんだろ
普通そんなもん必要ない 文字列は空白埋めできたような
Formatを2回する
あるいはカスタムフォーマッタを作成 String.Format("{0,8:d}", 12345); >設計ミスだな
ToStringとString.Formatでいちいち仕様を変えるなんざ設計ミスもいいとこだ。 $"{12345,8} 6.0になってからString.Formatを使わなくなったな >>734
残念。VS2013ではそのスタイルは動かんな。 最新のVSって毎週バージョンが上がってて、アップデートしたら突然ビルドが通らなくなったりとか時々あるんだよね
自社開発でパパっと対応できる体制の開発が前提になってて、もうジャパニーズドカタには手を出せない代物 質問者が何言ってるのか俺にはさっぱりわからんけどみんなよく分かるなw 俺も正しい意味はわからないけど憶測で判断してる
文章も書けないくらい幼稚だけど偉そうなレスしてるとだけわかる >>728
これが特に意味不明だけど考えてわかるレベル
>>735
これが偉そう List<string> a = new List<string> {
"x3" ,
"x4" ,
"x5" ,
"x6" ,
"x7" ,
"x8" ,
};
foreach (string el in a)
{
combox1.Items.Add(el);
}
combox1の初期化ってこんな方法しかないのか? 直接は初期化できんのか? >>236
ちゃうちゃう、$” { valuえ} ”の記述はVs2017しかサポートしとらん。 int w = (int)((double)pic.Width / (double)(1 + x ) / 1.3);
doubleとintを混在するときにdoubleに自動的に型推論する機構ってないの?
いちいちキャストするのはメンドクサイよな。 >>748
int w = (int)(pic.Width / (1.0 + x ) / 1.3);
でいけるはず Fontをファイルに保存したい。この場合name,style,sizeに分解して保存するのだろうか?
他に何かいい方法は? >>751
多分VSのアプリケーション設定のところでシリアライズして保存できるようにできる >>751
もう少し意味が通じるようにまとめろよ
Font.Familyname:string
FontStyle:int
FontSize:float(single) これな
https://i.imgur.com/ZyRzEn7.png
これで保存
Properties.Settings.Default.*** = font;
Properties.Settings.Default.Save();
これで読み出し
var font = Properties.Settings.Default.***;
ユーザーのアプリケーションデータフォルダの中にxmlで保存されるようになってる var conv = TypeDescriptor.GetConverter(typeof(Font));
var text = conv.ConvertToString(font);
font = (Font)conv.ConvertFromString(text); それがあるのは知っていたけど、Settingsってそんなふうに使うのか。初めて知った。
便利そう。ありがとう。
前に設定してみたけど、ビルドすると直ぐに消えてしまうので、どうやって使うのか
わからなかった。 Properties.Settings.Default.DispFont = lblFont.Font ;
エラー 1 プロパティまたはインデクサー 'Properties.Settings.DispFont' は読み取り専用なので、割り当てることはできません。
フォントはリードオンリーになるので設定は無理ぽい。 >>761
スコープのところをアプリケーションにしたのが間違いだった。ユーザーにしたら
いけた。
でも暫くやって意味がわからなかったので結局はJson.netを使って保存した。
クラスをそのままシリアライズしたらFontもなにもかも一切合切勝手にシリアライズ
してくれた。W
これは分かりやすい。一発でわかった。 class 年齢 {
public string 名前{ get; set; }
public int 年齢{ get; set; }
}
List<年齢> 年齢リスト = new List<年齢>();
このような年齢型の年齢リストがあったとして、
年齢が21のリストだけを抽出したい場合、ラムダ式ではどのように書けば良いのでしょうか? list.FindAll(x=>x.年齢==21) >>765
ありがとうございます。明日試してみます! 配列の要素すべてが0もしくは1000でなかったらという論理式を書きたいのですが で、っていう
その文章、「でない」がどう掛かるのかあいまいで二通りの解釈が可能だから、
解釈の余地がなくなる別の表現を工夫した方がいいと思うよ >>770
arr.All(x=>x!=0&&x!=1000) >>771
ドキュメントでよくあるよなこれ
この種のミスをする奴は何度注意しても直らないんだよ ねえわwリアルでもこんなアスペばかりで困るけどなw arr.All(x=>!(x==0||x==1000))
!arr.All(x=>x==0||x==1000) 日本語で書くから間違える
最初からコード書けばいいのにね >>775
お前の読解力が絶望的だってのはわかった >>777
なるほど、つまり>>770は、
arr.All(x=>!(x==0||x==1000))
を書きたいのですが
もしくは、
!arr.All(x=>x==0||x==1000)
を書きたいのですが
と質問すべきだったと。
確かにこれなら解釈が割れる心配ないね! >>689
どーせ、CreateCompatibleDCみたいな話 初心者だからわからないんだろうけど
そういうリソース系は数量をチェックしても無駄だよ
チェックした時点で大丈夫かもしれないけど
使うとき限界に達してるかもしれない
どこも保証しない
実行して失敗なら失敗 鉛筆の数をチェックしてあまり1本あっても自分が使うまでのわずかな間に
別のアプリがその鉛筆を使うと自分は使えない いきなり鉛筆をつかもうとする
つかめなかったらwindowsは異常な事態になってるので回復は不能
アプリを落とす
自分で鉛筆を使ってる場合使わなくなったら即座に開放
たったこれだけ c♯固有の話では無いですがインターフェースのファイルとクラスのファイルは一般的に同じフォルダに入れてるのでしょうか?
インターフェース用フォルダ、抽象クラス用フォルダ、クラス用フォルダと分けた方が見やすいとかあるのかなと思いまして c#固有じゃないとは言い切れない
ご自由にというか
その時のルールがあるならそれに従えばいい
c#はjavaのようにフォルダ構造が名前空間じゃないから >>788
普通は名前空間に合わせる
ソースにオリジナリティを出すな >>790
なるほど名前空間で別けるのですね
独学初心者には思いもつきませんでした
参考になります いや、それは単にVSがそういう前提で作ってある(ソリューションエクスプローラから
新規にファイルを作った時のスケルトンの名前空間がプロジェクトの規定の名前空間に
フォルダ階層がくっついたものになる)ってだけの話で、別に必要なら単に分類のために
フォルダ作ってもいいと思うよw
そんなケースはあんまりないとは思うけど そういう前提には作ってないよ
設定があってチェック外せばどのフォルダで作っても同じ名前空間になる >>798
最大で140℃くらいまでしか開かないので、コピー機に入りません(>_<) >>783
昔、GDI+とMFC or Win32APIから.netに移行する表とその説明があったけど、検索で調べきれないわ。
さかのぼると、WM_PAINT, BeginPaintとか古典的な描画APIとかの話になるから
今、ディスプレイドライバーのソースを見てるけど、なかなか説明が難しいわ
ごめんなさいね ■ このスレッドは過去ログ倉庫に格納されています