Image eines flexSpeedButton in Abhängigkeit dessen Textes anzeigen?

Hallo zusammen,

kann man das Image eines flexSpeedButtons in Abhängigkeit dessen Textes ausgeben?

Danke und Grüße
Manuel Haas

Hallo Herr Haas,

Im Gegensatz zu den Controls FlexFunctionButton (Funktionstasten), FlexToolStripMenuItem (ContextMenü) und FlexTileItem (TileMenü) verfügt der FlexSpeedButton nicht über die Eigenschaft IconOptions .

Diese würde aber auch nicht unbedingt Sinn machen, da er primär dazu dient um ein Feld (an einer bestimmten Bildschirmposition) bei Klick zu befüllen, dessen Inhalt aber nicht ausliest.

Der Text, das Icon, die Größe etc. werden beim FlexSpeedButton sowieso von Ihnen gesetzt und sind nicht dynamisch.

Sie können Sich aber über ein Script behelfen.

Wenn Sie das weiter unten stehende Script verwenden, dann fügen Sie bitte für jeden FlexSpeedButton folgende Zeile in das Ereignis HostDataChange ein.

 CustomImageHelper.AdjustFlexSpeedButton(flexSpeedButton1); 

Script

Kopieren Sie das folgende Script in eine Datei “CustomImageHelper.cs” im Unterverzeichnis “Scripts\Global” in ihrem Repository.

Sie müssen dann die Methode InitializeImages anpassen, um die Bilder bereitzustellen.

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Drawing;
using FlexControls;
namespace FlexScripts
{
    public static class CustomImageHelper
    {
        static Dictionary<string, Image> Images; 
        
        /// <summary>
        /// adjust the image of a FlexSpeedButton according to its text
        /// </summary>
        /// <param name="button">button</param>
		public static void AdjustFlexSpeedButton(FlexSpeedButton button)
		{
			if (button == null) return;
            Image image;
            if (GetImageForText(button.Text, out image))
                button.Image = image;
		}

        /// <summary>
        /// retrieves an image for a text
        /// </summary>
        /// <param name="text">text</param>
        /// <param name="image">return image</param>
        /// <returns>true if image found</returns>
        static bool GetImageForText(string text, out Image image)
        {
            image = null;
            if (string.IsNullOrEmpty(text)) return false;
            if (Images == null) InitializeImages();
            var searchtext = text.ToUpperInvariant();
            if (!Images.ContainsKey(searchtext)) return false;
            image = Images[searchtext];
            return true;
        }


        /// <summary>
        /// loads images from disk
        /// </summary>
        static void InitializeImages()
        {
            Images = new Dictionary<string, Image>();
            // path where images are located (inside repository)
            var path = Path.Combine(ML.GetCurrentRepositoryPath(), "Resources", "ButtonImages");
            
            // sample: load all images from a custom folder
            LoadImagesFromFolder(path);

            // sample: add a single image
            AddImageFromFile("Abort", Path.Combine(path, "myimage.png"));
        }

        /// <summary>
        /// loads all images from folder
        /// imagename => name
        /// </summary>
        /// <param name="folder"></param>
        static void LoadImagesFromFolder(string folder)
        {            
            // get a list of image files in directory
            var files = Directory.EnumerateFiles(folder, "*.*", SearchOption.AllDirectories)
                .Where(s => s.EndsWith(".png", StringComparison.OrdinalIgnoreCase)
                            || s.EndsWith(".jpg", StringComparison.OrdinalIgnoreCase)
                            || s.EndsWith(".jpeg", StringComparison.OrdinalIgnoreCase)
                            || s.EndsWith(".bmp", StringComparison.OrdinalIgnoreCase));

            // process file list
            foreach (var file in files)
            {
                AddImageFromFile(
                    Path.GetFileNameWithoutExtension(file),     // filename without extension => myimage
                    file                                        // complete filename  => c:\xxx\myimage.png                               
                );
            }
        }
        

        /// <summary>
        /// adds an image to list
        /// </summary>
        /// <param name="text">name</param>
        /// <param name="image">image</param>
        static void AddImageFromFile(string name, string fileName)
        {
            if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(fileName)) return;
            var image = ML.GetPictureFromFile(fileName);
            AddImage(name, image);
        }


        /// <summary>
        /// adds an image to list
        /// </summary>
        /// <param name="text">name</param>
        /// <param name="image">image</param>
        static void AddImage(string name, Image image)
        {
            if (string.IsNullOrEmpty(name) || image== null) return;
            if (Images.ContainsKey(name)) return;
            Images.Add(name.ToUpperInvariant(), image);
        }
    }
}
1 Like