C # - Использование сочетания клавиш для быстрого открытия файлов изображений - PullRequest
0 голосов
/ 03 ноября 2011

Я пытаюсь понять, как написать код для быстрого открытия файла PNG из моей маленькой программы. Вот сценарий:

  • У меня есть несколько файлов изображений, например PNG, в нескольких папках (в том же корне, что и программа).
  • Я хочу иметь возможность вспомнить любое из этих изображений и быстро отобразить их с минимальным количеством нажатий клавиш, и, надеюсь, мышь не понадобится.

Затем, пока программа активна, я хочу иметь возможность

  1. Нажмите клавишу, чтобы программа знала, что я хочу загрузить новый файл, скажем "O";
  2. Введите двузначное имя папки, например «LL», и
  3. Введите двузначное имя файла, например, «05» (где предполагается расширение «.png»)
  4. программа открывает файл /LL/05.png и отображает его в полноэкранном режиме

Я смог сделать «предопределенное» отображение изображения и получил диалоговое окно «Открыть файл» для отображения, но не тот прямой метод, о котором я здесь говорю.

1 Ответ

1 голос
/ 03 ноября 2011

Мое решение не является идеальным и требует много дополнительных проверок.
В любом случае, это отправная точка для ваших нужд.
Прежде всего, установите KeyPreview = true в вашей форме.
Затем используйте:

public partial class Form1 : Form
{
    private bool reading = false;
    private byte dirSize = 2;
    private byte filesize = 2;
    private string keys = "";
    private const string defExt = ".png";
    private string exePath = 
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.O)
        {
            reading = true;
            keys = "";
            e.Handled = true;
            return;
        }

        if (reading)
        {
            Char ch = (char)(e.KeyValue);
            if (Char.IsLetterOrDigit(ch))
            {
                keys += ch;
                e.Handled = true;
            }
            if (keys.Length == (dirSize + filesize))
            {
                string dir = Path.Combine(exePath, keys.Substring(0, dirSize));
                string filename = keys.Substring(dirSize, filesize) + defExt;
                string fullPath = Path.Combine(dir, filename);
                if (File.Exists(fullPath))
                    pictureBox1.Image = Image.FromFile(fullPath);
                reading = false;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...