Ярлыки не работают в Visual Studio 2010 - PullRequest
0 голосов
/ 09 ноября 2011

Я использую Visual Studio 2010 Ultimate, и я пытаюсь преобразовать некоторые изображения, используя индикатор выполнения и две метки, но текст обеих меток не отображается, а программа просто отображает метки на белом фоне.

enter image description here

ps Задний цвет меток - "Контроль" (не прозрачный)

У меня есть две формы, 1-я форма "Основная" и форма "ProgressDialog"

главная форма, когда я нажимаю кнопку «Сохранить»

//copy the filenames to a new array to sort them
string[] FileNames = openDialog.FileNames;
Array.Sort(FileNames);                

//create an instance of my progress dialog
ProgressDialog progress = new ProgressDialog(this, 100/FileNames.Length);
progress.ShowProgress();

//save all the files in the array
for (int i = 0; i < FileNames.Length; i++)
{    
    //call the SaveImage method 
    SaveImage(FileNames[i], 597, 412, Fill);

    //increase the progresbar and set the label text of the progress dialog to the filename
    progress.Increase(FileNames[i]);
}

progress.Close();//close progress dialog and re-enable the main form

... и вот код моей формы «ProgressDialog»:

Bar: имя индикатора выполнения

Комментарий: название метки с путем изображения в виде текста

private Form SenderForm;// the "Main" form
private int Step; //value to increase in the progress bar

public ProgressDialog(Form sender, int step)//constructor
{
    InitializeComponent();

    SenderForm = sender;
    Step = step;
}

//disable cose button
private const int CP_NOCLOSE_BUTTON = 0x200;
protected override CreateParams CreateParams
{
    get
    {
        CreateParams myCp = base.CreateParams;
        myCp.ClassStyle = myCp.ClassStyle | CP_NOCLOSE_BUTTON;
        return myCp;
    }
}

//re-enable the "Main" form
private void ProgressDialog_FormClosed(object sender, FormClosedEventArgs e)
{
    SenderForm.Enabled = true;
    SenderForm.Activate();//activate form
} 

//increase the value of the progressbar
public void Increase( string comment=null, int step=0)
{
    //if step is 0 -> use the Step of the constructor
    if (step==0) step = Step;

    //if the comment (the current file name) is != of null
    if (comment!=null)
        Comment.Text = comment;//use the comment of the parameter

    //increase progressbar
    Bar.Value += step;            
}

//show "ProgrssDialog" form
public void ShowProgress()
{
    this.Show();
    SenderForm.Enabled = false;//disable the main form
}

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

Это происходит из-за того, что mainthread слишком занят, чтобы обновить метку в пользовательском интерфейсе. U должен выполнить процесс в потоке, чтобы предотвратить зависание пользовательского интерфейса. Посмотрите этот пост C # вопрос о том, как избежать замедления работы графического интерфейса при использовании backgroundworker / thread

0 голосов
/ 09 ноября 2011

Я подозреваю, что цвет шрифта также белый. Попробуйте изменить это или цвет фона надписей, чтобы увидеть, появляется ли текст.

...