【VB】String⇒Image
VB2008を使っているのですが、
String形のデータを、ObjectやImageなどの変数に変えることはできませんか?
どうかよろしくお願いします。

A 回答 (2件)

>String形のデータを、ObjectやImageなどの変数に変えることはできませんか?


…とあるので、もしかするとImageに直接文字を貼り付けるような事を
考えておられるのかもしれませんが、それは無理なはずです。
その場合は Graphics.DrawString で書き込んでください。
ヘルプの DrawString の内容にサンプルもあると思いますので
(私が見たのはVS2005のですが)、それを参照してください。

この回答への補足

画像としてStringを表示したいというわけではなく、
Imageの参照文字例としてStringを代入したいと思います。
説明不足ですみません。

補足日時:2008/09/19 13:00
    • good
    • 0

String型のデータをObject型の変数で受け取ることは可能ですよ



Dim sData as String = "ABCDEF"
dim obj as Object
obj = sData
といった具合です

String型から Image型は無理でしょうね
String型の変数にファイル名が代入されているのでこれを使って Image型のオブジェクトを生成するなら
dim sName as String = "Test.jpg"
Dim img as Image
img = Image.FromFile( sName )
といった具合でできますが ・・・
    • good
    • 0
この回答へのお礼

遅れてすみません。
このとおりにしてみたら、うまくできました。
ありがとうございました。

お礼日時:2008/10/26 18:45

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

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

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

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

QVB.netで、動的な型変換を行いたいのですが、、、(CTypeではできない?!)

VB.netで、
動的な型変換を行いたいと思っています。

イメージ的には、
CType(hogehoge,String)やCType(hogehoge,Integer)
CType(hogehoge,MyClassHogehoge)
ではなく、
CType(hogehoge,"String"),CType(hogehoge,"Integer")
CType(hogehoge,"MyClassHogehoge")
というように、

その場の変数で決まる型変換です。

Dim a as MyClassA
Dim b as Object
とあって
CType(b,a)というような変換をしたいのです。

(が、CTypeやDirectCastの第二引数は、
 定義された型名しか受け付け無いようです。)

-----

実際には、

mytype.InvokeMember("変数名", BindingFlags.SetProperty Or BindingFlags.Public Or BindingFlags.NonPublic Or BindingFlags.Instance, Nothing, "インスタンス", New [Object]() {"設定値"})

という処理をやる上で、

"設定値"が文字列(String)である場合、
"変数名"で、動的にアサインされた変数の型(たとえばMyClass)に型変換しないと、
値が設定できないためです。
(CType("設定値","インスタンス"."変数名")というようなこと必要となってくるはずです、、、)

-----

上記手順が、可能なのかどうか、
まったくのナンセンスなのかどうかも
わかっていないので、
一言でもいただけるとたすかります。。。
どうぞよろしくおねがいいたします。

VB.netで、
動的な型変換を行いたいと思っています。

イメージ的には、
CType(hogehoge,String)やCType(hogehoge,Integer)
CType(hogehoge,MyClassHogehoge)
ではなく、
CType(hogehoge,"String"),CType(hogehoge,"Integer")
CType(hogehoge,"MyClassHogehoge")
というように、

その場の変数で決まる型変換です。

Dim a as MyClassA
Dim b as Object
とあって
CType(b,a)というような変換をしたいのです。

(が、CTypeやDirectCastの第二引数は、
 定義された型名しか受け付け無いようで...続きを読む

Aベストアンサー

関数[init]の第二引数[pStr2]がStringなので、それようの受けを作る必要があります。

Stringでの受けができる状態にしておかないと、クラスに用意したメソッドが見つからなくて落ちます。
ただしObject型は、受けが発生してから領域を確保する変数なので、それは考慮する必要はありません。

以下のようにしたら可能かと思います。

Public Class MyClassA
  Private _A As Integer
  Private _B As Double
  Private _C As Decimal
  Private _D As String
  Private _E As Object

  Public Sub A(ByVal Value As Integer)
    _A = Value
  End Sub
  Public Sub B(ByVal Value As Double)
    _B = Value
  End Sub
  Public Sub C(ByVal Value As Decimal)
    _C = Value
  End Sub
  Public Sub D(ByVal Value As String)
    _D = Value
  End Sub
  Public Sub E(ByVal Value As Object)
    _E = Value
  End Sub

  Public Sub A(ByVal Value As String)
    Call A(CInt(Value))
  End Sub
  Public Sub B(ByVal Value As String)
    Call B(CDbl(Value))
  End Sub
  Public Sub C(ByVal Value As String)
    Call C(CDec(Value))
  End Sub
End Class

関数[init]の第二引数[pStr2]がStringなので、それようの受けを作る必要があります。

Stringでの受けができる状態にしておかないと、クラスに用意したメソッドが見つからなくて落ちます。
ただしObject型は、受けが発生してから領域を確保する変数なので、それは考慮する必要はありません。

以下のようにしたら可能かと思います。

Public Class MyClassA
  Private _A As Integer
  Private _B As Double
  Private _C As Decimal
  Private _D As String
  Private _E As Object

 ...続きを読む

QForm間の値の渡し方

1つのForm上のコマンドボタンで別のFormを表示、そこで変数に値を入れ、そのFormを閉じ、元のFormでその変数を使いたいのですが、どうもうまくいきません。
実施したやり方は、一方のFormの宣言領域で、”Public abc As String”を宣言、両方のFormの(変数に値を入れた方と変数を使う方の)プロシージャーの宣言では引数として(abc As String)と記述しました。
因みに、両プロシージャーともイベントプロシージャーです。何か基本的なことができていないのだとは思いますが、どなたか教えていただけませんか?よろしくお願いします。

Aベストアンサー

すでに何件か回答があがっていますので、少し変わった方法をご参考までに。

あまり使われませんが、Formにはtagというプロパティがあります。
これは「文字列形式であれば何でも格納できる」という、上手く使えば便利なプロパティです。

FormAからFormBを呼び出し、FormBで変更した値をFormA.tagにセットします。
ここでFormBをUnloadしてもFormA.tagの値は影響を受けないので自由に使えます。

複数の値を呼び出し元に戻してやる場合に、区切り文字(カンマなど)で連結した文字列をtagに格納し、呼び出し元で区切り文字でsplitして、複数の値を受け渡すという手法をよく使っています。

QVBA オブジェクトが空かどうか判定する

皆様のお知恵を拝借させてください。

エクセルVBAでオブジェクトを入れる変数を定義し、その変数にオブジェクト
が入っているかどうか検査したいのですがどうしたらいいでしょうか。

例えば---
Dim a As Workbook
If a <> nothing then ←この部分が分からない。このままだとエラー。
処理
End if
---------
環境
エクセル2003
WinXPsp1

Aベストアンサー

もし、aが空だったら
If a Is Nothing Then 

もし、aが空じゃなかったら
If Not a Is Nothing Then

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QVB上で実行中の無限ループの止め方

今まで、CUIベースのBASICでのプログラムの経験はあるのですが
Visual系のBASICは初心者です。
原因はわかっているのでプログラムの修正はできるのですが
VB上でコンパイルして実行したときに無限ループに陥ってしまって
どうにもプログラムをとめられなくなります。
そんなことがないように、実行前に全てのプロジェクトを保存して
いますので、そんなに実害はないのですが、どうすればとめられるのでしょう・・
今現在は、タスクマネージャーから強制終了させています。

Aベストアンサー

無限ループの一番内側に
DoEvents
を入れておくと、ウィンドウ切替え->デバッガ終了操作が出来ますよ

危なそうなとこにも入れておくと、何かと安心です。

QForm_Load と Form_Activate のタイミング

あるデータ入力アプリを作っています。
親フォーム(Form0)で番号を決め、子フォーム(Form1,Form2,Form3,Form4) でデータ入力し、それぞれの子フォームを出るとき(Unload Me) に、変数にsaveしています。それを親フォーム(Form0)で登録を選択したとき、入力データをチェックしてDBに格納しています。
すでにDB格納済のデータの場合、親フォームでDBから変数に読み込み、子フォームのForm_Loadで展開しています。
そこで困っているのは、親と子のフォームを行き来するときにデータの表示で前のが残っていたり、消えてしまったりします。
Form_LoadとForm_Activateを通過するタイミングが、ちゃんと理解できていないためコードの記述位置が不適切なのだと思います。

Form_Load と Form_Activate の実行タイミングについて、お教えください。

Aベストアンサー

Form_Loadは、フォームがロードされたときです。
ロードされる条件は、
1.フォームがスタートアップに指定されているとき、アプリが実行された直後。
2.Show メソッドが呼ばれたとき
3.Loadメソッドが呼ばれたとき
4.フォームに貼り付けられたコントロールのプロパティが参照されたとき
5.フォームに貼り付けられたコントロールのメソッドが呼ばれたとき
です。

ただし、一度ロードされると、Unloadされるまで呼ばれません。


Form_Activateは、フォームがアクティブになったとき、つまり、キャプション(ウィンドウのタイトルバー)の色が変わったときです。

QSub ***( ) と Private Sub ***( ) の違い

初歩的な質問で申し訳ありませんが・・・

自分でコードを書いていても、イベントが発生したりした時の処理で、コードのウィンドウで上のドロップダウンリストで選択できる時の処理などは自動的に[Private Sub Command1_Click( )]などと出てくるのでそのまま使っています。自分で別途プロシージャーを作成する時は[Sub ****( )]としています。
ですがその違いを理解しないまま、自分で作成する時は[Private Sub]ではなくて[Sub]を使っています。

Sub ***( ) と Private Sub ***( ) の違いは何なんでしょうか?
どなたか説明頂けませんか?
よろしくお願いします。

Aベストアンサー

「Sub」の部分にカーソルを置いて[F1]を押せばヘルプが起動します。
「指定項目」のところに「Public」と「Private」の説明がありますよ。
省略して「Sub hogehoge()」とした場合は「Public」とみなされます。

Publicは「すべてのモジュールから呼び出せるプロシージャ」ということになります。
Privateとすると「同じモジュールの中からしか呼び出せないプロシージャ」となります。

もしExcelをお持ちでしたらExcelのVBEで標準モジュールを追加し、「Sub Test1()」と「Private Sub Test2()」を作成してみてください。
そしてExcelの[ツール]-[マクロ]-[マクロ(Alt+F8)]でマクロ実行のダイアログを表示させてみるとわかります。
ここには実行できるプロシージャの一覧が表示されますが、Test1は表示されているけれどTest2は表示されません。
Test1はPublicで、Test2はPrivateだからです。

QDATE型変数を初期化する方法

他の変数みたいに
ゼロや""では初期化は出来ないのでしょうか?

Aベストアンサー

初期化とはプログラムループに入る前にある値にプログラムコーディングで設定することですよね。
下記によると、「出来る」といえるのではないですか。
それとも例えば、INISIALIZE関数やメソッドがあるか
と言う質問ですか。
VB(VBAですか。そこをはっきり書かないと。)で
下記サンプルプログラムをやって見ました。
Private Sub Form_Click()
Dim d As Date
d = "0"
Form1.Print "ここを通りました"
Form1.Print d
Form1.Print Format(d, "yy/mm/dd")
MsgBox Year(d)
MsgBox Month(d)
MsgBox Day(d)
End Sub
Form1には00:00:00、89/12/30が表示され、MSGBOXでは1899、12,30(31で無い)と表示されました。
こう言うことはエクセルの日付に似ており、シリアル値
のスタート日を表示しているところから、その値でセットされているはず。したがってd+1とか整数的演算が可能と
言うことであり、表示する時だけyyyy/mm/ddほか書式に
したがってVBが表示してくれると思う。
ただこの利用法は思いつかないが。
""に付いてはやっていませんが。

初期化とはプログラムループに入る前にある値にプログラムコーディングで設定することですよね。
下記によると、「出来る」といえるのではないですか。
それとも例えば、INISIALIZE関数やメソッドがあるか
と言う質問ですか。
VB(VBAですか。そこをはっきり書かないと。)で
下記サンプルプログラムをやって見ました。
Private Sub Form_Click()
Dim d As Date
d = "0"
Form1.Print "ここを通りました"
Form1.Print d
Form1.Print Format(d, "yy/mm/dd")
MsgBox Year(d)
MsgBox Month(d)
MsgBox Da...続きを読む

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。

QVBでグローバル変数を宣言するには

VB初心者ですが。クイズゲームのようなものを作成したいと考えてます。
Private Sub ~ End Sub の中で宣言した変数って他のところに呼び出したり(戻り値として渡す)出来るのでしょうか?
どこでも、いつでも呼び足せるグローバル変数の宣言とはどのようにやるのか、具体的に教えていただけないでしょうか?

Aベストアンサー

>Public a as Integerのように宣言して、初期化するにはどのように記述を行えばよいですか?

>Public a As Boolean = 0
のように記したら”コンパイルエラー”と出ました。

Booleanって整数値取れたかなと思いつつ。
Sub~End Sub内でa = 0を代入したりしてください

扱おうと言うことがあるかどうか疑問だけど

Public Const a As Integer = 10 'グローバルな定数の宣言


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

人気Q&Aランキング

おすすめ情報