ふらっと C#,C♯,C#(初心者用) Part140
■ このスレッドは過去ログ倉庫に格納されています
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part93
https://mevius.5ch.net/test/read.cgi/tech/1492818720/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part139
https://mevius.5ch.net/test/read.cgi/tech/1533466544/
■コードを貼る場合は↓を使いましょう。
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 >>121
全部クソ
なんでキューに入れんねん
キューに積む形のログ出力ライブラリは全部クソ
ログアウト id223しました
ログイン id223しました
ってアホかw どのログ出力ライブラリの話をしているかは知らないが
キューで実装されているならログ順序は保証されるだろうに
もしくはスレッドセーフでないライブラリを複数スレッドから触っているか >>123
え?スレッド間で?
お前ちょっとだけ頭使ってレスしろよ >>123
情報が小出しかつ不明瞭だからエスパーしているが
複数スレッドからログ出力する場合の順序が未保証だからじゃないか
それがログ出力ライブラリとして妥当かどうかは更に別の話になるが
キューに積む積まない問わず、いいログ出力ライブラリって何がある? 最近だとSerilogかな
ファッキンビチグソlog4jのパクリ系じゃないからシンプルで使いやすいし、
後でログの解析が非常に容易 私たち日本人の、日本国憲法を改正しましょう。
総ム省の、『憲法改正國民投票法』、でググって
みてください。拡散も含め、お願い致します。 log4系はネット上に情報が沢山あるのと
自分が溜め込んだ資産が沢山あるからつい使いまわしちゃうな
仕様は確かにファッキンだが >>128
使い方間違えててマルチスレッドモードになってない率95%のlog4さんじゃないですか GUIアプリケーションでのawaitについて教えてほしいんだけどさあ
↓この処理をボタン等のイベントから実行した場合、JklあるいはAsdfasyncが終了したかどうかってどうやってメインスレッドから取得するものなの?
async Task Asdfasync(){
await Jkl();//終わるまで画面をロックさせたくないが、これが終わっていない段階で他のボタンを押されると困る
} それが使えるのならありがたいけど、ボタンのイベントから呼び出されたメソッドの戻り値って取得できるものなの? 素直ににawaitの前後でボタンをDisable/Enableではあかんの?
そもそもそのためのawaitでしょう。
もちろん、常にそうできるわけじゃない(JKが終わったからって無条件でボタンをEnableに
できないような要件もありうるから)だろうけどほとんどの場合はそれでいいでしょ await は非同期処理を、同期的に書けるもの
await で検索すれば? >>133
そのAsdfasyncとやらは直接イベントに接続せずに
別のイベントハンドラから自分で呼び出すんやろ? 先に云っとく、良いソースじゃない。
こういう雰囲気?
Formにボタンを2つつけて動かしてみて
private Task __results;
private void button1_Click(object sender, EventArgs e)
{
if ((null == __results) || (__results.IsCompleted))
{
System.Diagnostics.Debug.WriteLine("Pass");
__results = Task.Run(() =>
{
this.Invoke(new Action
(() =>
{
button2.Enabled = false;
}
));
Task.Delay(5000).Wait();
this.Invoke(new Action
(() =>
{
button2.Enabled = true;
}
));
});
}
else
{
System.Diagnostics.Debug.WriteLine("Fail");
}
} ごめんなさい。
たぶん、全然検討違いだな。
スレ汚しごめん コンボボックスが20個。
エクセルシート2の指定列の内容を各コンボボックスに入れる。
※cbo1には4列目、cbo2には10列目などバラバラ。
closedExcel?で読み込んで入れたんですけど、うまい作り方を教えてください。
Clsdata.CboAdd(this,tarPath,tarShtname,”4”,cbo1)
みたいに引数違いを20個書き、別クラスに追加するコード書いたんですけど、データだけ取ってきてクラスじゃなくフォームの方に書いた方が分かりやすいですかね?
別フォームでもコンボボックスに同じように追加するのがあるので使い回してるんですけど...
説明下手で申し訳ないですが、ご教授下さい。 >>139
ワークシートを操作するクラスを作って、そこに列のデータをobject[]かstring[]で返すメソッドを書く
public object[] GetColData(int col) { ... }
それをコンボボックスにセットするコードはForm側に書く。
コンボボックスを引数で渡すような馬鹿なことはしちゃだめ >>139
1クラスでlist<string>を作る
シート番号、セル開始行、列、セルの終わりを入れる
combobox1.items.AddRange( )で
2 コンボボックスをList化しておく
コンボボックス番号を入れるとitemsにかえしてくれるクラスにする
3 エクセルにコンボボックス番号、シート番号、セル範囲をかいておく
それをコンボボックスのアイテムに入れてくれるクラスを作る
エクセルをいじるだけでコンボボックスのデータができる
こんな感じかな? C#やってきたけどjava土方のが仕事あって羨ましい
シンタクスは似てるけど採用側はjava経験者しか見ないし
最初の開発重要だな >>142
Javaは絶対やっといたほうがいいよ。
c#perであれば2日で基本はマスターできるよ。c#と違ってawt,swing,fxは全部使い物にならないからパスでいい。
後はspringframeworkぐらい理解しといたら間違いなし。
Javaは21世紀のCOBOLなんだからあと30年はやっていける。 ユニットテストやらリファクタリングやらデザインパターンの本は大抵Javaで例示してあるからそっち勉強するならJava知ってて損はないな いや、そもそもJavaの案件なんかやらない
やれって言われてもやらない へーJava勉強してみようかなー
ってJavaとJava Scriptの違いをさっき調べて知ったくらいだけどwww ババ引いてくれる底辺労働者一人確保出来て良かったね まずこの本で、オブジェクト指向を学ぶのが、Java の定番!
スッキリわかる Java入門 第2版、2014 >>140
>>141
ありがとうございます。やっぱコンボボックスの引数はよろしくないですよね。
内容を取ってくるコードって一回で読み取る事は出来ますか?上から繰り返しで配列に入れるんですかね? ずっとC# + Windows FormsでGUIやってたけど、C++とWin32API使い始めたら、めっちゃ高速でびっくりだよ。
GIUI使いたい人はC#なんて捨てちまえ。 >>151
できる
コンボボックスを配列化する
シート名 列番号をエクセルにデータで書いておいて
あとはforで繰り返す >>152
このスレC++,MFC,ATL,COM+を経て、C#のやつも結構おるだろ 個人で作るならだけど、納期に間に合わせる。
バグ作って責任取らされる。
そう言うリスクから離れたいから、仕事じゃ使いたく無いな。
いあ、もう辞めたけど。 リアルタイム通信系なら少しでも高速化するのは理屈通ってるけど
そうでないのなら安定感捨ててまでコンマの差を取るかというと……
って印象であってる? 一般的にはその認識は間違ってる
納期の制約があるなら最初の開発段階での最適化は結果的にアプリケーションのパフォーマンスや品質を下げる原因になることが多い
一度組み上げてから余った時間で最適化やバグ取りをした方が品質はほぼ間違いなく高くなる .NETの黎明期から耳タコのはずだけど、そもそも大半のケースは
起動の遅さをパフォーマンスの悪さと錯覚されてるだけw
>>151
プログラムはシンプルに。
何を言ってるのかよく分からないけど、複数の列のデータを一度に返すメソッドを書きたい、
と言ってるなら、そんなことは出来てもやらない方が吉。
そんなのは多分可読性を下げるだけ。
ベタに、
ComboBox1.Items.AddRange(xlSheet.GetColData(5));
ComboBox2.Items.AddRange(xlSheet.GetColData(1));
ComboBox3.Items.AddRange(xlSheet.GetColData(9));
...
こう書いた方がぱっと見て何やってるかわかるでしょ。
こういう羅列がどうしても許せないならTagに対応する列の番号を入れておく方法もあるが、
個人的にはお勧めしないなあ >>152
確かにめっちゃ高速なんだが保守要員の確保はどうなんだ? App.configを使わずにサブフォルダからDLLを読み込むようにしたいのですがどうしたらいいですか? >>155
MSC+SDKでC言語の頃からやってる >>162
「C# pathを通す」で検索してトップに出てくる記事の方法でたぶん出来ると思う closedXMLで指定された列の空以外の最終行のnumberの取得のコードってないですか? >>162
AppDomain.CurrentDomain.AssemblyResolve >>163
Windows3.1かな?
既にMFCは出てたはずだけどCのほうが慣れてる(て言うかC++はわけワカメな)ので最初はC+SDKのパターンもあったとか聞いたことある ジジイばかりじゃねーかw
って俺も孫が先月産まれた訳だがw DataGridViewは便利だけどデータの絞込とか実装できないんよねぇ・・・ >>168
MFC(VC)以前のWindows3.0から >>169
今更何を言ってるんだよ w
掲示板と言うメディア自体が爺しかいなくなってる 今の若者は顕示欲が強いく批判もされたくないから実名でブログの方が理にかなってるのだろう >>172
おお、Windows3.0を使ってた人なんて初めて見たわ
3.1から使い始めた俺はまだまだ若造なんだな w ⒊0は日本じゃ売られなかったって誰か教えてやれよ。。。 悪かったよ。
B何てあったんか。
PC98懐かし過ぎて二度見したわw >>174
そう言うのもあるだろうけど、俺等の世代はテキスト主体だったけど今の若い奴等は画像メインって言うのが大きい気がする
俺だけかも知れないけど640KBでやりくりして56Kbpsがスゲーって言ってた世代の記憶は一生消えないと思う Task.Delay()の時間設定ってかなりテキトーですか?
0と1msがあまりにも差がありすぎる気がス >>180
そりゃ「"最小***ms以降"で目を覚まして」ぐらいの意味だからねそれ
1ms単位できっちりスレッド切り替えを保証できるOSでは無いのだ
状況次第だけどMMCSSやtimeBeginPeriod(非推奨)を設定すればある程度改善できる場合もある >>181
そうなのか
正確に測ったわけじゃないけど1msに設定しても
体感的に10msくらい止まってる気がする
短い停止はThread.Sleepのほうがレスポンス速いな
でもこっちは長くするとデッドロック?しちゃう
でTass.Delayにしてみたんだけど・・・
あちらを立てればこちらが立たずだな 10ms ぐらいだろ
組み込みみたいな、リアルタイムOS じゃないから >>179
DOS=HIGH
これも未だに覚えてるわ
オフセットとセグメントというめんどくさいもののおかげで
+64K-36バイト余分があるという 絶対パスなら(先頭に¥マークを含む)相対パスに変換するって処理って何か関数あるかな? 大分離れたけど、何年か前のC#6か、それより前で文字列に@付けたりなんだりで解決してなかったか? >>185
Path.GetRelativePath 配列の次元を動的に決める方法ってあります?
例えばHairetsuっていう名前のオブジェクトがあったとして、
コンストラクタでhoge(int x)が呼び出された時は1次元配列、
hoge(int x, int y)が呼び出された時は2次元配列にしたい。 >>190
Array.CreateInstance? >>165
一行で書くとこんな感じ?
worksheet.Columns("A").First().Cells(true).Max(cell => cell.Address.RowNumber); sizeof(char) は 2 なのに Marshal.SizeOf<char>() が 1 になるのは何故ですか? ダブルクリックするとデフォルト値に戻るTrackBarを作りたいのですが
Trackbar.DoubleClickイベントを追加してもクリックイベントが動くだけで反応してくれません……
ググった情報を参考に継承クラスにしてからSetStyleでStandardDoubleClickを追加しても無反応でした
よければご教授よろしくお願いします…… >>195
簡単だろ...と思ったけどそうでもないみたいね
CreateParamsオーバーライドしても出来なかった
https://bytes.com/topic/c-sharp/answers/492805-enable-trackbar-doubleclick-event
ダブルクリックの成立条件がOSの設定と別になるのは諦めて
自分でダブルクリックを実装するしかない気がする。知らんけど
private Stopwatch mStopWatch = new Stopwatch();
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
const int maxDoubleClickInterval = 500;
if (mStopWatch.IsRunning && mStopWatch.ElapsedMilliseconds <= maxDoubleClickInterval)
{
OnDoubleClick(e);
mStopWatch.Stop();
}
else mStopWatch.Restart();
} >>197
あーーやはり根本から用意されてないんですね……
自分の初歩が間違ってるのかなと思っていたのですが少し安心しました
ありがとうございます! 素人のボヤキで恐縮ですが
何度も書いては直しを繰り返し書き足したコードが
最後の最後、どうしてもデバッグが通らなくなりまして
いくら調べても動かない原因か分からず
もう考えるの面倒くさくなって
新規のFormに一から同じコード書き直してみたら・・・動くじゃん!
たぶん何度もトライ&エラーしたから何処かで操作間違えて
IDEが自動で生成したコードにゴミが混じったんじゃないかと思ったのですが
この動くコードと動かないコードの違いを簡単に発見できませんかね?
今、全ての.csファイルを一行ずつ比較してますが・・・もう飽きましたwww
メインのコードは全く同じでした
ちなみにデバッグで出るエラーは、あるクラスのメソッドの定義が無いというやつです 定義がなくてエラーを吐くところまで分かるなら
動くほうのコードをその定義名で検索してコピペすればいいのでは……? 自作のメソッドじゃないのです
usingでちゃんとクラス指定してますし
少なくとも手で入力したコードは同じなので いや、だから自動生成のコードも比較してるんだよね
普通にそこにヤマ当てて検索すればいいのでは…………??? List<int>型をカンマ区切りの文字列にしたいんだけども一個ずつforeachで要素取り出して繋げるしかないかな? joinをレスかいた後に見つけました!
すみません 質問する際に文字に起こすことによって頭が整理されるためである staring[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)
strLine = strLine[0].Split(chrCut)
return strLine;
フォーム1で一回通ったあとフォーム2で2回目通るときにエラーで別のプロセスで使用されているって出るんですがどういったエラーですか?
ファイル開いてるってことですか? >>208
そう
ただFile.ReadAllLinesはオープンからクローズまでやってくれるので普通は発生しない
他でそのファイルを触ってない?
あと自プログラム上はクローズしたけどアンチウィルスソフトがまだ触ってるってケースがある >>208
Readだとそもそも他でロックしていても別のプロセスで使用されているってエラーにならないはずなんだけど
書き込みモードで開いたままとかよっぽど変なことしていないか?
>>212
とりあえずダミーで
string[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)
のすぐ下に別の配列への読込み
string[] strLine2 = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)
を入れて見てエラーになるかならないか確認してエラーが出たらお手上げ
エラーが出ないのならstring[] strLine = system.IO.File.ReadAllLines(tarTxtPath,System.Text.・・・)から2回目の実行時にエラーの原因がある Windowsで簡単なデスクトップアプリ、コマンドプロンプトアプリを作るのが目的で
無料のVisual Studio 2013 for Desktopをインストールしている
最近調べたらVisual Studio 2017 Community版なるものが無料でリリースされてるようだけど
2013 for Desktopから乗り換える価値あると思う?
それとも2013 for Desktopをそのまま使い続けていた方がいい? >>214
2013だと最新のC#や.NetFrameWorkwpターゲットにしたものが作れないと思うけどVisualStudioのスレで聞いて
メリットとデメリット詳細に説明するのは難しいと思うから >>214
VS communityは商用利用に制約が有ります。
Express 2017 for Windows Desktopを利用しましょう。
Express 2017 for webはないのでwebはVSCODEに移行しました。 dd
2017 for Windows Desktopに乗り換えまつ >>216は間違い
VS Communityは組織の規模に制限があるが用途に制限はない >>213
書き込みモードで放置してました。
お手数おかけしました! プログラマーとして転職するにはどんな本までマスターしてれば大丈夫ですか?
ゴールからはじめるC#は読めました。 ■ このスレッドは過去ログ倉庫に格納されています