X



ふらっと C#,C♯,C#(初心者用) Part144
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん (ドコグロ MM2f-DHp5)
垢版 |
2019/07/16(火) 15:36:23.74ID:i1fbuZ/pM
!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
0002デフォルトの名無しさん (エムゾネ FFba-YtL5)
垢版 |
2019/07/16(火) 15:44:15.40ID:uLn4rkdXF
O2
0003デフォルトの名無しさん (ワッチョイ a75f-YtL5)
垢版 |
2019/07/17(水) 10:08:14.00ID:5/22vZUf0
もしわかったら助けてください

VS2017 c# Windowsフォームで、textboxのKeyDownイベントで別のTextBoxをアクティブにする関数を作ったのですが
なぜかフォームが非アクティブになってしまいます
KeyDownイベントでなく、テストボタンを作ってClickイベントで関数を呼び出すと正常に動作します
何か考えられる原因ってあるでしょうか…
0007デフォルトの名無しさん (ワッチョイ a75f-VBrH)
垢版 |
2019/07/17(水) 10:50:55.66ID:5/22vZUf0
keydownでなくkeyupイベントで処理したら理想通りになりました
どうして…?

>>4
multilineのテキストボックスで移動はしていないようです

>>6
そもそもフォームを1つしか作っていないんです
0009デフォルトの名無しさん (ワッチョイ 4e7b-MWwc)
垢版 |
2019/07/17(水) 18:48:12.22ID:16aW/iRU0
>>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を外してもフォームが非アクティブになるのは無いから、それは書いてない別の原因があるはず
0010デフォルトの名無しさん (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/18(木) 02:37:55.39ID:JiMlnGX40
DateTimePickerの継承コントロールを作っているのですが、カレンダーや手入力で日付を変更しても、Valueの値が変わりません。
何が原因でしょうか?

※Deleteキーが押されたらnullになり、その他のキーが押されたら、nullになる前の日付が表示されるようにしたつもりです。
http://ideone.com/BRM6jo
001110 (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/18(木) 03:27:19.51ID:JiMlnGX40
ほんとにしょーもない見落としでした(´・ω・`)
コンストラクタに、
TextChanged += (sender,e) => Value = DateTime.Parse(Text);
入れたら動きました。
001210 (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/18(木) 03:39:32.99ID:JiMlnGX40
正常な日付 or null のどっちかにしかならない必要があるので、以下のほうがよかったです。
TextChanged += (sender, e) =>
{
if (String.IsNullOrWhiteSpace(Text))
Value = null;
else
Value = DateTime.Parse(Text);
};
0013デフォルトの名無しさん (ワッチョイ 8f01-fACD)
垢版 |
2019/07/18(木) 07:02:48.53ID:teqAmMY+0
ASP.NETのWEBフォームで特定のページを誰かが開いていたら他の人は開けないようにしたいのですがどういう実装で実現出来るでしょうか?
ページをオープン中という状態を知る術が見付からずに困っています
C#で作っているというだけで使う技術は多岐に及びそうですがよろしくお願いします
0014デフォルトの名無しさん (ブーイモ MM5f-6VcT)
垢版 |
2019/07/18(木) 08:03:49.72ID:Q7y8Xu/qM
定期的にajaxで閲覧中のステータスを5秒おきにサーバに送信して
最後の送信から15秒くらいの時間が経過したら
他のユーザーにアクセスを許可すれば良いんじゃね?
0015デフォルトの名無しさん (スフッ Sd5f-kypX)
垢版 |
2019/07/18(木) 10:18:40.31ID:926jk5Fkd
ちょうどそんな実装してるけど、ロック掛ける(+掛けれなかったら掛けてる奴返す)ためのajaxで呼ぶAPIと、ロック解除するAPI作ってる。
ロックはTTL60秒。クライアントから30秒ごとに延長かけてる。
JSのoncloseかなんかでロック解除API叩いてるけど、たたき漏れは今のところ無い。
0017デフォルトの名無しさん (アウアウウー Sad3-OGGi)
垢版 |
2019/07/18(木) 11:13:33.22ID:6A8bU/H4a
>>16
逆にGCは何をすると思ってるの?
マネージドの場合事実上「GCでDispose」されると思っていいはず。

だから本当に怖いのはdispose忘れじゃなくて、
イベントの購読の解除を忘れるとかして参照を間接的に握られ続けること
001810 (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/18(木) 13:26:02.08ID:JiMlnGX40
すみません。
予想通りに動いたと思ってたんですが、"Value = 値" という方法で値を設定すると反映されません。
どうすればよいでしょうか・・・
http://ideone.com/UcN1cB
0021デフォルトの名無しさん (ワッチョイ 3f01-9oxg)
垢版 |
2019/07/18(木) 13:50:06.72ID:1HV7iRhh0
お知恵をお借りしたく。。。


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);
}
0026デフォルトの名無しさん (ワッチョイ 4f5f-6VcT)
垢版 |
2019/07/18(木) 20:46:46.74ID:c4BAkJVY0
>>17
てっきりbitmapは明示的にdisposeしないとメモリリークするのかと思ってたんだけど
都度GC.Collect()してみたらdisposeしなくても大丈夫だったわ
ありがと
0031デフォルトの名無しさん (ドコグロ MMbf-bkmc)
垢版 |
2019/07/19(金) 21:36:05.87ID:IuwL/lPHM
Bitmapはファイナライザを実装してるから2回GCが走らないと解放されない
あと頻繁に動いてるのは最も浅い世代のGen0GCで、GCを生き残って昇格してしまったオブジェクトを回収させるにはGC.Collectは有効
0034デフォルトの名無しさん (ワッチョイ ff4a-7vAl)
垢版 |
2019/07/20(土) 20:49:53.26ID:hrLeGUFN0
時間はかかっても、MSゴシックなら正常に動作するんですが
游ゴシックを指定すると、なぜか文字が重なり合ったりして正常に表示されません

g.DrawString(new String('@', 5000000), drawFont, Brushes.Black, 0, 0);
0038デフォルトの名無しさん (ワッチョイ 3f34-k+pP)
垢版 |
2019/07/21(日) 12:10:16.19ID:AXqQTYqQ0
Webbrowser で表示されているある部分をクリックしてAjaxで動的にHTMLが変化する場合 
documentcompleted は発生しませんが
HTMLの変化を検知するにはどうするのがいいのでしょうか?

タイマーを使ってWebbrowser のHMTLの内容を比較するくらいしかないですかね?
0039デフォルトの名無しさん (ワッチョイ 3f42-jGuh)
垢版 |
2019/07/21(日) 12:43:20.58ID:P7LE/kkP0
>>38
UWPのWebViewなら、スクリプトを直接呼び出して完了待ちとか出来るよ
FormsやWPFからでも使えるようになっているみたいだから頑張ればなんとかなる

勿論UWPで作るってのもアリだが
0041デフォルトの名無しさん (ワッチョイ 0fda-ShKg)
垢版 |
2019/07/22(月) 01:46:10.70ID:fKk8m16B0
どんな処理に対してどんな例外処理をすればよいのか理解出来ないのですが、
「〇〇メソッドが投げる可能性がある例外」という感じの一覧みたいなものってないでしょうか?
0043デフォルトの名無しさん (アウアウウー Sad3-EsdE)
垢版 |
2019/07/22(月) 15:09:04.83ID:9U8T6M8Za
>>41
他にも、VisualStudio上でメソッドにカーソルを合わせると出てくるツールチップで「例外」箇所に型が載っていたり
F12で定義に移動した後のコメント中で「例外」箇所に型と理由が載っていたりする
0052デフォルトの名無しさん (ワッチョイ 6bda-tP4r)
垢版 |
2019/07/26(金) 13:12:23.94ID:53dis5oN0
コンテキストメニューを定義して、それを別コントロールに割り当てて、
それを更に別のフォームからクリックで実行したく、下記の構造にしているのですが、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 += //クリックイベント

  }
}
0059デフォルトの名無しさん (ワッチョイ 8f5f-1F87)
垢版 |
2019/07/27(土) 23:40:34.97ID:NQ4+UjHL0
配列添字演算子付のpropertyはありますか?
イメージ的には
public int MyIDList[int]{
set{this.myIDList[idx] = value;}
get{return this.myIDList[idx];}
}
みたいな事がしたいです
0062デフォルトの名無しさん (ブーイモ MMc7-X7My)
垢版 |
2019/07/27(土) 23:49:00.45ID:F72yN9ZSM
できない
インデックスの渡し方しか考えてないようだけど
それだとLengthやforeachで回せる機構など
配列に必要な関数群も仕組みもないだろ?

素直にListから継承させるか
インデックスを引数で渡せばいいじゃない
0066デフォルトの名無しさん (ブーイモ MMc7-X7My)
垢版 |
2019/07/28(日) 01:53:35.14ID:GU+doGlgM
まあたださ

class p {
List<double> da;
double center[int index]{
get {return (da[index+1] - da[index]; }
}
}

みたいに、クラスの配列データを元に
仮装配列的なものを作りたいんだろうなと思う
昔俺もやりたくて調べまくったよ

これを今のc#で実現しようとすると、わざわざプロパティごとにクラス化なきゃいけないし
クラスの生成や配列を振る舞うクラスに元データを渡すのとか非常に面倒になる

そこまで出来たとしてもメリットはインデックスを[]で渡せるだけで
配列(っぽいもの)ですよとコード上で示せるだけ

普通に関数実装で[]表記以外は同じことが出来るので
コードの美しさ的には不満があるけど
実装上は困らないんだよな

単純に関数の引数は()でも[]でも囲めるようにしてくれたら簡単なんだけどね
0069デフォルトの名無しさん (ワッチョイ 9312-J0Tb)
垢版 |
2019/07/30(火) 09:51:52.35ID:MQBecH/v0
できないので、諦めてオーバーライド可能なメンバでやって

そういう機能が欲しいなら、githubで提案してくるとよい
ここで喋っても入らないのでそのつもりで高説は垂れるように
0070デフォルトの名無しさん (アウアウウー Sacf-z8jC)
垢版 |
2019/07/30(火) 09:53:45.93ID:aYg/q9jya
>>68
隠蔽(new)は出来るでしょ

継承というかoverrideはインスタンスメンバーを上書きするものであり、
constは本質的にstaticメンバーなんで、継承でconstを変更という発想はそもそも矛盾してるんじゃないの?
0072デフォルトの名無しさん (ブーイモ MMc7-X7My)
垢版 |
2019/07/30(火) 10:22:24.95ID:IhJrxMBNM
単純にこんな実装がしたいんだよね
オブジェクトの詳細で表示する名称表示とかさ

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 “楕円“; }
0079デフォルトの名無しさん (スッップ Sdaa-qbpu)
垢版 |
2019/07/31(水) 15:31:35.93ID:tEceTxskd
MacでC#勉強してみたいんですがVisual Studio入れないと厳しいですか?
VS Codeだけでは難しいですか?
0083デフォルトの名無しさん (アウアウウー Sacf-z8jC)
垢版 |
2019/07/31(水) 18:38:19.42ID:quxH8qSha
>>79
変な意地をはらずに一番イージーな道を選択した方がいいよ
つまらないことに時間を浪費したいの?w
0084デフォルトの名無しさん (ドコグロ MMaa-LsNC)
垢版 |
2019/07/31(水) 18:43:57.13ID:lLYOef6LM
>>83
その理屈だとBootcampでWindowsをインストールするのが最善ということになってしまう
VS for Macなんかほとんど誰も使ってないんだから、時間の浪費という意味ではVSCodeといい勝負だわ
0085デフォルトの名無しさん (ワッチョイ 1eda-X7My)
垢版 |
2019/07/31(水) 19:10:03.53ID:9TaORHsg0
Listでindex aのアイテムをindex bにインサートするスマートな方法はないだろうか

aをremoveしてbにインサートすると、a>=bならいいけど、a<bの時 removeでインデックスがズレるので狙いより1つ下に行ってしまう
一番下だと範囲外の例外が起きてしまう
できればこれを実行するメソッドを作って既にあるList<T>を拡張したいんだけど
ヘルパークラス的なものって作れないかな?
0086デフォルトの名無しさん (アウアウウー Sacf-6/1b)
垢版 |
2019/07/31(水) 20:05:23.41ID:i+V4gIP9a
>>85
「拡張」という言葉の意図がわからないけど
ヘルパークラス作って静的メソッドや拡張メソッドとして定義すれば良いんじゃない?
List<T>を継承したオレオレListでメソッド定義、という方法は止めとけ
0087デフォルトの名無しさん (アウアウウー Sacf-z8jC)
垢版 |
2019/07/31(水) 20:12:36.58ID:quxH8qSha
>>85
やってみたが例外なんか出ないけど
https://ideone.com/CazHs2
0091デフォルトの名無しさん (ワッチョイ 1eda-X7My)
垢版 |
2019/07/31(水) 23:27:27.06ID:9TaORHsg0
申し訳ない、コードを見直したら質問の前提を間違えてました

やりたかったのは
List<T> というリストがあった場合に
リストに入っているかわからないオブジェクトaを
リストに入っているオブジェクトbの1つ後に挿入する
…というメソッドを作りたかったんです

List<T>.MoveAfter(T b,T a) //リスト内bの後ろにaを挿入、aがList内にある場合は元の位置から移動させる

で、このメソッド自体の実装はできているんですが
いただいたサンプルのextensionsの記述がよくわからず質問しました
おかげでうまく実装できました、ありがとうございます!
0095デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/02(金) 00:52:16.45ID:80wMhccea
最低限IDEで自動ビルドなら慣れれば貧弱な環境も楽しいよ

インテリセンスなんかないから長い識別子をダブルクリック & Ctrl + C ⇒ Ctrl + V
ばっかりしてたら左手が腱鞘炎になっちゃったけどw
0098デフォルトの名無しさん (アウアウウー Sa09-Mtrx)
垢版 |
2019/08/02(金) 14:01:07.04ID:ktX3qXN3a
大昔試用したことあるけどまだ存在するんだw
いい加減タブ化とかしたのかな

しかし、日本人も真面目に作者に金払って使う人結構いるんだね
0099デフォルトの名無しさん (ワッチョイ 6588-n/pF)
垢版 |
2019/08/02(金) 14:48:47.26ID:NmFjjWZQ0
いや秀丸はすげーと思うけど言語解析までするIDEと比較してテキストエディタですら入力補完あるのにコピペ頑張らんでもええやん、って話
タブ化は10年前くらいには対応してたはず

vscodeも良いけど軽さはやっぱ秀丸のほうが良いから今でもちょいちょい起動するよ
0100デフォルトの名無しさん (アウウィフ FF09-ONUK)
垢版 |
2019/08/02(金) 15:14:57.86ID:e58H0HHKF
Nif●y の決済システムってまだ稼働してるんか
最近使ってないから知らんけど
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況