12万作品が月額500円(税別)で見放題なのはdTVだけ!! >>dTV(外部リンク)

c#で質問が2つあります。
①numericUpDownを使っているのですが、アップダウンで値を変更すると、
Levelに同じ数字が反映されるという問題なのですが
直接numericUpDownに値を入力しても反映できるようにしたいです。
(なぜかアップダウンでの値でしか反映されないです。。)


②numericUpDownの値が何も入力されていない(空白)ときTextBoxが非表示というプログラムを作りたいです。
私が作ったのは
If (numericUpDown.Value<=0)
Text.Enabled=false;
と作成したのですが、うまくいきません。
numericUpDownのツールについてあまり知らないので教えてください。
よろしくお願い致します。
閉じる

2分前

A 回答 (3件)

NumericUpDown の Value プロパティは数値しか格納できない。


NumericUpDown コントロールのテキストボックス部分は数値しか入力できない。
スペースも入力できない。
Delete や Backspace は使える。
Delete や Backspace が使える関係で、入力途中にテキストボックスの入力値が一時的に空の状態になることは許されている。
NumericUpDown コントロールの値は Value プロパティで取得する。
テキストボックス部分に有効な数値が入力された状態で Enter が押されたり、フォーカスが外れると Value プロパティが更新される。(ただしテキストボックス部分が空文字の状態のままでは Value プロパティの値は変化しない)
Value プロパティの値が変化しないと ValueChanged イベントは発生しない。
という仕様です。

こういう状況ですので、テキストボックス部分を空文字にして Enter を押したりフォーカスを外しても ValueChanged イベントが発生しないため、他のテキストボックスを無効化するような処理を書くことはできません。

ただ、NumericUpDown コントロールには Text プロパティという非表示なプロパティがあります。 こいつはインテリセンスには出てきませんが使用することはできます。

また推奨されていませんが、TextChanged イベントもあるようです。
https://msdn.microsoft.com/ja-jp/library/system. …(v=vs.110).aspx
この時のイベント発生順は
[TextChanged] ⇒ (テキストボックスの値が正しければ) [ValueChanged] となるようです。

手動で TextChanged イベントを追加してやれば、numericUpDown コントロールのテキストボックス部分を直接編集している最中にテキストボックス部分の変化をとらえられるようになるため、一時的に空文字になっている状態を利用することが可能になります。

Form1.cs
public Form1()
{
  InitializeComponent();
  this.numericUpDown1.TextChanged += new System.EventHandler(this.numericUpDown1_TextChanged);
}

private void numericUpDown1_TextChanged(object sender, EventArgs e)
{
  label1.Text = this.numericUpDown1.Value.ToString();
  textBox1.Enabled = !string.IsNullOrEmpty(numericUpDown1.Text);
}
    • good
    • 1
この回答へのお礼

ありがとうございます!
Enterを押すと文字が反映されるのですね!

お礼日時:2016/10/19 22:17

ありますよ、よく探してみてください



何も入力されていないというのであればnullを使ってください。
value == nullのような感じです。

あなたの条件式だと、0より下の数字、つまりマイナスの値の時の条件になってしまいます。

いま電車で思い出しながらやっているので、もしかしたらnull使えなかったかも...
試してみてください
    • good
    • 0
この回答へのお礼

わざわざありがとうございます!
nullでできました!

お礼日時:2016/10/19 22:18


TextChangedイベントを利用しましょう
名前の通り、テキストが変更された時に発生するイベントです。


値が何も入力されていないというのは、0の時ということですか?
テキストボックスいうのはもしかして、numericUpDownに付属しているやつのことを言っていますか?

ちょっと分かりづらいのでもう少し詳しく書いてください
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
①numericUpDownのイベントにTextChangedがないのですが、、

②分かりづらくて申し訳ございません。
0ではなく、なにも入力されていない状態のことです。
テキストボックスは別のツールでnumericUpDownと連動させるものです。
numericUpDownが入力されていないときはTextBoxがEnabled(無効)になるというプログラムを作成したいです。

お礼日時:2016/10/18 22:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QNumericUpDownの数値を選択済みにする方法

表題の件ですが、フォーカスが移ったとき(GetFocus)にNumericUpDownの数値を選択済みにしたいのですが、メソッドが見つかりません。(見つけられないだけかも知れませんが・・・)
なにか良い方法はありませんでしょうか。

Aベストアンサー

こんにちは。
動作は確認していませんが、これではダメですか?

Private Sub NumericUpDown1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles NumericUpDown1.Enter
NumericUpDown1.Select(0, NumericUpDown1.Text.Length)
End Sub

QNumericUpDownコントロールに数字以外を入力したい

VB2003環境なのですが、NumericUpDownコントロールに
数字以外を入力できるようにしたいのですが
そのようなカスタムコントロールを作る方法がありましたら
教えて頂きたいです。
感じとしてはTextBoxにSpinButtonをくっ付けた感じのものが
欲しいのですが方法がありましたら教えて頂きたいです。

Aベストアンサー

やるとするならUpDownBaseを継承したユーザーコントロールを作成して
UpButton、DownButton、UpdateEditTextをそれぞれOverridesで作成といった具合でしょう

dim _value as Integer
Public Overrides Sub UpButton()
  if _value < 25 then
    _value += 1
  End Sub
  UpdateEditText()
End Sub

Public Overrides Sub DownButton()
  if _value > 0 then
    _value -= 1
  End Sub
  UpdateEditText()
End Sub

Protected Overrides UpdateEditText()
  dim ch as Char() = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Me.Text = ch( _value )
End Sub
といった具合でしょう

if _value < 25 then

if _value > 0 then
などは適宜修正しましょう

やるとするならUpDownBaseを継承したユーザーコントロールを作成して
UpButton、DownButton、UpdateEditTextをそれぞれOverridesで作成といった具合でしょう

dim _value as Integer
Public Overrides Sub UpButton()
  if _value < 25 then
    _value += 1
  End Sub
  UpdateEditText()
End Sub

Public Overrides Sub DownButton()
  if _value > 0 then
    _value -= 1
  End Sub
  UpdateEditText()
End Sub

Protected Overrides UpdateEditText()
  dim ch as ...続きを読む

QC#で共有変数の定義をするには

C#で共有変数の定義をするには、どうしたらよいでしょうか。具体的には、起動パラメータで、任意の文字列(3~4バイト)を渡して、C#アプリケーションを、起動し、プログラムの任意の場所で、そのパラメータを参照したいと考えています。起動パラメータの受け取りは、できるのですが、そのパラメータを、プログラムのどこからも参照できる領域(ここの定義方法が不明)に格納するには、どうしたらよいでしょうか。(2重起動を許す前提です。実行時に1つの目のプログラムにはパラメータ"XYZ"を渡し、2つ目のプログラムを起動時にはパラメータ"ABCD"を渡し、その値により、プログラムの動作を制御したいと思っています)
Windows-xp visual-studio2008 C#でwindowsアプリケーションを作成しています。

Aベストアンサー

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(new Form1());
    }
    // ここに記述
    static public string strArg = null;
  }
}

メインクラスのメンバーとしてスコープが有効な場所に記述します

namespace test1
{
  static class Program
  {
    /// <summary>
    /// アプリケーションのメイン エントリ ポイントです。
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
      if (args.Length > 0)
      {
        strArg = args[0];
      }
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      Application.Run(n...続きを読む

QC# ユーザコントロール内のボタン押下を親で知る

こんにちは。ユーザーコントロール内のボタンをクリックした時、そのユーザーコントロールをおいている親フォーム側で、それを知るにはどのようにすればよいでしょうか?

----------------------------------------------------------------------
[Form1.cs]

void Inform_UserControlButton1Click()
{
//親が持っている変数を使って処理を行いたい
}

void Form1_Load(....)
{
//ユーザコントロールを設置
UserControl1 ctrl = new UserControl1();
this.Controls.Add(ctrl);

  //ユーザコントロール内のbutton1を見つける
List<Control> ctrl = new List<Control>(cps.Controls.Find("button1", false));

//Form1が持っている変数を使う為の関数を通るようにしたい
(Button)ctrl[0].Click += new System.EventHandler(Inform_UserControlButton1Click); //←エラー
}
----------------------------------------------------------------------
[UserControl.cs]
button1が配置されています。

----------------------------------------------------------------------
こんな感じにしてできないかなー?と思っていたのですが、//←エラーのところで、

イベント 'System.Windows.Forms.Control.Click' は += または -= の左側にのみ表示されます。

となってしまい上手くいきません。
どのようにすればよいでしょうか?

こんにちは。ユーザーコントロール内のボタンをクリックした時、そのユーザーコントロールをおいている親フォーム側で、それを知るにはどのようにすればよいでしょうか?

----------------------------------------------------------------------
[Form1.cs]

void Inform_UserControlButton1Click()
{
//親が持っている変数を使って処理を行いたい
}

void Form1_Load(....)
{
//ユーザコントロールを設置
UserControl1 ctrl = new UserControl1();
this.Controls.Add(ctrl);

  //ユーザコ...続きを読む

Aベストアンサー

> ((Button)ctrl[0]).Click += new EventHandler(Inform_UserControlButton1Click);
> では、+=の左側にだけ~・・・というエラーが出ます。

えっと、動いたものを貼り付けたので、コンパイルエラーにはならないはずです。

で、上記コードは、質問時の記述だと左辺が
(Button)ctrl[0].Click
となっていると思います。これだと確かにエラーになります。
しかし
((Button)ctrl[0]).Click
と、キャストを括弧で括って優先させるとエラーにならないと思いますが、
いかがでしょうか?

Q「いずれか」と「いづれか」どっちが正しい!?

教えて下さいっ!
”どちらか”と言う意味の「いずれか」のかな表記として
「いずれか」と「いづれか」のどちらが正しいのでしょう???

私は「いずれか」だと思うんですが、辞書に「いずれか・いづ--。」と書いてあり、???になってしまいました。
どちらでもいいってことでしょうか?

Aベストアンサー

「いずれか」が正しいです.
「いづれ」は「いずれ」の歴史的かな遣いですので,昔は「いづれ」が使われていましたが,現代では「いずれ」で統一することになっていますので,「いずれ」が正しいです.

Q文字列の後ろから必要分だけ削除したい。

例1 Dim str As String = "あいうえお1234"

文字列の中の1234だけ削除したい場合は、
str = str.Remove(5,4)
という風に、5文字目の後から4文字削除にすればよいのですが、

例の"あいうえお"の部分の長さが毎回処理する度に異なる場合は、
文字列の頭から何文字目という指定ができないので、”後ろから4文字を削除したい”となります。その場合は、どのようなプロパティを使えばいいのでしょうか。

.NET環境です。

Aベストアンサー

Length(str)で文字数を取得できますので、後ろから4文字目は先頭から何文字目かは計算できると思いますが、どうでしょうか?

Q子クラスのオブジェクトに親クラスのオブジェクトを代入

開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが
子クラスのオブジェクトに、親クラスのオブジェクトを代入する方法が分からなくて困っています><。
ソースコードで説明すると
class Car
{
}

class Bike:Car
{
}

Car oya = new Car();
Bike kodomo = new Car();

kodomo = oya;//これはエラーになる

というかんじです。
これが代入できるような方法はないでしょうか?
かなり抽象的な質問ですが、よろしければ御回答をお願いします。

Aベストアンサー

kodomo = oya
これはあくまで、ポインタ的なものがコピーされるだけです。(インスタンスのクローン(複製)ができるわけではない)
質問を見る限りその辺りが理解できていないと思います。
class Car
{
 public int a;
}
Car oya = new Car();
oya.a = 10;
Car kodomo = new Car();
kodomo = oya;
kodomo.a = 100;

とすると
oya.aも100になります。(kodomoとoyaが同じインスタンスだから)
※ちなみにclassではなくstructにすれば、oyaとkodomoは別物になります。


>もしかして、親クラスはオブジェクトをあまり作らずに、できるだけ子クラスで作ったほうがいいんでしょうか?
それをするなら、そもそもCarとBikeの定義をわける必要が無かったということになります。

一つの方法として
以下のようにコンストラクタに親クラスを渡してメンバをコピーする事もできるでしょう。
class Car
{
 public int a;
}
class Bike : Car
{
 public Bike(Car car)
 {
   a = car.a;
 }
}
Car oya = new Car();
Bike kodomo = new Bike(oya);

kodomo = oya
これはあくまで、ポインタ的なものがコピーされるだけです。(インスタンスのクローン(複製)ができるわけではない)
質問を見る限りその辺りが理解できていないと思います。
class Car
{
 public int a;
}
Car oya = new Car();
oya.a = 10;
Car kodomo = new Car();
kodomo = oya;
kodomo.a = 100;

とすると
oya.aも100になります。(kodomoとoyaが同じインスタンスだから)
※ちなみにclassではなくstructにすれば、oyaとkodomoは別物になります。


>もしかして、親クラスはオブジ...続きを読む

Qユーザコントロールのイベント取得について(C#)

環境:Visual Studio 2005 C# Windows Application
フォームに自作のユーザコントロールを貼り付けてそのイベントを取得する勉強をしているものです。

フォームでのユーザコントロールイベントを取得して処理をする方法が分かりません。

状況
ユーザコントロールにはテキストボックスを追加しています。
また、フォームにそのユーザコントロールを追加しています。

確認したいことは、ユーザコントロールのテキストボックスになにか値を入力したタイミングでチェンジイベントをフォーム側で察知し、処理をするというものです。

どなたか、要点だけでもいいので教えていただけないでしょうか?

宜しくお願いいたします。

Aベストアンサー

外部用のdelegateとコントロールで発生するイベント、内部コントロールで発生するイベントの関連付けを行いましょう

コントロール側のソースのclass定義の外で

  public delegate void ChangeEventHandler(object sender, EventArgs e);
といったデリゲートを設置します

コントロールのクラス定義の中で
// 外部で使うイベント名を定義 ... Changedを使用
public event ChangeEventHander Changed;
// 内部で発生したイベントを外部に知らせる
protected void OnChange( EventArgs e )
{
  // 外部のイベントハンドラが接続されているなら
  if ( Changed != null ) {
    Changed( this, e )
  }
}

private textBox1_TextChanged(object sender, EventArgs e)
{
  // 内部のイベントハンドラを呼び出す
  OnChaned(e);
}

といった記述になります

利用する側では
デザイナでコントロールを選択してプロパティウィンドウをイベントタブに切り替えて『Changed』ハンドラを追加するか

コードで
private void OnChanged(object s, EventArgs e)
{
  MessgeBox.Show("sampel");
}

private void Form_Load(object sender, EventArgs e)
{
  // コントロールのChangedイベントハンドラの設定
  UserControl1.Changed += new ChangeEventHandler( OnChanged )
}
といった具合にします

外部用のdelegateとコントロールで発生するイベント、内部コントロールで発生するイベントの関連付けを行いましょう

コントロール側のソースのclass定義の外で

  public delegate void ChangeEventHandler(object sender, EventArgs e);
といったデリゲートを設置します

コントロールのクラス定義の中で
// 外部で使うイベント名を定義 ... Changedを使用
public event ChangeEventHander Changed;
// 内部で発生したイベントを外部に知らせる
protected void OnChange( EventArgs e )
{
  /...続きを読む

Q別のフォームで記述している関数を実行するには?C#

お世話になります。ド素人な質問ですみません。
C#なのですが例えばForm1で記述した関数(関数って呼ぶのかわかりませんが)をForm2で実行するにはどのようにしたらよいのでしょうか?
ネットで検索してみてもなかなかヒットしないのでこちらでお聞きします。

public partial class Form1 : Form
{
 public Form_OzzCalc()
 {
 InitializeComponent();
 }
 
 private void hoge()
 {
 ~
 }
}

このhoge()という関数を別のフォーム(例えばForm2)で呼び出して使うにはどのようにしたらよいのでしょうか?
privateをpublicに変更してもForm2ではこの関数を記述すると「'hoge'は現在のコンテキスト内に存在しません」と出ます。
何か参考になるサイトでも構いません。よろしくお願いいたします。

Aベストアンサー

この記述方法ですとForm1のインスタンス経由で関数を実行します

Form2側からですと

((Form1)Application.OpenForms["Form1"]).hoge();
といった具合です


下のように Form1クラスにスタティック(静的)関数を作成すれば
public static void foo()
{
}

Form2側からは
Form1.foo();
といった具合で実行できます

MessageBoxのShowがこの静的実装がされています

Q【C#】 あるイベントから別イベントを呼び出す。

タイトルの通り、あるイベント内から別イベントの処理を呼び出したいと
考えています。ですが、方法がわかりません。

【質問投稿に至った経緯】
現状は、検索から一覧を表示し1つを選択、選択した内容の更新を行なうプログラムを作成しています。選択した内容を更新するところまではできました。ただ、更新内容を確認できるよう一覧画面に前回検索した内容を一覧表示させたいと考えています。この時、検索イベントを呼び出し、一覧を再表示させようと思っています。

Aベストアンサー

「検索イベント」とは、[検索]ボタンをクリックした時の
イベント処理の事でしょうか?
それならば、一覧表示処理を別ルーチンに分けて、[検索]
ボタンClickイベントと同じルーチンをCallする様にすれば
良いと思いますが?


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング