ふらっと C#,C♯,C#(初心者用) Part144
■ このスレッドは過去ログ倉庫に格納されています
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を2行冒頭に書くこと(1行分は消えて表示されない為)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、
質問者自身なんだか意味がよく分からない質問、
ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。
なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスはやめてください
>>980を踏んだ人は新スレを建てて下さい。
>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■関連スレ
C#, C♯, C#相談室 Part95
https://mevius.5ch.net/test/read.cgi/tech/1508168482/
■コードを貼る場合は↓を使いましょう。
http://ideone.com/
https://dotnetfiddle.net/
■前スレ
ふらっと C#,C♯,C#(初心者用) Part143
https://mevius.5ch.net/test/read.cgi/tech/1558002486/
■情報源
https://docs.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/index
https://docs.microsoft.com/en-us/dotnet/standard/class-libraries
http://referencesource.microsoft.com/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured もしわかったら助けてください
VS2017 c# Windowsフォームで、textboxのKeyDownイベントで別のTextBoxをアクティブにする関数を作ったのですが
なぜかフォームが非アクティブになってしまいます
KeyDownイベントでなく、テストボタンを作ってClickイベントで関数を呼び出すと正常に動作します
何か考えられる原因ってあるでしょうか… >>3
下キーで別のコントロールにフォーカスが移ってるのでは? フォームが非アクティブ=別フォームor
デスクトップがアクティブでは無く? keydownでなくkeyupイベントで処理したら理想通りになりました
どうして…?
>>4
multilineのテキストボックスで移動はしていないようです
>>6
そもそもフォームを1つしか作っていないんです キーダウン後にセットフォーカスなんじゃん?
キーアップだとセットフォーカス後なのでうまくいくとか? >>3
こういうことやりたいの?
http://ideone.com/JvzEb7
Atexで入力しようとするとBtexがアクティブになってそっちに文字入力される
ただしAtexで入力された最初の一文字はこのコードだと捨てられるから、それも入力したいのならもうひと手間かけないと
ここ参考に
TextBoxに数字しか入力できないようにする
https://dobon.net/vb/dotnet/control/numerictextbox.html#section1
KeyDownでもできるけどKeyPressでやるのがより一般的っぽい
ただe.Handled = trueやe.SuppressKeyPressを外してもフォームが非アクティブになるのは無いから、それは書いてない別の原因があるはず DateTimePickerの継承コントロールを作っているのですが、カレンダーや手入力で日付を変更しても、Valueの値が変わりません。
何が原因でしょうか?
※Deleteキーが押されたらnullになり、その他のキーが押されたら、nullになる前の日付が表示されるようにしたつもりです。
http://ideone.com/BRM6jo ほんとにしょーもない見落としでした(´・ω・`)
コンストラクタに、
TextChanged += (sender,e) => Value = DateTime.Parse(Text);
入れたら動きました。 正常な日付 or null のどっちかにしかならない必要があるので、以下のほうがよかったです。
TextChanged += (sender, e) =>
{
if (String.IsNullOrWhiteSpace(Text))
Value = null;
else
Value = DateTime.Parse(Text);
}; ASP.NETのWEBフォームで特定のページを誰かが開いていたら他の人は開けないようにしたいのですがどういう実装で実現出来るでしょうか?
ページをオープン中という状態を知る術が見付からずに困っています
C#で作っているというだけで使う技術は多岐に及びそうですがよろしくお願いします 定期的にajaxで閲覧中のステータスを5秒おきにサーバに送信して
最後の送信から15秒くらいの時間が経過したら
他のユーザーにアクセスを許可すれば良いんじゃね? ちょうどそんな実装してるけど、ロック掛ける(+掛けれなかったら掛けてる奴返す)ためのajaxで呼ぶAPIと、ロック解除するAPI作ってる。
ロックはTTL60秒。クライアントから30秒ごとに延長かけてる。
JSのoncloseかなんかでロック解除API叩いてるけど、たたき漏れは今のところ無い。 webからダウンロードした画像をメモリ上に保持してるんだけど
dispose忘れがなかなか厄介
GCでdisposeさせるかそれに近い動作をするものってないものかな >>16
逆にGCは何をすると思ってるの?
マネージドの場合事実上「GCでDispose」されると思っていいはず。
だから本当に怖いのはdispose忘れじゃなくて、
イベントの購読の解除を忘れるとかして参照を間接的に握られ続けること すみません。
予想通りに動いたと思ってたんですが、"Value = 値" という方法で値を設定すると反映されません。
どうすればよいでしょうか・・・
http://ideone.com/UcN1cB Value = DateTime.Parse(Text);
じゃなくて
DateTime.TryParseを使って、日付に変換できる場合のみセット そりゃbase.Valueに値設定しなけりゃ表示変わらんでしょ お知恵をお借りしたく。。。
public struct LogsData
{
public double total;
public long starttime;
}
var aaa = new LIST<LogsData>();
totalだけが入ったLISTを作りたい
ぶん回す方法はできたのだがもっとスマートな方法はないだろうか。
var bbb = new List<double>();
foreach (var ccc in aaa)
{
bbb.Add(ccc.total);
} var bbb = aaa.Select( x=> x.total ).ToList(); >>14
なる程
webを質問するとC#の枠組みを超えてしまうのでアレですが有用なアイデアありがとうございます >>17
てっきりbitmapは明示的にdisposeしないとメモリリークするのかと思ってたんだけど
都度GC.Collect()してみたらdisposeしなくても大丈夫だったわ
ありがと >>26
disposeすると今すぐメモリを解放してくれる。しないとガベコレが走るタイミングまで待たされる。GC.Collectは今すぐガベコレする。 >>27
大手の担当者(客)とか絶対理解できないから定期実行(十分に一度)してるわ
やらないと
リークだリークだうるせぇんだこれが >>27
bitmapを凄い勢いで作るプログラムを前に書いたら
メモリ不足で例外を吐いた事があったのよ
んでGCで解放されないのかと思ってたわ >>29
でもVSのモニタを見るとGCって結構な短期間で動いてくれるんだよな
GC.Collectはブラシーボ効果しかない Bitmapはファイナライザを実装してるから2回GCが走らないと解放されない
あと頻繁に動いてるのは最も浅い世代のGen0GCで、GCを生き残って昇格してしまったオブジェクトを回収させるにはGC.Collectは有効 >>30
遅いマシンで
割と重めのアプリを一日経ってからやってみ
3分ぐらいはフリーズするよ
stop the worldというだけはある >>30
試してみたらGCが一度も走らずに即死した
GC.Collectしないとマズそう
https://i.imgur.com/sR1A0ME.jpg 時間はかかっても、MSゴシックなら正常に動作するんですが
游ゴシックを指定すると、なぜか文字が重なり合ったりして正常に表示されません
g.DrawString(new String('@', 5000000), drawFont, Brushes.Black, 0, 0); >>34
描画先に十分なスペースはあるの?
フォントサイズ減らしたら改善するとかは無い?
それで無理なら一行ずつ描画するしかないな あ、Rectangle指定しないと折り返さないのか?
https://dobon.net/vb/dotnet/graphics/drawstring.html
>>36
意図的に無茶な指定しているのなら不具合が起こってもしょうがないと思う Webbrowser で表示されているある部分をクリックしてAjaxで動的にHTMLが変化する場合
documentcompleted は発生しませんが
HTMLの変化を検知するにはどうするのがいいのでしょうか?
タイマーを使ってWebbrowser のHMTLの内容を比較するくらいしかないですかね? >>38
UWPのWebViewなら、スクリプトを直接呼び出して完了待ちとか出来るよ
FormsやWPFからでも使えるようになっているみたいだから頑張ればなんとかなる
勿論UWPで作るってのもアリだが >>39
理想的な動作です
UWPでやってみます
ありがとうございます どんな処理に対してどんな例外処理をすればよいのか理解出来ないのですが、
「〇〇メソッドが投げる可能性がある例外」という感じの一覧みたいなものってないでしょうか? >>41
Docsの.NET Framework API リファレンスの各メソッドの説明に載ってる >>41
他にも、VisualStudio上でメソッドにカーソルを合わせると出てくるツールチップで「例外」箇所に型が載っていたり
F12で定義に移動した後のコメント中で「例外」箇所に型と理由が載っていたりする >>38
WinFormのWebBrowserでajaxで読み込みはタイマーみたいなの使って取れてる ざっくりで失礼します。
面白半分にc#でエロや風俗系を作れたらいいなと思ったのですが案ありますか?
なかなか思いつかなくてw >>45
C#+Unityのエロゲなんかいっぱいあるでしょ
そしてこの板で聞くことじゃない >>46
言われてみればそうですね
失礼しました。 変態さんでいっぱいだ
前スレのエロ画像スクレイピングマンは成功したのかな エロ画像なんて厳選して保存しないとすぐ500GBぐらいいくだろうに 動画ならともかく画像で500GBはベテランの領域。 コンテキストメニューを定義して、それを別コントロールに割り当てて、
それを更に別のフォームからクリックで実行したく、下記の構造にしているのですが、ControlExの公開プロパティになっている点に、なんとなく違和感感じています。
もうちょっと綺麗な構造に出来ないでしょうか?
public class ContextMenuEx : ContextMenu
{
public ToolStripItem OpenMenu { get; private set; }
}
public class ControlEx : Control
{
public ContextMenuEx ContextMenuEx { get; set; }
public ControlEx()
{
ContextMenu = ContextMenuEx;
}
}
public class ViewControl : Form
{
private ControlEx MyControlEx = new ControlEx();
public ViewControl()
{
MyControlEx.ContextMenuEx.OpenMenu.Click += //クリックイベント
}
} コンテキストメニューがnewされてないから例外が出るね 普通にメニュー出してsendmessageでええよ? なんとなくの違和感なんて知らんが
要するに何をどうしたいんだか 違和感
スポーツ選手みたいやなw
右肩に違和感を・・・
○○.cppに違和感を感じ納品を見送ったとのことです 質問する技術が足りてない
とにかく違和感とかいう抽象的なことじゃなくて具体的に 配列添字演算子付のpropertyはありますか?
イメージ的には
public int MyIDList[int]{
set{this.myIDList[idx] = value;}
get{return this.myIDList[idx];}
}
みたいな事がしたいです できない
インデックスの渡し方しか考えてないようだけど
それだとLengthやforeachで回せる機構など
配列に必要な関数群も仕組みもないだろ?
素直にListから継承させるか
インデックスを引数で渡せばいいじゃない それはクラスにインデクサが付く話だし
プロパティには持たせられないじゃん >>63
質問者がやりたいのはそのリンク先の「余談: VB のインデックス付きプロパティ」のこと
C#で出来ないようにしている理由はリンク先に書かれているし >>62 も書いてくれている まあたださ
class p {
List<double> da;
double center[int index]{
get {return (da[index+1] - da[index]; }
}
}
みたいに、クラスの配列データを元に
仮装配列的なものを作りたいんだろうなと思う
昔俺もやりたくて調べまくったよ
これを今のc#で実現しようとすると、わざわざプロパティごとにクラス化なきゃいけないし
クラスの生成や配列を振る舞うクラスに元データを渡すのとか非常に面倒になる
そこまで出来たとしてもメリットはインデックスを[]で渡せるだけで
配列(っぽいもの)ですよとコード上で示せるだけ
普通に関数実装で[]表記以外は同じことが出来るので
コードの美しさ的には不満があるけど
実装上は困らないんだよな
単純に関数の引数は()でも[]でも囲めるようにしてくれたら簡単なんだけどね constって継承できないもんかな
継承クラスで定数を変えたいんだけど
何か上手い方法はないだろうか できないので、諦めてオーバーライド可能なメンバでやって
そういう機能が欲しいなら、githubで提案してくるとよい
ここで喋っても入らないのでそのつもりで高説は垂れるように >>68
隠蔽(new)は出来るでしょ
継承というかoverrideはインスタンスメンバーを上書きするものであり、
constは本質的にstaticメンバーなんで、継承でconstを変更という発想はそもそも矛盾してるんじゃないの? constは埋め込みだから無理
コーディングを見やすくしてるだけなんよ
static virtual readonly とか…できるんかな書いたことないけど 単純にこんな実装がしたいんだよね
オブジェクトの詳細で表示する名称表示とかさ
class BaseObject{
const virtual string ObjectName=“(基底クラス)“;
string GetObjectName(){return ObjectName;}
}
class TextObject:BaseObject{
const override string ObjectName=“テキストボックス“;
}
class LineObject:BaseObject{
const override string ObjectName=“直線“;
}
class EllipseObject:BaseObject{
const override string ObjectName=“楕円“;
}
大して文字数も変わるわけでもないし、やっぱこう実装するよりないか
override string ObjectName{ return “楕円“; } >>68
定数を返すだけの読み取り専用のプロパティにする >>72
読み取り専用プロパティはもうちょっとコンパクトに書ける
override string ObjectName => "楕円"; >>75
おお、いいですね!活用させてもらいます! MacでC#勉強してみたいんですがVisual Studio入れないと厳しいですか?
VS Codeだけでは難しいですか? MacでC#を勉強するメリットはないから他の言語にしとき
唯一意味があるのはUnityでゲーム作る用途だから、Unity入れてC#やってみるのはまあアリ >>79
言語の学習目的なら.NET Core SDKとVSCodeでじゅうぶん >>79
変な意地をはらずに一番イージーな道を選択した方がいいよ
つまらないことに時間を浪費したいの?w >>83
その理屈だとBootcampでWindowsをインストールするのが最善ということになってしまう
VS for Macなんかほとんど誰も使ってないんだから、時間の浪費という意味ではVSCodeといい勝負だわ Listでindex aのアイテムをindex bにインサートするスマートな方法はないだろうか
aをremoveしてbにインサートすると、a>=bならいいけど、a<bの時 removeでインデックスがズレるので狙いより1つ下に行ってしまう
一番下だと範囲外の例外が起きてしまう
できればこれを実行するメソッドを作って既にあるList<T>を拡張したいんだけど
ヘルパークラス的なものって作れないかな? >>85
「拡張」という言葉の意図がわからないけど
ヘルパークラス作って静的メソッドや拡張メソッドとして定義すれば良いんじゃない?
List<T>を継承したオレオレListでメソッド定義、という方法は止めとけ >>87
2 to 9なのに1が9に移動しちゃうでしょ? 申し訳ない、コードを見直したら質問の前提を間違えてました
やりたかったのは
List<T> というリストがあった場合に
リストに入っているかわからないオブジェクトaを
リストに入っているオブジェクトbの1つ後に挿入する
…というメソッドを作りたかったんです
List<T>.MoveAfter(T b,T a) //リスト内bの後ろにaを挿入、aがList内にある場合は元の位置から移動させる
で、このメソッド自体の実装はできているんですが
いただいたサンプルのextensionsの記述がよくわからず質問しました
おかげでうまく実装できました、ありがとうございます! >>79
他の人も言ってるけど、unityでC#使ってるよ
C#自体の勉強ならこれで出来る
当然、WindowsアプリをC#で作れるようなスキルは得られないが c#とvsの至れり尽くせり感に慣れすぎて他の開発環境でできなくなりました そうなんだよなー
VSは使いやすすぎる
Delphiの開発者を引き抜いてきただけあるわ 最低限IDEで自動ビルドなら慣れれば貧弱な環境も楽しいよ
インテリセンスなんかないから長い識別子をダブルクリック & Ctrl + C ⇒ Ctrl + V
ばっかりしてたら左手が腱鞘炎になっちゃったけどw 秀丸御殿が建ってる偉大なエディタに対して「ですら」って 大昔試用したことあるけどまだ存在するんだw
いい加減タブ化とかしたのかな
しかし、日本人も真面目に作者に金払って使う人結構いるんだね いや秀丸はすげーと思うけど言語解析までするIDEと比較してテキストエディタですら入力補完あるのにコピペ頑張らんでもええやん、って話
タブ化は10年前くらいには対応してたはず
vscodeも良いけど軽さはやっぱ秀丸のほうが良いから今でもちょいちょい起動するよ Nif●y の決済システムってまだ稼働してるんか
最近使ってないから知らんけど ■ このスレッドは過去ログ倉庫に格納されています