ふらっと 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 よく考えると形だけ外出ししてもデータ取得後のソースが SQLによって変わるからあんまり意味ないっつか見にくくなるだけだな 質問が下手ですみません javaのibatisのようなxmlでクエリを外部ファイルに置くようなフレームワークはC♯にあるのでしょうかという質問でした 自分は文字列でコード上に直接クエリを書いており、悪手をやっているのではと不安になり質問しました ご教示よろしくお願いします >>558 iBatisって相当昔だと思うけど…C#でもiBatis(MyBatis)は使える 絶対やめた方がいいけど 個人的にクエリは定数で宣言して、クラスにまとめる感じで書く。 リフレクション使ってクエリ文字列を引っ張れば管理資料もチョチョイのチョイやで。 むしろクエリを外部ファイルに書き出すのは古いのですね 参考になります すみません。この場を借りて質問させていただきます。 C#初心者なのですが、wpfで動画再生アプリを作っています。コピペメインです。 MediaElementを使って動画のコントロールはほぼ実装できたのですが、 動画のフルスクリーンからの復帰の仕方が良くわかりません。 (元の画面にうまく戻せません) フルスクリーンにするときは、こちらを使っています。 layoutRoot.Children.Remove(myMediaElement); this.Content = myMediaElement; this.WindowStyle = WindowStyle.None; this.WindowState = WindowState.Maximized; 戻すときは以下のようにしてみましたが、 this.Content = layoutRoot; layoutRoot.Children.Add(myMediaElement); this.WindowStyle = WindowStyle.SingleBorderWindow; this.WindowState = WindowState.Normal; System.ArgumentException: '新しい親 Visual に関連付ける前に、指定された子と現在の親 Visual との接続を切断する必要があります。' と怒られますw 親子の縁はどのように切ったら良いのでしょうか? よろしくお願いいたします。 >>564 上と下を見比べて対応してないものをまず見ろ それにしてもひどいやり方だ private void savedata() { string name = "aaa.txt"; system.IO.StreamWriter sw; try { sw = new IO.StreamWriter(name, false, System.Text.Encoding.GetEncoding("shift_jis")); sw.WriteLine("aaaa"); } catch (Exception ex) { MsgBox("Savedata error:" + ex.Message); } finally { sw.Close(); } } Newでエラーした場合にはSw.Closeすると落ちるが、何とかならないものだろうか? if(sw != null) sw.Close(); じゃダメなのかしらん? >>569 Dispose()とかでもそうするのが基本だと思うが >>568 Fileが無い場合やサイズが0とかの対応全く考えてないのも問題だと思う あっそうか Nullで検出できたのか。ありがと。Useingってのもあるんだね。 開発モードではエラーしないのに、Setupファイルでインストールすると、書き込み禁止がかかっているような エラーになるんだがなにが原因だろ。 System.UnauthorizedAccessException: パス 'C:\Program Files (x86)\test14\あああああ.ini' へのアクセスが拒否されました。 >>572 WindowsフォルダやProgramFilesフォルダに書き込むには管理者権限が必要 フォームのデザイナが以下のエラーを吐くのですがどうすればいいですか。 "***.dll"を読み込めません:指定されたモジュールが見つかりません。 (HRESULT からの例外:0x8007007E) プロジェクトは以下の4つです。 MainForm(C#) MainView(C#) (MainFormの中でNewされる。DLLsを利用する。) DLLs(C#) (DLLImportする。) Drawer(C++) (DLLExportする。dllファイルはビルド後に実行ファイルがある場所にコピーされる。) コールスタックでは、MainViewのDLLsを使用しているところでエラーがでており、 それをコメントアウトすると、デザイナが表示されます。 >WindowsフォルダやProgramFilesフォルダに書き込むには管理者権限が必要 ありがとう。 <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> をいれたら動き出した。しかし立ち上げ時に毎回「この不明なアプリが実行することを許可しますか?」って Windowsの確認画面がでるんだが、なんとかならないのでしょうか? >>576 ユーザーコードで対処するのは無理でしょう。 そのためのUACなんだし。 リスク覚悟でUACを無効にするしか Vista出たのも10年前だし、UACが何だか知らない人も多くなってるのかな Program filesにインストールするようなアプリで今時.iniとかちょっと… >>576 コードサイニング証明書取得して、プログラムに署名。 管理者権限でいつも立ち上げるようにすると確かにアクセスできるようになった。 しかしインストール先 パス を'C:\Program Files (x86)、これをやめれば管理者権限で立ち上げる必要はないのでは? >コードサイニング証明書取得して、プログラムに署名。 最高だ。これはいい。 とおもったら金がかかるのか? 残念。 >>582 普通はアプリケーションフォルダにデータを置きます てか、設定ファイルは.iniを使わなくなって10年以上経ちます [C# 設定]で、普通の設定ファイルの使い方調べた方がいい 訂正アプリケーションデータフォルダ(AppDataってやつね) 最近流行らないと思うけど、バイナリと同じ場所に設定ファイルを置くのは バイナリ自体をUSBメモリに入れて持ち歩くような特殊な用途ぐらいだよね iniファイルでも悪くないと個人的には思うけど、せっかく便利なシリアライザがいろいろあるのに わざわざ機能的に劣るiniファイルを使う意味はないわなあ 読み書きするコードも自分で書かなきゃならんし AppDataってVsのSetupプロジェクトでは作ってくれないですね。Apllicationフォルダーに設定用のデータも入れています。 「iniをつかわない」ってのがあまり意味がわかりませんがいま使っているのは単なるテキストファイルです。 (*.iniという名前にしていますが、)StreemWriterで書いています。XMLに落とすのが普通なのでしょうか? しかし単に改行だけのファイルで十分なのでXMLにはしていません。 XMLは設定ファイルとしてはわかり難いですし無駄が多いように思います。 それにエディターで気楽に追加ができないです。 >niファイルでも悪くないと個人的には思うけど、せっかく便利なシリアライザがいろいろあるのに >わざわざ機能的に劣るiniファイルを使う意味はないわなあ 慣れなんですかね。どうも直観的にわかり難いように思います。だからJsonとかを使う人も多いんではないですか? ”設定”, 20, とかをStreemReaderで読みこむと何で ””設定””になるんですかね。ストリングにするためにわざわざ「”」をNULLにReplaceしています。 なんかいい方法はないですかね。 >>586 俺はええと思うな XMLは編集するツールがない プログラマでない人間がぶっ壊したら 自分で直すのは至難の技だ >VisualStudioの機能だが ・AppDataフォルダ:このフォルダは「C:\Users\ユーザー名\AppData」にあります。ほとんどのプログラムの設定ファイル はここに置かれています(サブフォルダ「Roaming」の中)。プログラム名か開発企業名のフォルダの中に、設定ファイルや 関連データが保存されていますので、フォルダごとバックアップしておきましょう。 こういうもののようですね。だからSetupプロジェクトにはここに入れる設定データのフォルダーがあってしかるべきですがない?みたいですね。 バイナリと同じフォルダにiniファイルだと… アプリケーション1つにつき設定が一個しかないのでユーザーが複数いると困る たとえば年賀状ソフトで差出人が全てのユーザーで一つしか設定できない 今時複数ユーザーなんか考慮しなくていいだろ 健全なファミリーがお前の作ったアプリを使うとでも? すまんが、列挙型って関数の引数の型に指定することはできないの? enum A {B, C ,D}; void E(A a){}//ここでエラー これを書く事ができれば、エディタのアシストが効きまくってミスが減る気がするんだけど・・・・・ できるはず エラーメッセージはどのようなものですか? 関数内に書いててpublicメソッドにしてるんだろうな クラス内に書いててpublicメソッドの引数にしてるの間違い それかenumをpublicにしてないか Windows Form のコントロールたちって、ここ10年くらい全くもって変わり映えしてない気がするんだけど もう改善する気がないのかねぇ グレープシティ壊滅させるまでやらずとも テキストボックスの縦位置とか枠線スタイルとか複数列コンボとか、そのくらい対応してくれてもいいと思うんだけど >>602 UWPに注力してる以上まずやらんだろ。 XPに対応したVS2005の時代から変わってないのに何をいまさら感w >>603 Windows 10 Mobile が事実上終了したんだからUWPに注力する必要ないよね Chartがその後で増えたよ いやまあBCLに入っていなかっただけで前からあった奴だけど >>605 GoogleやAppleのまねしたいみたいだから、あがき続けるんじゃないか。 WinFormsって長いこと触ってないが 今でも線引くのにLabel使うとかアホなことしてるの? 底辺の人は底辺の環境で不思議なことをしてる 普通の人は普通の環境で普通なことをしてる >>608-609 ラベルでヘアライン引くのはよくあるしアホでも何でもない MSがUWPの宣伝しているのを見る度に ユニバーサルプラットフォームっていうけど お宅の会社ってPC以外のプラットフォーム持ってましたっけ? って煽りたくなる 実態はともかく構想的にはMS以外ノプラットフォームも対象なんで その批判は当たらないかと とは言え、ギョーミーなアプリ書く上で、マストなものは粗方揃ったわけだし クライアントがWindows10で揃えられるなら選択肢として悪くない とはいえUWPで作れるアプリならWebで十分なんだよね タッチパネルでの利用を想定しないのであれば、現実的にはあえて選ぶメリットはほとんど無い 解像度2560×1440のモニタを使っているのですが、Formアプリの解像度が合いません。 原因はサイズを125%に拡大していることで、通常の倍率に戻すとぼやけません。 FormのAutoScaleModeをDpiに設定してみましたが改善されませんでした。 対策をご存知の方がいましたら教えてください。 VSの吐くWinformsのテンプレだと自分でdpiAware仕込まなあかんのじゃなかったっけ >>617 app.manifestを設定したらモニタの解像度に対応できました。 ありがとうございます!! >>616 exeを右クリしてプロパティの中の互換設定を弄ると直る >>619 なるほど、互換の設定でも対応できるのですね。 勉強になります。 つまり他のソフトもボヤけてるんだな。 XPExplorerインストールすればいいのに。 >>621 さっそくインストールしました ありがとうございます! 早速インストールしたら好調でした ありがとうございます! >>621 早速インストールしたら好調でした ありがとうございます! >>621 早速インストールしたら好調でした ありがとうございます! >>621 早速インストールしたら好調でした ありがとうございます! >>621 早速インストールしたら好調でした ありがとうございます! >>621 早速インストールしたら好調でした ありがとうございます! >>621 早速インストールしたら好調でした ありがとうございます! >>621 早速インストールしたら好調でした ありがとうございます! public static SqlConnection connect = new SqlConnection("接続文字列"); public static SqlDataAdapter sda = new SqlDataAdapter("SELECT * FROM Table", connect); public static DataTable dt = new DataTable(); private void Form_Load(object sender, EventArgs e) { sda.Fill(dt); DataGridView1.DataSource = dt; } private void button_publish_Click(object sender, EventArgs e) { connect.Open(); 〜Tablesへの改変処理 connect.Close(); dt = new DataTable(); sda.Fill(dt);//★ } Table内容をSqlDataAdapterを使い、データテーブルに入れ込んで、DataGridViewに表示させた後、 Table内容を変更後、再びDataGridViewに表示させるとき、例外がスローされます。 ★の部分で、「System.InvalidOperationException: 'ConnectionString プロパティは初期化されていません。'」が出ます。 最新のデータを同じDataGridViewで見るには、どのようにすればよいのでしょうか? >connect.Close(); 接続切ったらそりゃエラーになるでしょ connect.Open();//★ sda.Fill(dt); connect.Close(); としたら、★マークのところで、またエラーが出ました。 まずコネクション以下全てのオブジェクトはクローズしたら再度newしないと使えません よってスタティックじゃなくて普通のインスタンスとして管理 使う度にnewで新たに作ります そうだったんですね、使いまわせると思ってました・・・ インスタンス内で、宣言したら、うまくいくようになりました。 ありがとうございます。 デバッグで完全に動作するのにインストールして動かすと、途中で落ちる。多分データベースのアクセスではないかなと 思っているんだが、インストールした実行プログラムのデバッグをやろうとしているんだがどうやるのか不明。 VS2013の「デバッグ」から「インストールされているアプリケーションパッケージのデバッグ」に入ってもリストに何もでてこない。 なにか設定があるのだろうと思うが、どこを設定すればいい? アタッチするまでが分からない。 >>639 どうやってインストールしたん? 結局Console.WriteLine()をあちこちに埋め込むのが早かったりする >>640 ConsoleよりTraceの方が使い勝手良いぞ。 Trace.WriteLine()とかの情報をDebugViewで時間情報付きで見れる。 フィルターやハイライトとかもかけられる。 CallerMemberNameAttribute class っていうか リリース版でデバッグしたいって聞いてるんでしょ? Trace出力でのデバッグはリリース版でやることが多いぞ。 ビュワー立ち上げなければ、ユーザーからは見えないし。 mono入れたLinuxでmscでコンパイルした実行ファイルを WindowsにもってこようとするとMicrosoft Defenderでトロイ扱いされてブロックされます 同じコードをWindowsでcscでコンパイルした場合は問題ありません WindowsでコンパイルしたものはmonoでLinuxでもちゃんと実行できます なんでmscでコンパイルしたものがトロイ扱いされるんでしょう? どうやって受け渡してる? zipで渡したらどうなる? >>646 scp(ssh)とhttp経由でダウンロードしましたがだめで その後拡張子を変えたりしましたがだめでした アーカイブは試しませんでしたが ダウンロードできても解凍するところでアウトと思われます 軽いプログラムだったのでbase64エンコードした文字列を Windows側でデコードして出力しようとしたのですが ファイルに出力した時点でウイルス判定され隔離されました C#アプリからCTRL+V以外のホットキーでSendMessageでWM_PASTEを送っても ペーストできるアプリとできないアプリがあるのですが ペーストできない原因とどうすればペーストできるのか 分かる方がおられましたらお教えいただけないでしょうか 自作C#アプリ ○ FireFox ○ ThunderBird ○ IE11 ○ Mery ○ 秀丸ファイラ ○ MDIE ○ 等 V2C × Chrome × Vivaldi × Everything × 等 いやいや、原因は普通に当該アプリがWM_PASTEを処理しないからでしょうw 泥臭いけど素直にSendKeysを使ったらよいのでは? シリアル通信のプログラムで問い合わせ付のコマンドを送信する場合に、送信結果(bool)とレスポンス結果(string)を取得したいのですが、返り値boolでレスポンス結果をoutで返すといった感じにすればいいでしょうか WM_PASTEじゃなくて直接キーをハンドリングしてるんだろ 最近のメジャーなアプリは開発者がMacをメインで使ってるケースが多かったりして、 ファッキンドザのために必要以上の特殊な対応はしないというスタンスのものが増えてるよ >>650 成否だけ分かればいいなら、失敗した時はnullを返せば十分じゃない? enum Acknowledgement {ACK,, NAK, NoResply, Offline}; みたいなのを返したいなら、 Class Response { public string Received{get; private set;} public Acknowledgement Acknowledgement{get; private set;} } みたいなのを返すとか メインメニューにコピーの項目ないなら 直接ペーストするウインドウに送らんと >>652-654 ありがとうございます 試してみます classをforeachで回したいのですがGetEnumeratorの書き方はこういう形が一般的なのでしょうか? プロパティが増える度にGetEnumeratorのyield return追加しないといけないですが うっかり追加し忘れてバグの元になるから別の書き方があるのかも?と少し気になったので https://ideone.com/etKQWk ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる