ここから質問投稿すると、最大4000ポイント当たる!!!! >>

VB.NETで作成したWebページのDropDownListを変更させたくないのですが、Enable=Falseにすると文字の色が灰色になってしまって大変見にくいので、TextコントロールのReadOnlyのように、変更不可にする方法はあるのでしょうか?
おしえてください~

このQ&Aに関連する最新のQ&A

A 回答 (2件)

> ”入力できないようにする”というのは、Enable=Falseと同じで、”現在選択されているものを他のに変更できなくする”という意味で書きました。



なるほどなるほど。

> Enable=Falseだと色が灰色になってしまいますので、どうやって
> ・Enable=Falseで黒くするのか?
> ・ReadOnlyに換わるものがあるのか?
> ということが聞きたかったのです。

となると CSS とかでも無理っぽいので、
あらかじめ ReadOnly なテキストボックスを非表示にしておき、DropDownList にロックを掛けたいタイミングで
・DropDownList を非表示にする。
・DropDownList で選択されている値を TextBox にセットする。
・TextBox を表示する
とすれば可能です。

これらの動作をクライアント側で行いたいのであれば JavaScript で記述すればいいです。
下記が参考になるかもしれません。
http://chaichan.web.infoseek.co.jp/qanda/qa6878. …
    • good
    • 0
この回答へのお礼

ありがとうございます。

やっぱりその方法しかないのですね(><)
できれば避けたかったのですが、その方法でやってみることにします~

お礼日時:2006/09/11 13:36

できれば VB のバージョンと、開発しているのが Windows アプリケーションなのか Web アプリケーションなのかを記述してください。



DropDownList という名称から推測すると ASP.NET の Web アプリケーションを開発中なのでしょうか?
であればブラウザ上でレンダリングされるときは HTML の SELECT コントロールになりますのでユーザーが入力をすることはできず、元から入っている値のどれかを選択するしかできません。
ですのでやりたいことはすでに実現できていると思いますよ。

もし開発しているのが Windows アプリケーションであれば、DropDownList ではなくて ComboBox の間違いじゃないでしょうか?
ComboBox の場合は DropDownStyle プロパティを DropDownList に設定すれば、ユーザーは入力することができず、値を選択するしかできなくなります。

この回答への補足

ごめんなさい。説明不足でした。

開発はWebアプリケーションです。

”入力できないようにする”というのは、Enable=Falseと同じで、”現在選択されているものを他のに変更できなくする”という意味で書きました。

DropDownListには、すでに選択する項目が複数入っていて、いわゆるEnable=Falseのようにスイッチで変更可、変更不可を切り替えたかったのです。

TextBoxはReadOnlyプロパティにて変更できなくなりますが、DropDownlistにはこのプロパティがありません。

Enable=Falseだと色が灰色になってしまいますので、どうやって
・Enable=Falseで黒くするのか?
・ReadOnlyに換わるものがあるのか?
ということが聞きたかったのです。

補足日時:2006/09/04 11:42
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

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

Qコンボボックスを読み取り専用にするには

VB2005です。
コンボボックスを読み取り専用にしたいのですが、
TextBoxにはReadOnly=Trueにすれば読み取り専用になりますが
ComboBoxを読み取り専用にしたい場合は、どうしたらよいのでしょうか?

Aベストアンサー

「ある値以外を選択できないようにしたい」というだけなら、
一度コンボボックスのItemをクリアーして、選択させたい値のみをAddしてみるとか。
ComboBox1.Items.Clear()
ComboBox1.Items.Add("aaa")
ComboBox1.SelectedIndex = 0

QDataGridViewで指定したセルの値を取得

こんにちは。

VB2008のDataGridViewで指定したセルの値を取得をする方法がわかりません。
どなたか教えてください。

Aベストアンサー

こんばんは.

 Dim Data As String
 Data = Me.DataGridView(0, 2).Value
 MsgBox(Data)

みたいな感じで取れないですかね???

QDataTableから条件を満たした行を別のDatatableへコピーしたい

VC#2005とSQLServer2005ExpressEditionでWindowsアプリケーションを作成しています。

データベースの中から1つのマスタテーブルのデータを呼び出すのにTableAdapterを使ってDataTableにデータをバインドしました。
そこから条件を満たしている行をすべて抽出して同じ型のDataTableにデータをコピーしたいのです。

ですから、DataTableは2つ用意しています。1つは上記の通りデータをバインドしていますが、もう1つは宣言しただけなのでまだ空っぽの状態です。
DataTableにはカラムが3列あり、その中の1列をグループIDとしています。
条件としてはグループIDが同じであるということです。
やりたいことは条件を満たしている行をすべて抽出して空のデータテーブルにコピーすることです。

どなたかご存知の方いらっしゃれば教えてください。
よろしくお願いします。

Aベストアンサー

C#だったんですね … さほど変わりないと思いますが

お使いのコードが提示されていないのでこちらで適当な変数をでっち上げております
現在お使いのコードを支障の無い範囲で提示しましょう

//元のデータテーブルがdtSourceとすると
// テーブル構造をコピー
DataTable dt = dtSource.Clone();
DataRow r = null;
foreach( DataRow dtRow in dtSource.Select("選択するための文字列"))
{
  r = dt.NewRow();
  for( int n = 0; n < dtRow.ItemArray.Length; n++ )
  {
    r[n] = dtRow[n];
  }
  dt.Rows.Add( r );
}
といった具合になると思います

# 前回の投稿中のstSorceはdtSourceの単なるミスです

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

QCloseとDisposeの違い

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、タイマーコントロールのイベントに記述していますと、それは実行され続けます。

これを防ぐために、Me.Dispose() を使います。すると、きれいにプロセスは終了し、イベントは発生しない模様です。

そこで、「フォームを閉じる」意味のMe.Close() をすべてMe.Dispose() に変えてしまいました。確実にプロセスを破棄出来ると思ったからです。Webで調べると、違いは「再利用できる、できないの違い」という答えがありましたが、それはきっと、ファイルやオブジェクトのことで、フォームの場合は、再びShowまたはShowDialogで表示させることは可能でしたので、特に問題は感じていませんでした。

ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。Me.Close() に変えるとうまくいきました。

わけわからなくなってきました。。。

ちなみに、その残ったフォームは、スタートアップフォームであり、別のフォームからShowまたはShowDialogメソッドで呼び出したものではありません。

ここで4つの仮説を立ててみました。

1. ShowDialogで呼び出したフォームは、Me.Dispose()、Showで呼び出した、あるいは、スタートアップフォームは、Me.Close() すれば破棄できる

2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

3. 呼び出し方ではなく、別の要因が存在する

4. 併記する必要がある場合がある

Me.Close()
Me.Dispose()

または、

Me.Dispose()
Me.Close()



どれが正しいのでしょうか?どなたがご存じの方がいらっしゃいましたら、ご教授いただけませんでしょうか? どうぞよろしくお願い申し上げます。ありがとうございました。

みなさまこんばんわです。よろしくお願い申し上げます。

VB.NET 2008でコーディングしています。
CloseとDisposeの違いについて教えていただきたいのです。

これらのメソッドは、開いたファイルを閉じるときなどにも使いますが、今回お尋ねするのは、フォームを閉じるとき、しかも、自ら呼び出すとき(Me.Close() と、Me.Dispose() )のみに限ったこととしてお話しさせていただきます。

たとえば、ShowDialog() で呼び出したフォームは、そのフォーム内でMe.Close() しても、プロセスは残り、たとえば、...続きを読む

Aベストアンサー

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリケーション設定で、「最後のフォームを閉じるとき」にアプリケーションがシャットダウンする設定になってるのに、シャットダウンしてくれないことが起こりました。調べてみると、Me.Dispose() が原因。
Me.Close() に変えるとうまくいきました。

通常はどちらでもうまくいきます。

>2. ShowDialogで呼び出したフォームは、Me.Dispose()、スタートアップフォームは、Me.Close()、Showで呼び出したフォームは、どちらでも、破棄できる

ShowDialogの場合は、メソッド内部で、ハンドルが破棄されているため、Close()メソッドの際にDispose()メソッドが呼び出されます。

>3. 呼び出し方ではなく、別の要因が存在する

そう思います。

>4. 併記する必要がある場合がある

インスタンスを明示的に破棄したほうがよい場合は多く存在します。
Disposeが使えるメンバはIDisposableをインターフェースとして持っているメンバです。
これらのメンバは、外部とのやり取りを行うものが多くあります。
たとえばSQLClientに含まれるようなメンバです。

外部とのコネクションを確実に破棄を保障してほしいなどという場合がありますよね、このようなときに使用します。

Using構文を使用するのとまったく同じ理由になります。
正確にはUsing構文を使用できるメンバには条件があります、IDisposableをインターフェースとして持っているメンバに限るというものです。

ほかにもガーベージコレクタによるファイナライズを伴うかどうかという違いがあります。
Disposeの場合はファイナライズが同時に行われるため、使用していたメモリ空間を開放することができます。

上記のような理由により、
Me.Close()
Me.Dispose()
は両方書いたほうがよいと思います。

蛇足ですが、
Me.Dispose()
Me.Close()
はエラーになります。
Me.Dispose()により、Me本体(インスタンス)は削除されてしまいます。
存在しないMeに対してCloseメソッドを要求することはできないためです。

Me.Close()
Me.Dispose()
は根本的に違うものです。

formについて、Close()メソッドはフォームの表示を終了させるメソッドです。

ほかのクラスも同様。すべてのDispose()メソッドについて、これはインスタンスの破棄を明示的に行うものです。

>再利用できる、できないの違い

Dispose()はインスタンスが破棄されるため、再びコンストラクタを用いて、インスタンスを生成しないいけません。

一方Close()はインスタンスが残っているので、それを利用することができます。

>1. ところが、アプリ...続きを読む

QASP.Net ラベルの内容をすぐに更新したい

大変お世話になっております。
昨年は大変お世話になり、多大なご教授をいただきました。
本年も何卒よろしくお願いいたします。

前々からお聞きしようと思っていたのですが、
処理によってラベルの内容がすぐに反映しないのですが
どのようにすればすぐに反映するのでしょうか?

例えば下記のような場合は、ラベルの内容を初期化したいのですが、
それがされるのは、ボタンの処理後になります。
ボタン処理の前にラベルを更新するにはどうすればいいのでしょうか?

もしかしたら 大変初歩的な質問かもしれませんが、
何卒よろしくお願いいたします。

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles RecDateButton.Click

  Me.Label1.Text = ""

  ここからボタンの処理が開始します

End Sub

Aベストアンサー

クライアント側で、ボタンがクリックされた瞬間に行う。
具体的には、クライアント側でボタンのonclickイベントで行う。

<input type="submit" onclick="document.getElementById('Label1').innerText = ''">

サーバーコントロールにクライアントイベント記述用のOnClientClickプロパティがあるので、そこに書く。
ポストバック時では遅いので、一回目のリクエストのときにonclickイベント付のボタンをブラウザに返す。

protected void Page_Load(object sender, EventArgs e)
{
Button1.OnClientClick = "document.getElementById('" + Label1.ClientID + "').innerText = ''";
}

サーバー側イベントとクライアント側イベントは別物だといことを理解するべし。

ユーザーがボタンをクリック
→ボタンのクライアントイベント(onclick)
→formのsubmit
→ブラウザがPOST
→ASP.NETがポストバックを受け取る
→Page_Loadやらいろいろ
→ボタンのサーバーイベント(Click)
→Renderやらいろいろ
→ブラウザにHTMLを返す
→ブラウザ側の表示

クライアント側で、ボタンがクリックされた瞬間に行う。
具体的には、クライアント側でボタンのonclickイベントで行う。

<input type="submit" onclick="document.getElementById('Label1').innerText = ''">

サーバーコントロールにクライアントイベント記述用のOnClientClickプロパティがあるので、そこに書く。
ポストバック時では遅いので、一回目のリクエストのときにonclickイベント付のボタンをブラウザに返す。

protected void Page_Load(object sender, EventArgs e)
{
Button1.OnClientClick = "docu...続きを読む

QASP.NETでのメッセージ画面を出すには

はじめまして。
ASP.NET(C#)で、開発をしています。
例えば、内部である処理が終わった後に「完了!」みたいなメッセージ画面をポップアップさせたいと思っております。いろいろ調べてはいるんですが、方法がわかりません。JSを使わなければならないのかなとは思いますが、具体的な方法がわかりません。
よい方法がありましたら、教えていただけないでしょうか。よろしくお願いいたします。

Aベストアンサー

確認は取れていませんが、多分以下のHPの内容でいけると思いますが…。
参考に如何でしょうか。

・ASP.NETでメッセージボックス(OK・NO)の処理について
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=5952&forum=7&6

・Webアプリでメッセージボックスを使いたい
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1644&forum=7&7

Qvb.netで画面のコントロールId名を変数で動的に制御し処理する方法

以下のような処理がしたいです。
実現方法をご存知でしたらご教授下さい。

画面のコントロールText1~Text3があります。
For~Nextでこのコントロールに値をセットしたいです。

For i = 1 To 3
  Texti.Text = i
  ※このiのTextの後ろのiの部分を1~3と動的に変更し、各Textに値を設定したいです。
Next

Aベストアンサー

こんにちは、webでは、findcontrolを使うみたいです。

いかに、参考URLから、引用すると
***********************************
Dim L, U, i As Integer
Dim tx As System.Web.UI.WebControls.TextBox
L = LBound(dat)
U = UBound(dat)
For i = L To U
'コントロール名を探し出す
tx = FindControl("TextBox" & CStr(i))
'見つかったコントロールのTextプロパティに代入
tx.Text = dat(i)
Next

******************引用終わり*******
このようにすると良いみたいです。
asp findcontrolで、検索すると、
結構ヒットするみたいです。

参考URL:http://natchan-develop.seesaa.net/

Qdropdownlistのvalue値の取得方法について

VS2005 WinXP pro

下のようにページ表示時にDropDownListに年を入れています。

しかし、DropDownListを何に変更してもSelectedIndexした
値が取れてしまい困っています

(今なら常に2008が取れてしまう)

本当なら2009を選択したときは下の関数で
2009と表示したいのです。

お力添えお願いいたします。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load


'--------------------------------------------------------------------------------------
' 年をコンボボックスに追加

'--------------------------------------------------------------------------------------
Dim sNum As Integer = 0
Dim y As Integer
For y = 2007 To Year(Now) + 3
cmbYear.Items.Add(New ListItem(y, y))
If y = Year(Now) Then
cmbYear.SelectedIndex = sNum←ここを消すと正しく動く
End If
sNum += 1
Next
End Sub

Protected Sub btnEdit_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnEdit.Click

'--------------------------------------------------------------------------------------
' 選択項目の取得

'--------------------------------------------------------------------------------------
MsgBox(cmbYear.Items.Item(cmbYear.SelectedIndex).Value)2008
MsgBox(cmbYear.SelectedValue)←2008 どちらも2008

End Sub


以上、よろしくお願い致します。

VS2005 WinXP pro

下のようにページ表示時にDropDownListに年を入れています。

しかし、DropDownListを何に変更してもSelectedIndexした
値が取れてしまい困っています

(今なら常に2008が取れてしまう)

本当なら2009を選択したときは下の関数で
2009と表示したいのです。

お力添えお願いいたします。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs) Handles Me.Load


'------------------------------------------------------------------------...続きを読む

Aベストアンサー

Page_Loadイベントのなかで コンボボックスを設定する際に PostBackしてきたのかそれとも初めてPage_Loadが呼ばれたのかを判断しましょう

Asp.NETの場合 PostBack時にもPage_Loadイベントが呼ばれます

Page_Loadの初期化処理を
if IsPostBack = False then
  ' 初めて呼ばれた場合
  ' ここでコンボボックスの初期設定を行う
Else
  ' 何かのユーザーアクションなどによりPostBackした場合
End if
といった具合しましょう

QGridviewとDataGridviewの違い

visual web developer2010を使用して
社内用の簡単なwebアプリケーションを作成しています。

DataGridViewとGridViewの違いは
やっとのことでなんとなく分かったのですが
(GridViewはDataGridViewの進化版?)

自分のやりたいことをネットで検索してコードを探すと
そのほとんどがDataGridViewを使用したものです。

Clipboard.SetDataObject(DataGridView1.GetClipboardContent())

たとえば上記のような感じです。

これをGridViewで使えるようにしたくて
自分なりにコードを書き換えたりしてみるのですが
(DataGridView1をGridView1にしてみたり、
DataGridView1をMe.DataGridView1にしてみたりしています)
すべてエラーになってしまいます。

だったらDataGridViewを設置したいと思うのですが
ツールバー内にDataGridViewはあるものの
色が薄くなっていて(グレーアウトみたいな感じです)選択できない状態です。

GridViewで、DataGridViewのコードを参考にして
少し書き換えれば動くようなことはないのでしょうか?
または
DataGridViewが使える方法を教えてください!

ご教授お願いいたします!

visual web developer2010を使用して
社内用の簡単なwebアプリケーションを作成しています。

DataGridViewとGridViewの違いは
やっとのことでなんとなく分かったのですが
(GridViewはDataGridViewの進化版?)

自分のやりたいことをネットで検索してコードを探すと
そのほとんどがDataGridViewを使用したものです。

Clipboard.SetDataObject(DataGridView1.GetClipboardContent())

たとえば上記のような感じです。

これをGridViewで使えるようにしたくて
自分なりにコードを書き換えたりしてみるのですが
(...続きを読む

Aベストアンサー

> DataGridViewとGridViewの違いは
> やっとのことでなんとなく分かったのですが

いや、この書き込みをみる限りではわかってないと思いますよ。

DataGridView:
 Windowsアプリケーション用のGridコントロール。
 Webでは使えません。

GridView:
 Webアプリケーション用のGridコントロール。
 Webなので、最終的にはHTMLに変換されます。

この一番基本的な違いがわかってないと思います。

> 自分のやりたいことをネットで検索してコードを探すと
> そのほとんどがDataGridViewを使用したものです。

Webアプリケーションの場合、すべてHTMLに変換されますから、
システムの動作はHTMLをベースに考える必要があります。
やりたいことを考えるうえで、HTMLだとどう動かせばよいか、
というところから学習するのがよいかと思います。


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

人気Q&Aランキング